further attempt at physics

This commit is contained in:
nek0 2021-04-16 21:47:02 +02:00
parent 9da16fc6a7
commit 134445ed20
1 changed files with 64 additions and 65 deletions

View File

@ -119,71 +119,70 @@ class (Show c, Mass c) => Collidible c where
in in
if broadphaseOverlap if broadphaseOverlap
then then
if tx <= ty let collx =
then if d1x < 0
if tx < dt then
then let (V2 _ g1s) = m1p1 + ((tx *) <$> d1)
if d1x <= 0 (V2 _ g1e) = m1p2 + ((tx *) <$> d1)
then (V2 _ g2s) = m2p4 + ((tx *) <$> d2)
let (V2 _ g1s) = m1p1 + ((tx *) <$> d1) (V2 _ g2e) = m2p3 + ((tx *) <$> d2)
(V2 _ g1e) = m1p2 + ((tx *) <$> d1) s11 = (g1s - g2s) / (g2e - g2s)
(V2 _ g2s) = m2p4 + ((tx *) <$> d2) s12 = (g1e - g2s) / (g2e - g2s)
(V2 _ g2e) = m2p3 + ((tx *) <$> d2) s21 = (g2s - g1s) / (g1e - g1s)
s11 = (g1s - g2s) / (g2e - g2s) s22 = (g2e - g1s) / (g1e - g1s)
s12 = (g1e - g2s) / (g2e - g2s) in
s21 = (g2s - g1s) / (g1e - g1s) any (\x -> x > 0 && x < 1) [s11, s12, s21 ,s22]
s22 = (g2e - g1s) / (g1e - g1s) else
in let (V2 _ g1s) = m1p4 + ((tx *) <$> d1)
if any (\x -> x > 0 && x < 1) [s11, s12, s21 ,s22] (V2 _ g1e) = m1p3 + ((tx *) <$> d1)
then Collision tx (V2 (floor $ signum d1x) 0) (V2 _ g2s) = m2p1 + ((tx *) <$> d2)
else NoCollision (V2 _ g2e) = m2p2 + ((tx *) <$> d2)
else s11 = (g1s - g2s) / (g2e - g2s)
let (V2 _ g1s) = m1p4 + ((tx *) <$> d1) s12 = (g1e - g2s) / (g2e - g2s)
(V2 _ g1e) = m1p3 + ((tx *) <$> d1) s21 = (g2s - g1s) / (g1e - g1s)
(V2 _ g2s) = m2p1 + ((tx *) <$> d2) s22 = (g2e - g1s) / (g1e - g1s)
(V2 _ g2e) = m2p2 + ((tx *) <$> d2) in
s11 = (g1s - g2s) / (g2e - g2s) any (\x -> x > 0 && x < 1) [s11, s12, s21 ,s22]
s12 = (g1e - g2s) / (g2e - g2s) colly =
s21 = (g2s - g1s) / (g1e - g1s) if d1y < 0
s22 = (g2e - g1s) / (g1e - g1s) then
in let (V2 g1s _) = m1p1 + ((ty *) <$> d1)
if any (\x -> x > 0 && x < 1) ((\s ->A.log A.Debug ("s: " <> fromString (show s)) s) [s11, s12, s21 ,s22]) (V2 g1e _) = m1p4 + ((ty *) <$> d1)
then Collision tx (V2 (floor $ signum d1x) 0) (V2 g2s _) = m2p2 + ((ty *) <$> d2)
else NoCollision (V2 g2e _) = m2p3 + ((ty *) <$> d2)
else s11 = (g1s - g2s) / (g2e - g2s)
NoCollision s12 = (g1e - g2s) / (g2e - g2s)
else s21 = (g2s - g1s) / (g1e - g1s)
if ty < dt s22 = (g2e - g1s) / (g1e - g1s)
then in
if d1y <= 0 any (\x -> x > 0 && x < 1) [s11, s12, s21 ,s22]
then else
let (V2 g1s _) = m1p1 + ((ty *) <$> d1) let (V2 g1s _) = m1p2 + ((ty *) <$> d1)
(V2 g1e _) = m1p4 + ((ty *) <$> d1) (V2 g1e _) = m1p3 + ((ty *) <$> d1)
(V2 g2s _) = m2p2 + ((ty *) <$> d2) (V2 g2s _) = m2p1 + ((ty *) <$> d2)
(V2 g2e _) = m2p3 + ((ty *) <$> d2) (V2 g2e _) = m2p4 + ((ty *) <$> d2)
s11 = (g1s - g2s) / (g2e - g2s) s11 = (g1s - g2s) / (g2e - g2s)
s12 = (g1e - g2s) / (g2e - g2s) s12 = (g1e - g2s) / (g2e - g2s)
s21 = (g2s - g1s) / (g1e - g1s) s21 = (g2s - g1s) / (g1e - g1s)
s22 = (g2e - g1s) / (g1e - g1s) s22 = (g2e - g1s) / (g1e - g1s)
in in
if any (\x -> x > 0 && x < 1) [s11, s12, s21 ,s22] any (\x -> x > 0 && x < 1) [s11, s12, s21 ,s22]
then Collision ty (V2 0 (floor $ signum d1y)) in
else NoCollision case (tx < dt, ty < dt, tx < ty, collx, colly) of
else (_, _, True, True, _) ->
let (V2 g1s _) = m1p2 + ((ty *) <$> d1) Collision tx (V2 (floor $ signum d1x) 0)
(V2 g1e _) = m1p3 + ((ty *) <$> d1) (_, _, False, _, True) ->
(V2 g2s _) = m2p1 + ((ty *) <$> d2) Collision ty (V2 0 (floor $ signum d1y))
(V2 g2e _) = m2p4 + ((ty *) <$> d2) (_, _, _, False, False) ->
s11 = (g1s - g2s) / (g2e - g2s) NoCollision
s12 = (g1e - g2s) / (g2e - g2s) --(True, _, _, False, _) ->
s21 = (g2s - g1s) / (g1e - g1s) -- NoCollision
s22 = (g2e - g1s) / (g1e - g1s) -- (_, True, _, _, False) ->
in -- NoCollision
if any (\x -> x > 0 && x < 1) [s11, s12, s21 ,s22] -- (False, _, _, _, _) ->
then Collision ty (V2 0 (floor $ signum d1y)) -- NoCollision
else NoCollision -- (_, False, _, _, _) ->
else -- NoCollision
NoCollision
else else
NoCollision NoCollision