From 897bfe0f72ddc80a020a421cbe987b54716e571e Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Sat, 11 Mar 2023 23:17:21 +0000 Subject: Exit transition --- src/Game/Entities/Exit.hs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'src/Game/Entities/Exit.hs') 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]} -- cgit v1.2.3