aboutsummaryrefslogtreecommitdiff
path: root/demos
diff options
context:
space:
mode:
Diffstat (limited to 'demos')
-rw-r--r--demos/pong/Pong.hs11
1 files changed, 6 insertions, 5 deletions
diff --git a/demos/pong/Pong.hs b/demos/pong/Pong.hs
index 906e89b..accc75d 100644
--- a/demos/pong/Pong.hs
+++ b/demos/pong/Pong.hs
@@ -76,16 +76,17 @@ newWorld =
76stepBall vel = collideBall vel .> moveBall 76stepBall vel = collideBall vel .> moveBall
77 77
78collideBall :: Vector2 -> Step [GameObject] e GameObject (Vector2, GameObject) 78collideBall :: Vector2 -> Step [GameObject] e GameObject (Vector2, GameObject)
79collideBall vel = step $ \_ _ gos _ ball -> 79collideBall vel = step $ \_ dt gos _ ball ->
80 let (AABB2 pmin pmax) = aabb ball `aabbAdd` pos ball 80 let (AABB2 pmin pmax) = aabb ball `aabbAdd` pos ball
81 collideCol = x pmin < 0 || x pmax > 1 81 collideCol = x pmin < 0 || x pmax > 1
82 collideRow = 82 collideRow = y pmin < 0 || y pmax > 1 || any (collide ball) (tail gos)
83 y pmin < 0 || y pmax > 1
84 || any (collide ball) (tail gos)
85 negx v@(Vector2 x y) = if collideCol then vec2 (- x) y else v 83 negx v@(Vector2 x y) = if collideCol then vec2 (- x) y else v
86 negy v@(Vector2 x y) = if collideRow then vec2 x (- y) else v 84 negy v@(Vector2 x y) = if collideRow then vec2 x (- y) else v
87 vel' = negx . negy $ vel 85 vel' = negx . negy $ vel
88 in ((vel', ball), collideBall vel') 86 delta = dt -- A small delta to apply when collision occurs.
87 adjustX = if collideCol then scale delta (vec2 (x vel) 0) else vec2 0 0
88 adjustY = if collideRow then scale delta (vec2 0 (y vel)) else vec2 0 0
89 in ((vel' + adjustX + adjustY, ball), collideBall vel')
89 90
90collide go1 go2 = 91collide go1 go2 =
91 let (AABB2 (Vector2 xmin1 ymin1) (Vector2 xmax1 ymax1)) = 92 let (AABB2 (Vector2 xmin1 ymin1) (Vector2 xmax1 ymax1)) =