From 33ff0182942938a7ff4c334585bbce3a8463a63a Mon Sep 17 00:00:00 2001 From: nek0 Date: Sun, 13 Jan 2019 16:13:42 +0100 Subject: [PATCH] more corner case avoidance --- src/MainGame/WorldMap.hs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/MainGame/WorldMap.hs b/src/MainGame/WorldMap.hs index 7d23095..1596dca 100644 --- a/src/MainGame/WorldMap.hs +++ b/src/MainGame/WorldMap.hs @@ -847,20 +847,22 @@ checkBoundsCollision2 -> V2 Double checkBoundsCollision2 pre@(V2 pr pc) nex dt acc (Boundaries (minr, minc) (maxr, maxc)) - | colltr < dt || colltc < dt = V2 0 0 + | colltr < dt && colltc < dt = V2 0 0 + | colltr < dt = V2 0 0 + | colltc < dt = V2 0 0 | otherwise = acc where V2 vr vc = fmap (/ dt) (nex - pre) colltr - | vr > 0 && prr <= maxr && (prc >= minc && prc <= maxc) = + | vr > 0 && prr <= maxr && (prc + 0.15 >= minc && prc - 0.15 <= maxc) = ((fromIntegral (floor pr :: Int) + minr - 0.15) - pr) / vr - | vr < 0 && prr >= minr && (prc >= minc && prc <= maxc) = + | vr < 0 && prr >= minr && (prc + 0.15 >= minc && prc - 0.15 <= maxc) = ((fromIntegral (floor pr :: Int) + maxr + 0.15) - pr) / vr | otherwise = dt colltc - | vc > 0 && prc <= maxc && (prr >= minr && prr <= maxr) = + | vc > 0 && prc <= maxc && (prr + 0.15 >= minr && prr - 0.15 <= maxr) = ((fromIntegral (floor pc :: Int) + minc - 0.15) - pc) / vc - | vc < 0 && prc >= minc && (prr >= minr && prr <= maxr) = + | vc < 0 && prc >= minc && (prr + 0.15 >= minr && prr - 0.15 <= maxr) = ((fromIntegral (floor pc :: Int) + maxc + 0.15) - pc) / vc | otherwise = dt prr = pr - fromIntegral (floor pr :: Int)