diff options
author | Juan J. Martinez <jjm@usebox.net> | 2023-03-05 11:42:56 +0000 |
---|---|---|
committer | Juan J. Martinez <jjm@usebox.net> | 2023-03-09 12:21:05 +0000 |
commit | beecc1e2af08f81f5cb5d2ebb93aaef59b20fcd5 (patch) | |
tree | f0d1947e0369fdf59a1f626f953c778884873cc0 /src/Game.hs | |
parent | ee50719de81145b5859d957da722cf183e0c8c60 (diff) | |
download | space-plat-hs-beecc1e2af08f81f5cb5d2ebb93aaef59b20fcd5.tar.gz space-plat-hs-beecc1e2af08f81f5cb5d2ebb93aaef59b20fcd5.zip |
Exit stage WIP
Diffstat (limited to 'src/Game.hs')
-rw-r--r-- | src/Game.hs | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/Game.hs b/src/Game.hs index 52ba6a7..850d6ed 100644 --- a/src/Game.hs +++ b/src/Game.hs @@ -62,7 +62,8 @@ initialState m = lives = maxLives, totalLives = maxLives, hitDelay = hitDelay, - gameOverDelay = 0 + gameOverDelay = 0, + exit = False } main :: IO () @@ -155,7 +156,10 @@ gameLoop e = do SDL.rendererRenderTarget renderer $= Just canvas SDL.clear renderer - updatedEnv <- if state.gameOverDelay /= 1 then playLoop (updateState env) else gameOverLoop env + updatedEnv <- + if state.gameOverDelay /= 1 + then playLoop =<< updateState env + else gameOverLoop env SDL.rendererRenderTarget renderer $= Nothing SDL.clear renderer @@ -166,10 +170,13 @@ gameLoop e = do gameLoop updatedEnv where -- update state counters - updateState :: Env -> Env + updateState :: Env -> IO Env updateState env - | state.gameOverDelay > 1 = env {state = state {GS.gameOverDelay = state.gameOverDelay - 1}} - | otherwise = env + | state.gameOverDelay > 1 = pure env {state = state {GS.gameOverDelay = state.gameOverDelay - 1}} + | state.batteries == state.totalBatteries && not state.exit = do + es <- E.addExit env.entities + pure env {entities = es, state = state {GS.exit = True}} + | otherwise = pure env where state = env.state |