diff options
author | Joris | 2016-10-03 20:24:59 +0200 |
---|---|---|
committer | Joris | 2016-10-03 20:24:59 +0200 |
commit | 2a11b28d2ee636eb730dbb5767104aeac9936afa (patch) | |
tree | c7261376073d9334007d24fbe67acda6e11943fa /src/Utils/Physics.elm | |
parent | c79aae101926d3e5a123b707dd1324dca50994b7 (diff) | |
parent | 3a1cbfe23a3d06c3c30828c623a089868cff0670 (diff) |
Merge branch 'master' into demo
Diffstat (limited to 'src/Utils/Physics.elm')
-rw-r--r-- | src/Utils/Physics.elm | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/src/Utils/Physics.elm b/src/Utils/Physics.elm index 5da3737..88a4434 100644 --- a/src/Utils/Physics.elm +++ b/src/Utils/Physics.elm @@ -2,6 +2,7 @@ module Utils.Physics exposing ( getNewPosAndSpeed , getMove , getWaveMove + , getSawToothMove ) import Model.Vec2 exposing (..) @@ -17,24 +18,37 @@ getNewPosAndSpeed dt dir computeSpeed (pos, speed) = ) getMove : Float -> Vec2 -> Vec2 -getMove speed dir = +getMove dist dir = if (isNull dir) then {x = 0, y = 0} else let angle = atan2 dir.y dir.x - in { x = speed * cos angle - , y = speed * sin angle + in { x = dist * cos angle + , y = dist * sin angle } getWaveMove : Float -> Vec2 -> Float -> Float -> Vec2 -getWaveMove speed dir amplitude period = - let move = getMove speed dir +getWaveMove dist dir amplitude period = + let move = getMove dist dir perpendMove = getMove (amplitude * (sin ((norm move) / period))) (clockwiseRotate90 move) in move `add` perpendMove +getSawToothMove : Float -> Vec2 -> Float -> Float -> Vec2 +getSawToothMove dist dir amplitude period = + let move = getMove dist dir + perpendMove = + getMove + ( let max = 1000 / period + middle = max / 2 + modulo = toFloat <| round (norm move) % round max + in amplitude * (if modulo < middle then modulo else max - modulo) / middle + ) + (clockwiseRotate90 move) + in move `add` perpendMove + getAcc : Vec2 -> Vec2 -> Vec2 getAcc move speed = (move `div` 300) `sub` (speed `div` 300) |