Jumpbacks and continue
This commit is contained in:
parent
dab6fadad4
commit
b7278d6afc
11 changed files with 59 additions and 44 deletions
|
@ -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
|
|
@ -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
|
||||
|
|
Reference in a new issue