more corner case avoidance

This commit is contained in:
nek0 2019-01-13 16:13:42 +01:00
parent 09f1ca4e88
commit 33ff018294

View file

@ -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)