From 5b13a8c276199f3ccdfdcb0d96dd7631b7e1b1fb Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Tue, 16 May 2023 22:13:37 +0100 Subject: Use play state instead of level complete, that includes game over --- src/Game.hs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'src/Game.hs') diff --git a/src/Game.hs b/src/Game.hs index 50d9dc1..7ed7ade 100644 --- a/src/Game.hs +++ b/src/Game.hs @@ -155,11 +155,9 @@ gameLoop e = do SDL.rendererRenderTarget renderer $= Just canvas SDL.clear renderer - updatedEnv <- - if state.gameOverDelay /= 1 - then playLoop updatedToasterEnv - else gameOverLoop updatedToasterEnv - + updatedEnv <- case state.playState of + GS.GameOver -> gameOverLoop updatedToasterEnv + _ -> playLoop updatedToasterEnv T.render renderer updatedEnv.toaster SDL.rendererRenderTarget renderer $= Nothing @@ -199,11 +197,16 @@ playLoop e = do -- update state counters, etc updateState :: Env -> IO Env updateState env - | state.gameOverDelay > 1 = pure env {state = state {GS.gameOverDelay = state.gameOverDelay - 1}} + | state.gameOverDelay > 0 = do + let delay = state.gameOverDelay - 1 + pure $ + if delay > 0 + then env {state = state {GS.gameOverDelay = delay}} + else env {state = state {GS.playState = GS.GameOver}} | state.batteries == state.totalBatteries && not state.exit = do es <- E.addExit env.entities x (y - 8) -- adjusted to player's height pure env {entities = es, state = state {GS.exit = True}} - | state.levelCompleted == GS.ExitDone = do + | state.playState == GS.ExitDone = do map' <- M.load (env.mapList !! (env.state.currentLevel + 1)) env.tsTexture entities <- E.mkEntities env.sprites map' env.controlsRef pure $ -- cgit v1.2.3