| Safe Haskell | Safe-Infered |
|---|
Game.LambdaHack.Point
Description
Basic operations on 2D points represented as linear offsets.
- type Point = Int
- toPoint :: X -> PointXY -> Point
- showPoint :: X -> Point -> String
- origin :: Point
- chessDist :: X -> Point -> Point -> Int
- adjacent :: X -> Point -> Point -> Bool
- vicinity :: X -> Y -> Point -> [Point]
- vicinityCardinal :: X -> Y -> Point -> [Point]
- inside :: X -> Point -> Area -> Bool
- displacementXYZ :: X -> Point -> Point -> VectorXY
- bla :: X -> Y -> Int -> Point -> Point -> Maybe [Point]
Documentation
The type of locations on the 2D level map, heavily optimized.
We represent the (level map on the) screen as a linear framebuffer, where Point is an Int offset counted from the first cell. We do bounds check for the X size whenever we convert between representations and each subsequent array access performs another check, effectively for Y size. After dungeon is generated (using PointXY, not Point), and converted to the Point representation, points are used mainly as keys and not constructed often, so the performance will improve due to smaller save files, the use of IntMap and cheaper array indexing, including cheaper bounds checks. We don't defin Point as a newtype to avoid the trouble with using EnumMap in place of IntMap, etc.
chessDist :: X -> Point -> Point -> IntSource
The distance between two points in the chessboard metric.
adjacent :: X -> Point -> Point -> BoolSource
Checks whether two points are adjacent on the map (horizontally, vertically or diagonally).
vicinity :: X -> Y -> Point -> [Point]Source
Returns the 8, or less, surrounding locations of a given location.
vicinityCardinal :: X -> Y -> Point -> [Point]Source
Returns the 4, or less, surrounding locations in cardinal directions from a given location.