parent
5cc96cbdba
commit
f3bce99120
18 changed files with 289 additions and 103 deletions
|
@ -2,6 +2,7 @@ module RPGEngine.Input.Playing
|
|||
( handleInputPlaying
|
||||
, checkPlaying
|
||||
, spawnPlayer
|
||||
, putCoords
|
||||
) where
|
||||
|
||||
import RPGEngine.Input.Core (InputHandler, handle, handleKey, composeInputHandlers)
|
||||
|
@ -32,6 +33,8 @@ handleInputPlaying = composeInputHandlers [
|
|||
handleKey (Char 's') Down $ movePlayer South,
|
||||
handleKey (Char 'a') Down $ movePlayer West,
|
||||
|
||||
handleKey (Char 'r') Down restartGame,
|
||||
|
||||
handleKey (Char 'i') Down $ toggleInventoryShown True,
|
||||
handleKey (Char 'i') Up $ toggleInventoryShown False
|
||||
]
|
||||
|
@ -58,13 +61,15 @@ pauseGame g@Game{ state = playing@Playing{} } = pausedGame
|
|||
where pausedGame = g{ state = Paused playing }
|
||||
pauseGame g = g
|
||||
|
||||
restartGame :: Game -> Game
|
||||
restartGame g@Game{ state = playing@Playing{ restart = restarted } } = g{ state = restarted }
|
||||
|
||||
-- Go to next level if there is a next level, otherwise, initialize win state.
|
||||
goToNextLevel :: State -> State
|
||||
goToNextLevel s@Playing{ levels = levels, level = current, count = count, player = player } = nextState
|
||||
where -- Either the next level or winState
|
||||
nextState | (count + 1) < length levels = nextLevelState
|
||||
where nextState | (count + 1) < length levels = nextLevelState
|
||||
| otherwise = Win
|
||||
nextLevelState = s{ level = nextLevel, count = count + 1, player = movedPlayer }
|
||||
nextLevelState = s{ level = nextLevel, count = count + 1, player = movedPlayer, restart = nextLevelState }
|
||||
nextLevel = levels !! (count + 1)
|
||||
movedPlayer = spawnPlayer nextLevel player
|
||||
goToNextLevel s = s
|
||||
|
|
Reference in a new issue