Safe Haskell | None |
---|---|
Language | Haskell2010 |
Inhabited dungeon levels and the operations to query and change them as the game progresses.
- data LevelId
- data AbsDepth
- type Dungeon = EnumMap LevelId Level
- ascendInBranch :: Dungeon -> Bool -> LevelId -> [LevelId]
- whereTo :: LevelId -> Point -> Maybe Bool -> Dungeon -> (LevelId, Point)
- data Level = Level {
- ldepth :: !AbsDepth
- lfloor :: !ItemFloor
- lembed :: !ItemFloor
- lactor :: !ActorMap
- ltile :: !TileMap
- lxsize :: !X
- lysize :: !Y
- lsmell :: !SmellMap
- ldesc :: !Text
- lstair :: !([Point], [Point])
- lseen :: !Int
- lclear :: !Int
- ltime :: !Time
- lactorCoeff :: !Int
- lactorFreq :: !(Freqs ItemKind)
- litemNum :: !Int
- litemFreq :: !(Freqs ItemKind)
- lescape :: ![Point]
- lnight :: !Bool
- type ItemFloor = EnumMap Point ItemBag
- type ActorMap = EnumMap Point [ActorId]
- type TileMap = GArray Word16 (Id TileKind)
- type SmellMap = EnumMap Point Time
- at :: Level -> Point -> Id TileKind
- findPoint :: X -> Y -> (Point -> Maybe Point) -> Rnd Point
- findPos :: TileMap -> (Point -> Id TileKind -> Bool) -> Rnd Point
- findPosTry :: Int -> TileMap -> (Point -> Id TileKind -> Bool) -> [Point -> Id TileKind -> Bool] -> Rnd Point
- findPosTry2 :: Int -> TileMap -> (Point -> Id TileKind -> Bool) -> [Point -> Id TileKind -> Bool] -> (Point -> Id TileKind -> Bool) -> [Point -> Id TileKind -> Bool] -> Rnd Point
Dungeon
Abstract level identifiers.
Absolute depth in the dungeon. When used for the maximum depth of the whole dungeon, this can be different than dungeon size, e.g., when the dungeon is branched, and it can even be different than the length of the longest branch, if levels at some depths are missing.
type Dungeon = EnumMap LevelId Level Source #
The complete dungeon is a map from level names to levels.
ascendInBranch :: Dungeon -> Bool -> LevelId -> [LevelId] Source #
Levels in the current branch, k
levels shallower than the current.
:: LevelId | level of the stairs |
-> Point | position of the stairs |
-> Maybe Bool | optional forced direction |
-> Dungeon | current game dungeon |
-> (LevelId, Point) | destination level and the pos of its receiving stairs |
Compute the level identifier and stair position on the new level, after a level change.
We assume there is never a staircase up and down at the same position.
The Level
type and its components
A view on single, inhabited dungeon level. Remembered fields carry a subset of the info in the client copies of levels.
Level | |
|
Level query
findPoint :: X -> Y -> (Point -> Maybe Point) -> Rnd Point Source #
Find a random position on the map satisfying a predicate.
findPos :: TileMap -> (Point -> Id TileKind -> Bool) -> Rnd Point Source #
Find a random position on the map satisfying a predicate.
:: Int | the number of tries |
-> TileMap | look up in this map |
-> (Point -> Id TileKind -> Bool) | mandatory predicate |
-> [Point -> Id TileKind -> Bool] | optional predicates |
-> Rnd Point |
Try to find a random position on the map satisfying conjunction of the mandatory and an optional predicate. If the permitted number of attempts is not enough, try again the same number of times without the next optional predicate, and fall back to trying as many times, as needed, with only the mandatory predicate.