Safe Haskell | None |
---|

Basic operations on 2D points represented as linear offsets.

- data Point
- toPoint :: X -> PointXY -> Point
- showPoint :: X -> Point -> Text
- 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 -> (X, Y, X, Y) -> Bool
- displacementXYZ :: X -> Point -> Point -> VectorXY
- bla :: X -> Y -> Int -> Point -> Point -> Maybe [Point]

# Documentation

The type of positions 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 `EnumMap`

and cheaper array indexing,
including cheaper bounds checks.

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 positions of a given position.

vicinityCardinal :: X -> Y -> Point -> [Point]Source

Returns the 4, or less, surrounding positions in cardinal directions from a given position.