LambdaHack-0.8.3.0: A game engine library for tactical squad ASCII roguelike dungeon crawlers

Safe HaskellNone
LanguageHaskell2010

Game.LambdaHack.Common.Vector

Contents

Description

Basic operations on bounded 2D vectors, with an efficient, but not 1-1 and not monotonic Enum instance.

Synopsis

Documentation

data Vector #

2D vectors in cartesian representation. Coordinates grow to the right and down, so that the (1, 1) vector points to the bottom-right corner of the screen.

Constructors

Vector 

Fields

Instances
Enum Vector # 
Instance details

Defined in Game.LambdaHack.Common.Vector

Eq Vector # 
Instance details

Defined in Game.LambdaHack.Common.Vector

Methods

(==) :: Vector -> Vector -> Bool #

(/=) :: Vector -> Vector -> Bool #

Ord Vector # 
Instance details

Defined in Game.LambdaHack.Common.Vector

Read Vector # 
Instance details

Defined in Game.LambdaHack.Common.Vector

Show Vector # 
Instance details

Defined in Game.LambdaHack.Common.Vector

Generic Vector # 
Instance details

Defined in Game.LambdaHack.Common.Vector

Associated Types

type Rep Vector :: Type -> Type #

Methods

from :: Vector -> Rep Vector x #

to :: Rep Vector x -> Vector #

Binary Vector # 
Instance details

Defined in Game.LambdaHack.Common.Vector

Methods

put :: Vector -> Put #

get :: Get Vector #

putList :: [Vector] -> Put #

NFData Vector # 
Instance details

Defined in Game.LambdaHack.Common.Vector

Methods

rnf :: Vector -> () #

type Rep Vector # 
Instance details

Defined in Game.LambdaHack.Common.Vector

type Rep Vector = D1 (MetaData "Vector" "Game.LambdaHack.Common.Vector" "LambdaHack-0.8.3.0-1NVXOytHwux3AEZcvJHaGA" False) (C1 (MetaCons "Vector" PrefixI True) (S1 (MetaSel (Just "vx") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 X) :*: S1 (MetaSel (Just "vy") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 Y)))

isUnit :: Vector -> Bool #

Tells if a vector has length 1 in the chessboard metric.

isDiagonal :: Vector -> Bool #

Checks whether a unit vector is a diagonal direction, as opposed to cardinal. If the vector is not unit, it checks that the vector is not horizontal nor vertical.

neg :: Vector -> Vector #

Reverse an arbirary vector.

chessDistVector :: Vector -> Int #

The lenght of a vector in the chessboard metric, where diagonal moves cost 1.

euclidDistSqVector :: Vector -> Vector -> Int #

Squared euclidean distance between two vectors.

moves :: [Vector] #

Vectors of all unit moves in the chessboard metric, clockwise, starting north-west.

movesCardinal :: [Vector] #

Vectors of all cardinal direction unit moves, clockwise, starting north.

movesDiagonal :: [Vector] #

Vectors of all diagonal direction unit moves, clockwise, starting north.

vicinity #

Arguments

:: X 
-> Y

limit the search to this area

-> Point

position to find neighbours of

-> [Point] 

All (8 at most) closest neighbours of a point within an area.

vicinityCardinal #

Arguments

:: X 
-> Y

limit the search to this area

-> Point

position to find neighbours of

-> [Point] 

All (4 at most) cardinal direction neighbours of a point within an area.

shift :: Point -> Vector -> Point #

Translate a point by a vector.

shiftBounded :: X -> Y -> Point -> Vector -> Point #

Translate a point by a vector, but only if the result fits in an area.

trajectoryToPath :: Point -> [Vector] -> [Point] #

A list of points that a list of vectors leads to.

trajectoryToPathBounded :: X -> Y -> Point -> [Vector] -> [Point] #

A list of points that a list of vectors leads to, bounded by level size.

vectorToFrom :: Point -> Point -> Vector #

The vector between the second point and the first. We have

shift pos1 (pos2 `vectorToFrom` pos1) == pos2

The arguments are in the same order as in the underlying scalar subtraction.

computeTrajectory :: Int -> Int -> Int -> [Point] -> ([Vector], (Speed, Int)) #

rotate :: RadianAngle -> Vector -> Vector #

Rotate a vector by the given angle (expressed in radians) counterclockwise and return a unit vector approximately in the resulting direction.

towards :: Point -> Point -> Vector #

Given two distinct positions, determine the direction (a unit vector) in which one should move from the first in order to get closer to the second. Ignores obstacles. Of several equally good directions (in the chessboard metric) it picks one of those that visually (in the euclidean metric) maximally align with the vector between the two points.

Internal operations

maxVectorDim :: Int #

Maximal supported vector X and Y coordinates.

_moveTexts :: [Text] #

Currently unused.

normalize :: Double -> Double -> Vector #

Given a vector of arbitrary non-zero length, produce a unit vector that points in the same direction (in the chessboard metric). Of several equally good directions it picks one of those that visually (in the euclidean metric) maximally align with the original vector.

pathToTrajectory :: [Point] -> [Vector] #

A list of vectors between a list of points.