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 -> Area -> Bool
- displacementXYZ :: X -> Point -> Point -> VectorXY
- bla :: X -> Y -> Int -> Point -> Point -> Maybe [Point]
The type of positions on the 2D level map, heavily optimized.
We represent the (level map on the) screen as a linear framebuffer,
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
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.
The distance between two points in the chessboard metric.
Checks whether two points are adjacent on the map (horizontally, vertically or diagonally).
Returns the 8, or less, surrounding positions of a given position.
Returns the 4, or less, surrounding positions in cardinal directions from a given position.
Calculate the displacement vector from a position to another.