fix collision detection

This commit is contained in:
nek0 2018-11-16 07:09:34 +01:00
parent 3db46e2436
commit 040a878b41

View file

@ -844,25 +844,21 @@ checkBoundsCollision2
-> V2 Double -> V2 Double
checkBoundsCollision2 checkBoundsCollision2
pre@(V2 pr pc) nex dt acc (Boundaries (minr, minc) (maxr, maxc)) 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 && incol = V2 0 1 * acc
| colltc < dt && inrow = V2 1 0 * acc
| otherwise = acc | otherwise = acc
where where
V2 vr vc = fmap (/ dt) (nex - pre) V2 vr vc = fmap (/ dt) (nex - pre)
colltr colltr
| vr > 0 && prr <= maxr = | vr > 0 && prr < maxr && (prc > minc && prc < maxc) =
((fromIntegral (floor pr :: Int) + minr - 0.15) - pr) / vr ((fromIntegral (floor pr :: Int) + minr - 0.15) - pr) / vr
| vr < 0 && prr >= minr = | vr < 0 && prr > minr && (prc > minc && prc < maxc) =
((fromIntegral (floor pr :: Int) + maxr + 0.15) - pr) / vr ((fromIntegral (floor pr :: Int) + maxr + 0.15) - pr) / vr
| otherwise = dt | otherwise = dt
colltc colltc
| vc > 0 && prc <= maxc = | vc > 0 && prc < maxc && (prr > minr && prr < maxr) =
((fromIntegral (floor pc :: Int) + minc - 0.15) - pc) / vc ((fromIntegral (floor pc :: Int) + minc - 0.15) - pc) / vc
| vc < 0 && prc >= minc = | vc < 0 && prc > minc && (prr > minr && prr < maxr) =
((fromIntegral (floor pc :: Int) + maxc + 0.15) - pc) / vc ((fromIntegral (floor pc :: Int) + maxc + 0.15) - pc) / vc
| otherwise = dt | otherwise = dt
inrow = pr > minr && pr < maxr
incol = pc > minc && pc < maxc
prr = pr - fromIntegral (floor pr :: Int) prr = pr - fromIntegral (floor pr :: Int)
prc = pc - fromIntegral (floor pc :: Int) prc = pc - fromIntegral (floor pc :: Int)