diff --git a/src/Collision.hs b/src/Collision.hs new file mode 100644 index 0000000..4ad56f4 --- /dev/null +++ b/src/Collision.hs @@ -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) diff --git a/src/MainGame/MindMap.hs b/src/MainGame/MindMap.hs index 8aa42e1..4b0202a 100644 --- a/src/MainGame/MindMap.hs +++ b/src/MainGame/MindMap.hs @@ -18,7 +18,9 @@ import NanoVG hiding (V2(..)) import Types -import MainGame.WorldMap (checkBoundsCollision2, drawTile) +import MainGame.WorldMap (drawTile) + +import Collision import Util diff --git a/src/MainGame/WorldMap.hs b/src/MainGame/WorldMap.hs index 287a83b..079e7c4 100644 --- a/src/MainGame/WorldMap.hs +++ b/src/MainGame/WorldMap.hs @@ -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) diff --git a/tracer-game.cabal b/tracer-game.cabal index b2fd9fc..86e28c7 100644 --- a/tracer-game.cabal +++ b/tracer-game.cabal @@ -35,6 +35,7 @@ executable tracer-game , Types.Entity , Types.NPCState , Animation + , Collision , StateMachine , Floorplan , Interior