From 337fcf9cd0ba1286b877d770ee676d0d069254f0 Mon Sep 17 00:00:00 2001 From: nek0 Date: Sun, 25 Jul 2021 16:14:05 +0200 Subject: [PATCH] interaction in y direction works --- src/Physics/Classes/Collidible.hs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Physics/Classes/Collidible.hs b/src/Physics/Classes/Collidible.hs index 93517bb..dea5373 100644 --- a/src/Physics/Classes/Collidible.hs +++ b/src/Physics/Classes/Collidible.hs @@ -182,14 +182,14 @@ class (Show c, Mass c) => Collidible c where NoCollision -> if overlap then - let xoverlap = floor (minimum + let xoverlap = floor (maximum (filter (0 >) [ pm2b2x - pm2b1x , pm2b1x - pm1b2x - ]) - yoverlap = floor (minimum + ])) + yoverlap = floor (maximum (filter (0 >) [ pm2b1y - pm1b2y , pm2b2y - pm1b1y - ]) + ])) in if xoverlap < yoverlap then @@ -201,7 +201,7 @@ class (Show c, Mass c) => Collidible c where else if yoverlap < 0 then OverlapCollision - (V2 yoverlap 0) + (V2 0 yoverlap) else NoCollision else NoCollision _ -> A.log @@ -259,6 +259,13 @@ elasticCollision damping mo1 (mo2, OverlapCollision depth) dt = v1y' = 2 * (m1 * dy + m2 * (-dy)) / (m1 + m2) - dy nvel = if m1 == recip 0 then V2 0 0 - else (damping *) <$> V2 v1x' v1y' + else (damping *) <$> + if m2 == recip 0 + then + if dx /= 0 + then V2 (-v1x') v1y' + else V2 v1x' (-v1y') + else + V2 v1x' v1y' in velocityUpdater mo1 nvel