LambdaHack-0.6.1.0: A game engine library for roguelike dungeon crawlers

Safe HaskellNone
LanguageHaskell2010

Game.LambdaHack.Common.Tile

Contents

Description

Operations concerning dungeon level tiles.

Unlike for many other content types, there is no type Tile, of particular concrete tiles in the dungeon, corresponding to TileKind (the type of kinds of terrain tiles). This is because the tiles are too numerous and there's not enough storage space for a well-rounded Tile type, on one hand, and on the other hand, tiles are accessed too often in performance critical code to try to compress their representation and/or recompute them. Instead, of defining a Tile type, we express various properties of concrete tiles by arrays or sparse EnumMaps, as appropriate.

Actors at normal speed (2 m/s) take one turn to move one tile (1 m by 1 m).

Synopsis

Documentation

kindHasFeature :: Feature -> TileKind -> Bool Source #

Whether a tile kind has the given feature.

hasFeature :: Ops TileKind -> Feature -> Id TileKind -> Bool Source #

Whether a tile kind (specified by its id) has the given feature.

isClear :: TileSpeedup -> Id TileKind -> Bool Source #

Whether a tile does not block vision. Essential for efficiency of FOV, hence tabulated.

isLit :: TileSpeedup -> Id TileKind -> Bool Source #

Whether a tile has ambient light --- is lit on its own. Essential for efficiency of Perception, hence tabulated.

isWalkable :: TileSpeedup -> Id TileKind -> Bool Source #

Whether actors can walk into a tile. Essential for efficiency of pathfinding, hence tabulated.

isDoor :: TileSpeedup -> Id TileKind -> Bool Source #

Whether a tile is a door, open or closed. Essential for efficiency of pathfinding, hence tabulated.

isChangable :: TileSpeedup -> Id TileKind -> Bool Source #

Whether a tile is changable.

isSuspect :: TileSpeedup -> Id TileKind -> Bool Source #

Whether a tile is suspect. Essential for efficiency of pathfinding, hence tabulated.

isExplorable :: TileSpeedup -> Id TileKind -> Bool Source #

Whether one can easily explore a tile, possibly finding a treasure, either spawned there or dropped there by a (dying from poison) foe. Doors can't be explorable since revealing a secret tile should not change it's (walkable and) explorable status. Door status should not depend on whether they are open or not so that a foe opening a door doesn't force us to backtrack to explore it. Still, a foe that digs through a wall will affect our exploration counter and if content lets walls contain threasure, such backtraking makes sense.

isEasyOpen :: TileSpeedup -> Id TileKind -> Bool Source #

Whether a tile kind (specified by its id) has an OpenTo feature and reasonable alter min skill.

isOpenable :: Ops TileKind -> Id TileKind -> Bool Source #

Whether a tile kind (specified by its id) has an OpenTo feature.

isClosable :: Ops TileKind -> Id TileKind -> Bool Source #

Whether a tile kind (specified by its id) has a CloseTo feature.

Internal operations

createTab :: Unbox a => Ops TileKind -> (TileKind -> a) -> Tab a Source #

accessTab :: Unbox a => Tab a -> Id TileKind -> a Source #