Convert generated levels to walls
Add support for converting generated levels to walls, and merge one into the entity map at the beginning of the game. There's nothing here that guarantees the character ends up *inside* the level though (they almost always don't) so that'll have to be slotted into the level generation process.
This commit is contained in:
parent
e01cf9b056
commit
9ebdc6fbb4
20 changed files with 355 additions and 114 deletions
|
|
@ -11,7 +11,8 @@ import Brick.Widgets.Border.Style
|
|||
import Data.List.NonEmpty(NonEmpty((:|)))
|
||||
|
||||
import Xanthous.Data (Position(Position), x, y, loc)
|
||||
import Xanthous.Data.EntityMap
|
||||
import Xanthous.Data.EntityMap (EntityMap, atPosition)
|
||||
import qualified Xanthous.Data.EntityMap as EntityMap
|
||||
import Xanthous.Entities
|
||||
import Xanthous.Game
|
||||
( GameState(..)
|
||||
|
|
@ -34,16 +35,19 @@ drawMessages (MessageHistory (lastMessage :| _) True) = txt lastMessage
|
|||
-- (MessageHistory _ False) -> padTop (Pad 2) $ str " "
|
||||
-- (MessageHistory (lastMessage :| _) True) -> txt lastMessage
|
||||
|
||||
drawEntities :: (Draw a, Show a) => EntityMap a -> Widget Name
|
||||
drawEntities :: EntityMap SomeEntity -> Widget Name
|
||||
drawEntities em
|
||||
= vBox rows
|
||||
where
|
||||
entityPositions = positions em
|
||||
entityPositions = EntityMap.positions em
|
||||
maxY = fromMaybe 0 $ maximumOf (folded . y) entityPositions
|
||||
maxX = fromMaybe 0 $ maximumOf (folded . x) entityPositions
|
||||
rows = mkRow <$> [0..maxY]
|
||||
mkRow rowY = hBox $ renderEntityAt . flip Position rowY <$> [0..maxX]
|
||||
renderEntityAt pos = maybe (str " ") draw $ em ^? atPosition pos . folded
|
||||
renderEntityAt pos =
|
||||
let neighbors = EntityMap.neighbors pos em
|
||||
in maybe (str " ") (drawWithNeighbors neighbors)
|
||||
$ em ^? atPosition pos . folded
|
||||
|
||||
drawMap :: GameState -> Widget Name
|
||||
drawMap game
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue