LambdaHack- A game engine library for roguelike dungeon crawlers

Safe HaskellNone



Basic operations on 2D points represented as linear offsets.



type X = IntSource

Spacial dimension for points and vectors.

type Y = IntSource

Spacial dimension for points and vectors.

data Point Source

2D points in cartesian representation. Coordinates grow to the right and down, so that the (0, 0) point is in the top-left corner of the screen. Coordinates are never negative.




px :: !X
py :: !Y

maxLevelDimExponent :: IntSource

The maximum number of bits for level X and Y dimension (16). The value is chosen to support architectures with 32-bit Ints.

chessDist :: Point -> Point -> IntSource

The distance between two points in the chessboard metric.

euclidDistSq :: Point -> Point -> IntSource

Squared euclidean distance between two points.

adjacent :: Point -> Point -> BoolSource

Checks whether two points are adjacent on the map (horizontally, vertically or diagonally).

inside :: Point -> (X, Y, X, Y) -> BoolSource

Checks that a point belongs to an area.

bla :: X -> Y -> Int -> Point -> Point -> Maybe [Point]Source

Bresenham's line algorithm generalized to arbitrary starting eps (eps value of 0 gives the standard BLA). Skips the source point and goes through the second point to the edge of the level. GIves Nothing if the points are equal. The target is given as Point to permit aiming out of the level, e.g., to get uniform distributions of directions for explosions close to the edge of the level.

fromTo :: Point -> Point -> [Point]Source

A list of all points on a straight vertical or straight horizontal line between two points. Fails if no such line exists.