move collision detection out of MainGame module
This commit is contained in:
parent
06845657f2
commit
a68f4fc7e7
4 changed files with 69 additions and 30 deletions
35
src/Collision.hs
Normal file
35
src/Collision.hs
Normal file
|
@ -0,0 +1,35 @@
|
|||
module Collision where
|
||||
|
||||
import Linear (V2(..))
|
||||
|
||||
import Types
|
||||
|
||||
checkBoundsCollision2
|
||||
:: V2 Double
|
||||
-> V2 Double
|
||||
-> Double
|
||||
-> V2 Double
|
||||
-> Boundaries Double
|
||||
-> V2 Double
|
||||
checkBoundsCollision2
|
||||
pre@(V2 pr pc) nex dt acc (Boundaries (minr, minc) (maxr, maxc))
|
||||
| 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 + 0.15 >= minc && prc - 0.15 <= maxc) =
|
||||
((fromIntegral (floor pr :: Int) + minr - 0.15) - pr) / vr
|
||||
| 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 + 0.15 >= minr && prr - 0.15 <= maxr) =
|
||||
((fromIntegral (floor pc :: Int) + minc - 0.15) - pc) / vc
|
||||
| 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)
|
||||
prc = pc - fromIntegral (floor pc :: Int)
|
|
@ -18,7 +18,9 @@ import NanoVG hiding (V2(..))
|
|||
|
||||
import Types
|
||||
|
||||
import MainGame.WorldMap (checkBoundsCollision2, drawTile)
|
||||
import MainGame.WorldMap (drawTile)
|
||||
|
||||
import Collision
|
||||
|
||||
import Util
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@ import MindMap
|
|||
import NPC
|
||||
-- import Object
|
||||
import Animation
|
||||
import Collision
|
||||
|
||||
loadMap :: Affection UserData ()
|
||||
loadMap = do
|
||||
|
@ -956,32 +957,32 @@ updateMap dt = do
|
|||
{ worldState = nws2
|
||||
}
|
||||
|
||||
checkBoundsCollision2
|
||||
:: V2 Double
|
||||
-> V2 Double
|
||||
-> Double
|
||||
-> V2 Double
|
||||
-> Boundaries Double
|
||||
-> V2 Double
|
||||
checkBoundsCollision2
|
||||
pre@(V2 pr pc) nex dt acc (Boundaries (minr, minc) (maxr, maxc))
|
||||
| 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 + 0.15 >= minc && prc - 0.15 <= maxc) =
|
||||
((fromIntegral (floor pr :: Int) + minr - 0.15) - pr) / vr
|
||||
| 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 + 0.15 >= minr && prr - 0.15 <= maxr) =
|
||||
((fromIntegral (floor pc :: Int) + minc - 0.15) - pc) / vc
|
||||
| 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)
|
||||
prc = pc - fromIntegral (floor pc :: Int)
|
||||
-- checkBoundsCollision2
|
||||
-- :: V2 Double
|
||||
-- -> V2 Double
|
||||
-- -> Double
|
||||
-- -> V2 Double
|
||||
-- -> Boundaries Double
|
||||
-- -> V2 Double
|
||||
-- checkBoundsCollision2
|
||||
-- pre@(V2 pr pc) nex dt acc (Boundaries (minr, minc) (maxr, maxc))
|
||||
-- | 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 + 0.15 >= minc && prc - 0.15 <= maxc) =
|
||||
-- ((fromIntegral (floor pr :: Int) + minr - 0.15) - pr) / vr
|
||||
-- | 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 + 0.15 >= minr && prr - 0.15 <= maxr) =
|
||||
-- ((fromIntegral (floor pc :: Int) + minc - 0.15) - pc) / vc
|
||||
-- | 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)
|
||||
-- prc = pc - fromIntegral (floor pc :: Int)
|
||||
|
|
|
@ -35,6 +35,7 @@ executable tracer-game
|
|||
, Types.Entity
|
||||
, Types.NPCState
|
||||
, Animation
|
||||
, Collision
|
||||
, StateMachine
|
||||
, Floorplan
|
||||
, Interior
|
||||
|
|
Loading…
Reference in a new issue