Use menus for combat and picking up items
Refactor a bunch of stuff around to allow for polymorphically surfacing an EntityChar for all entities, and use this to write a generic `entityMenu` function, which generates a menu from the chars of a list of entities - and use that to fully implement (removing `undefined`) menus for both attacking and picking things up when there are multiple entities on the relevant tile.
This commit is contained in:
parent
7d8ce026a2
commit
8a1235c3dc
26 changed files with 232 additions and 212 deletions
|
|
@ -37,11 +37,11 @@ getInitialState = initialStateFromSeed <$> getRandom
|
|||
initialStateFromSeed :: Int -> GameState
|
||||
initialStateFromSeed seed =
|
||||
let _randomGen = mkStdGen seed
|
||||
char = mkCharacter
|
||||
chr = mkCharacter
|
||||
(_characterEntityID, _entities)
|
||||
= EntityMap.insertAtReturningID
|
||||
(Position 0 0)
|
||||
(SomeEntity char)
|
||||
(SomeEntity chr)
|
||||
mempty
|
||||
_messageHistory = mempty
|
||||
_revealedPositions = mempty
|
||||
|
|
@ -56,10 +56,10 @@ positionedCharacter :: Lens' GameState (Positioned Character)
|
|||
positionedCharacter = lens getPositionedCharacter setPositionedCharacter
|
||||
where
|
||||
setPositionedCharacter :: GameState -> Positioned Character -> GameState
|
||||
setPositionedCharacter game char
|
||||
setPositionedCharacter game chr
|
||||
= game
|
||||
& entities . at (game ^. characterEntityID)
|
||||
?~ fmap SomeEntity char
|
||||
?~ fmap SomeEntity chr
|
||||
|
||||
getPositionedCharacter :: GameState -> Positioned Character
|
||||
getPositionedCharacter game
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue