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

Safe HaskellSafe-Inferred
LanguageHaskell2010

Game.LambdaHack.Server.Fov.Common

Contents

Description

Common definitions for the Field of View algorithms. See https://github.com/LambdaHack/LambdaHack/wiki/Fov-and-los for some more context and references.

Synopsis

Current scan parameters

type Distance = Int Source

Distance from the (0, 0) point where FOV originates.

type Progress = Int Source

Progress along an arc with a constant distance from (0, 0).

Scanning coordinate system

data Bump Source

Rotated and translated coordinates of 2D points, so that the points fit in a single quadrant area (e, g., quadrant I for Permissive FOV, hence both coordinates positive; adjacent diagonal halves of quadrant I and II for Digital FOV, hence y positive). The special coordinates are written using the standard mathematical coordinate setup, where quadrant I, with x and y positive, is on the upper right.

Constructors

B 

Fields

bx :: !Int
 
by :: !Int
 

Instances

Geometry in system Bump

data Line Source

Straight line between points.

Constructors

Line !Bump !Bump 

Instances

type ConvexHull = [Bump] Source

Convex hull represented as a list of points.

type Edge = (Line, ConvexHull) Source

An edge (comprising of a line and a convex hull) of the area to be scanned.

type EdgeInterval = (Edge, Edge) Source

The area left to be scanned, delimited by edges.

Assorted minor operations

maximal :: (a -> a -> Bool) -> [a] -> a Source

Maximal element of a non-empty list. Prefers elements from the rear, which is essential for PFOV, to avoid ill-defined lines.

steeper :: Bump -> Bump -> Bump -> Bool Source

Check if the line from the second point to the first is more steep than the line from the third point to the first. This is related to the formal notion of gradient (or angle), but hacked wrt signs to work fast in this particular setup. Returns True for ill-defined lines.

addHull Source

Arguments

:: (Bump -> Bump -> Bool)

a comparison function

-> Bump

a new bump to consider

-> ConvexHull

a convex hull of bumps represented as a list

-> ConvexHull 

Extends a convex hull of bumps with a new bump. Nothing needs to be done if the new bump already lies within the hull. The first argument is typically steeper, optionally negated, applied to the second argument.