Add support for multiple levels
Add a data structure, based on the zipper comonad, which provides support for multiple levels, each of which is its own entity map. The current level is provided by coreturn, which the `entities` lens has been updated to use. Nothing currently supports going up or down levels yet - that's coming next.
This commit is contained in:
parent
e669b54f0c
commit
6b0bab0e85
11 changed files with 397 additions and 14 deletions
|
|
@ -25,6 +25,7 @@ import Control.Monad.Random (getRandom)
|
|||
--------------------------------------------------------------------------------
|
||||
import Xanthous.Game.State
|
||||
import Xanthous.Data
|
||||
import Xanthous.Data.Levels
|
||||
import qualified Xanthous.Data.EntityMap as EntityMap
|
||||
import Xanthous.Data.EntityMap.Graphics (visiblePositions)
|
||||
import Xanthous.Entities.Character (Character, mkCharacter)
|
||||
|
|
@ -38,11 +39,12 @@ initialStateFromSeed :: Int -> GameState
|
|||
initialStateFromSeed seed =
|
||||
let _randomGen = mkStdGen seed
|
||||
chr = mkCharacter
|
||||
(_characterEntityID, _entities)
|
||||
(_characterEntityID, level)
|
||||
= EntityMap.insertAtReturningID
|
||||
(Position 0 0)
|
||||
(SomeEntity chr)
|
||||
mempty
|
||||
_levels = oneLevel level
|
||||
_messageHistory = mempty
|
||||
_revealedPositions = mempty
|
||||
_promptState = NoPrompt
|
||||
|
|
@ -108,4 +110,4 @@ entitiesCollision
|
|||
entitiesCollision = join . maximumMay . fmap entityCollision
|
||||
|
||||
collisionAt :: MonadState GameState m => Position -> m (Maybe Collision)
|
||||
collisionAt pos = uses (entities . EntityMap.atPosition pos) entitiesCollision
|
||||
collisionAt p = uses (entities . EntityMap.atPosition p) entitiesCollision
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue