LambdaHack-0.6.1.0: A game engine library for roguelike dungeon crawlers

Safe HaskellNone
LanguageHaskell2010

Game.LambdaHack.Client.Bfs

Contents

Description

Breadth first search algorithms.

Synopsis

Documentation

data BfsDistance Source #

Weighted distance between points along shortest paths.

Instances

Bounded BfsDistance Source # 
Enum BfsDistance Source # 
Eq BfsDistance Source # 
Ord BfsDistance Source # 
Show BfsDistance Source # 
Bits BfsDistance Source # 

data MoveLegal Source #

State of legality of moves between adjacent points.

Instances

minKnownBfs :: BfsDistance Source #

The minimal distance value assigned to paths that don't enter any unknown tiles.

apartBfs :: BfsDistance Source #

The distance value that denotes no legal path between points, either due to blocked tiles or pathfinding aborted at earlier tiles, e.g., due to unknown tiles.

fillBfs Source #

Arguments

:: Array Word8 
-> Word8 
-> Point

starting position

-> Array BfsDistance

initial array, with apartBfs

-> () 

Fill out the given BFS array. Unsafe PointArray operations are OK here, because the intermediate values of the vector don't leak anywhere outside nor are kept unevaluated and so they can't be overwritten by the unsafe side-effect.

When computing move cost, we assume doors openable at no cost, because other actors use them, too, so the cost is shared and the extra visiblity is valuable, too. We treat unknown tiles specially. Whether suspect tiles are considered openable depends on smarkSuspect.

data AndPath Source #

Constructors

AndPath 

Fields

NoPath 

Instances

Show AndPath Source # 
Generic AndPath Source # 

Associated Types

type Rep AndPath :: * -> * #

Methods

from :: AndPath -> Rep AndPath x #

to :: Rep AndPath x -> AndPath #

Binary AndPath Source # 

Methods

put :: AndPath -> Put #

get :: Get AndPath #

putList :: [AndPath] -> Put #

type Rep AndPath Source # 
type Rep AndPath = D1 * (MetaData "AndPath" "Game.LambdaHack.Client.Bfs" "LambdaHack-0.6.1.0-HURqEs4cFyW7LJywblRLqn" False) ((:+:) * (C1 * (MetaCons "AndPath" PrefixI True) ((:*:) * (S1 * (MetaSel (Just Symbol "pathList") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 * [Point])) ((:*:) * (S1 * (MetaSel (Just Symbol "pathGoal") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 * Point)) (S1 * (MetaSel (Just Symbol "pathLen") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 * Int))))) (C1 * (MetaCons "NoPath" PrefixI False) (U1 *)))

findPathBfs :: Array Word8 -> (Point -> Bool) -> Point -> Point -> Int -> Array BfsDistance -> AndPath Source #

Find a path, without the source position, with the smallest length. The eps coefficient determines which direction (of the closest directions available) that path should prefer, where 0 means north-west and 1 means north.

accessBfs :: Array BfsDistance -> Point -> Maybe Int Source #

Access a BFS array and interpret the looked up distance value.

Internal operations