Jumpbacks and continue

This commit is contained in:
Tibo De Peuter 2022-12-22 09:43:17 +01:00
parent dab6fadad4
commit b7278d6afc
11 changed files with 59 additions and 44 deletions

View file

@ -2,11 +2,16 @@ module RPGEngine.Input.Paused
( handleInputPaused
) where
import RPGEngine.Input.Core ( InputHandler )
import RPGEngine.Input.Core ( InputHandler, handleAnyKey )
import RPGEngine.Data ( Game )
import RPGEngine.Data ( Game (..), State (..) )
------------------------------ Exported ------------------------------
handleInputPaused :: InputHandler Game
handleInputPaused = undefined
handleInputPaused = handleAnyKey continueGame
continueGame :: Game -> Game
continueGame g@Game{ state = Paused{ continue = state }} = newGame
where newGame = g{ state = state }
continueGame g = g

View file

@ -15,7 +15,7 @@ import RPGEngine.Data
Level(Level, layout),
State(..),
StateBase(StateBase, renderer, inputHandler),
Game(Game, state, player) )
Game(..) )
import RPGEngine.Data.Level ( findFirstOf, directionOffsets )
import RPGEngine.Data.Game ( isLegalMove )
import RPGEngine.Input.Paused ( handleInputPaused )
@ -53,19 +53,22 @@ spawnPlayer l@Level{ layout = lay } p@Player{ position = prevPos } = p{ position
----------------------------------------------------------------------
pauseGame :: Game -> Game
pauseGame g@Game{ state = Playing{ level = level } } = pausedGame
pauseGame g@Game{ state = playing@Playing{} } = pausedGame
where pausedGame = g{ state = pausedState }
pausedState = Paused{ base = newBase, level = level }
pausedState = Paused{ base = newBase, continue = playing }
newBase = StateBase { renderer = renderPaused, inputHandler = handleInputPaused }
pauseGame g = g
-- Move a player in a direction if possible.
movePlayer :: Direction -> Game -> Game
movePlayer dir g@Game{ player = p@Player{ position = (x, y) }} = newGame
where newGame = g{ player = newPlayer }
movePlayer dir g@Game{ state = s@Playing{ player = p@Player{ position = (x, y) }}} = newGame
where newGame = g{ state = newState }
newState = s{ player = newPlayer }
newPlayer = p{ position = newCoord }
newCoord | isLegalMove dir g = (x + xD, y + yD)
| otherwise = (x, y)
(xD, yD) = directionOffsets dir
movePlayer _ g = g
-- TODO
goToNextLevel :: Game -> Game