aboutsummaryrefslogtreecommitdiff
path: root/src/Game/Entities/Exit.hs
diff options
context:
space:
mode:
authorJuan J. Martinez <jjm@usebox.net>2023-03-11 23:17:21 +0000
committerJuan J. Martinez <jjm@usebox.net>2023-03-11 23:17:21 +0000
commit897bfe0f72ddc80a020a421cbe987b54716e571e (patch)
tree4fefcc434abf0e0699f40276efefa71a802457b5 /src/Game/Entities/Exit.hs
parentedc6b611de752a224082583cd00d19ee6da04c5e (diff)
downloadspace-plat-hs-897bfe0f72ddc80a020a421cbe987b54716e571e.tar.gz
space-plat-hs-897bfe0f72ddc80a020a421cbe987b54716e571e.zip
Exit transition
Diffstat (limited to 'src/Game/Entities/Exit.hs')
-rw-r--r--src/Game/Entities/Exit.hs19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/Game/Entities/Exit.hs b/src/Game/Entities/Exit.hs
index 12f160d..b87c115 100644
--- a/src/Game/Entities/Exit.hs
+++ b/src/Game/Entities/Exit.hs
@@ -25,15 +25,24 @@ mkExit sprites x y playerCollision = do
}
updateExit :: Collision -> Entity -> IO Entity
-updateExit touchedPlayer e = do
- touched <- if e.frame < fullyOpen then pure False else touchedPlayer e
- pure $ if touched then e {destroy = True, actions = [ActionExitLevel]} else update
+updateExit touchedPlayer e
+ -- right is the set 0, left set 1
+ | e.dir == DirRight = do
+ touched <- if e.frame < fullyOpen then pure False else touchedPlayer e
+ pure $ if touched then e {dir = DirLeft, frame = 0, actions = [ActionExitStarted]} else updateLoop
+ | otherwise = pure updateOnce
where
fullyOpen :: Int
fullyOpen = 7
- update :: Entity
- update
+ updateLoop :: Entity
+ updateLoop
| e.delay > 0 = e {delay = e.delay - 1}
| e.frame + 1 < frameLimit e = e {delay = frameDelay, frame = e.frame + 1}
| otherwise = e {delay = frameDelay, frame = fullyOpen}
+
+ updateOnce :: Entity
+ updateOnce
+ | e.delay > 0 = e {delay = e.delay - 1}
+ | e.frame + 1 < frameLimit e = e {delay = frameDelay, frame = e.frame + 1}
+ | otherwise = e {destroy = True, actions = [ActionExitDone]}