Show / Hide Table of Contents

Class Direction

Structure representing the concept of a "direction" on a grid, and "defines" the coordinate plane via the YIncreasesUpward flag. Interacts with Point to allow easy translation of positions in a direction, and contains numerous helper functions for retrieving directions in various orders, getting direction closest to a line, etc.

Inheritance
Object
Direction
Implements
IEquatable<Direction>
IMatchable<Direction>
Namespace: SadRogue.Primitives
Assembly: TheSadRogue.Primitives.dll
Syntax
public sealed class Direction : ValueType, IEquatable<Direction>, IMatchable<Direction>
Remarks

The static YIncreasesUpward flag defines the way that many algorithms interpret the coordinate plane. By default, this flag is false, meaning that the y-value of positions is assumed to DECREASE as you proceed in the direction defined by Up, and increase as you go downward. If the coordinate plane is displayed on the screen, the origin would be the top left corner. This default setting matches the typical console/computer graphic definition of the coordinate plane. Setting the flag to true inverts this, so that the y-value of positions INCREASES as you proceed in the direction defined by Up. This places the origin in the bottom left corner, and matches a typical mathematical definition of a euclidean coordinate plane, as well as the scene coordinate plane defined by Unity and other game engines.

Fields

Down

Down direction.

Declaration
public static readonly Direction Down
Field Value
Type Description
Direction

DownLeft

Down-left direction.

Declaration
public static readonly Direction DownLeft
Field Value
Type Description
Direction

DownRight

Down-right direction.

Declaration
public static readonly Direction DownRight
Field Value
Type Description
Direction

Left

Left direction.

Declaration
public static readonly Direction Left
Field Value
Type Description
Direction

None

No direction.

Declaration
public static readonly Direction None
Field Value
Type Description
Direction

Right

Right direction.

Declaration
public static readonly Direction Right
Field Value
Type Description
Direction

Type

Enum type corresponding to direction being represented.

Declaration
public readonly Direction.Types Type
Field Value
Type Description
Direction.Types

Up

Up direction.

Declaration
public static readonly Direction Up
Field Value
Type Description
Direction

UpLeft

Up-left direction.

Declaration
public static readonly Direction UpLeft
Field Value
Type Description
Direction

UpRight

Up-right direction.

Declaration
public static readonly Direction UpRight
Field Value
Type Description
Direction

Properties

DeltaX

Change in x-value represented by this direction.

Declaration
public int DeltaX { get; }
Property Value
Type Description
Int32

DeltaY

Change in y-value represented by this direction.

Declaration
public int DeltaY { get; }
Property Value
Type Description
Int32

YIncreasesUpward

Whether or not a positive y-value indicates an upward change. To set this value, use SetYIncreasesUpwardsUnsafe(Boolean), however note that this is an unsafe operation in a multi-threaded environment where one or more threads may be using Directions. It is intended that this configuration be done as part of an initialization routine.

Declaration
public static bool YIncreasesUpward { get; }
Property Value
Type Description
Boolean
Remarks

If true, directions with an upwards component represent a positive change in y-value, and ones with downward components represent a negative change in y-value. Changing this to false (which is the default) inverts this.

Methods

Equals(Direction)

True if the given direction has the same Type the current one.

Declaration
public bool Equals(Direction other)
Parameters
Type Name Description
Direction other

Direction to compare.

Returns
Type Description
Boolean

True if the two directions are the same, false if not.

Equals(Object)

Same as operator == in this case; returns false if obj is not a Direction.

Declaration
public override bool Equals(object obj)
Parameters
Type Name Description
Object obj

The object to compare the current Direction to.

Returns
Type Description
Boolean

True if obj is a Direction, and the two directions are equal, false otherwise.

GetCardinalDirection(Point)

Returns the cardinal direction that most closely matches the degree heading of a line with the given delta-change values. Rounds clockwise if exactly on a diagonal. Similar to GetDirection(Point), except this function returns only cardinal directions.

Declaration
public static Direction GetCardinalDirection(Point deltaChange)
Parameters
Type Name Description
Point deltaChange

Vector representing the change in x and change in y across the line (deltaChange.X is the change in x, deltaChange.Y is the change in y).

Returns
Type Description
Direction

The cardinal direction that most closely matches the degree heading of the given line.

GetCardinalDirection(Point, Point)

Returns the cardinal direction that most closely matches the degree heading of the given line. Rounds clockwise if the heading is exactly on a diagonal direction. Similar to GetDirection(Point, Point), except this function returns only cardinal directions.

Declaration
public static Direction GetCardinalDirection(Point start, Point end)
Parameters
Type Name Description
Point start

Starting coordinate of the line.

Point end

Ending coordinate of the line.

Returns
Type Description
Direction

The cardinal direction that most closely matches the heading indicated by the given line.

GetCardinalDirection(Int32, Int32)

Returns the cardinal direction that most closely matches the degree heading of a line with the given delta-change values. Rounds clockwise if exactly on a diagonal. Similar to GetDirection(Point), except this function returns only cardinal directions.

Declaration
public static Direction GetCardinalDirection(int dx, int dy)
Parameters
Type Name Description
Int32 dx

Change in x along the line.

Int32 dy

Change in y along the line.

Returns
Type Description
Direction

The cardinal direction that most closely matches the degree heading of the given line.

GetCardinalDirection(Int32, Int32, Int32, Int32)

Returns the cardinal direction that most closely matches the degree heading of the given line. Rounds clockwise if the heading is exactly on a diagonal direction. Similar to GetDirection(Point, Point), except this function returns only cardinal directions.

Declaration
public static Direction GetCardinalDirection(int startX, int startY, int endX, int endY)
Parameters
Type Name Description
Int32 startX

X-value of the starting coordinate of the line.

Int32 startY

Y-value of the starting coordinate of the line.

Int32 endX

X-value of the ending coordinate of the line.

Int32 endY

Y-value of the ending coordinate of the line.

Returns
Type Description
Direction

The cardinal direction that most closely matches the heading indicated by the given line.

GetDirection(Point)

Returns the direction that most closely matches the degree heading of a line with the given delta-change values. Rounds clockwise if the heading is exactly between two directions.

Declaration
public static Direction GetDirection(Point deltaChange)
Parameters
Type Name Description
Point deltaChange

Vector representing the change in x and change in y across the line (deltaChange.X is the change in x, deltaChange.Y is the change in y).

Returns
Type Description
Direction

The direction that most closely matches the heading indicated by the given input.

GetDirection(Point, Point)

Returns the direction that most closely matches the degree heading of the given line. Rounds clockwise if the heading is exactly between two directions.

Declaration
public static Direction GetDirection(Point start, Point end)
Parameters
Type Name Description
Point start

Starting coordinate of the line.

Point end

Ending coordinate of the line.

Returns
Type Description
Direction

The direction that most closely matches the heading indicated by the given line.

GetDirection(Int32, Int32)

Returns the direction that most closely matches the degree heading of a line with the given delta-change values. Rounds clockwise if the heading is exactly between two directions.

Declaration
public static Direction GetDirection(int dx, int dy)
Parameters
Type Name Description
Int32 dx

Change in x-value across the line.

Int32 dy

Change in y-value across the line.

Returns
Type Description
Direction

The direction that most closely matches the heading indicated by the given input.

GetDirection(Int32, Int32, Int32, Int32)

Returns the direction that most closely matches the degree heading of the given line. Rounds clockwise if the heading is exactly between two directions.

Declaration
public static Direction GetDirection(int startX, int startY, int endX, int endY)
Parameters
Type Name Description
Int32 startX

X-value of the starting coordinate of the line.

Int32 startY

Y-value of the starting coordinate of the line.

Int32 endX

X-value of the ending coordinate of the line.

Int32 endY

Y-value of the ending coordinate of the line.

Returns
Type Description
Direction

The direction that most closely matches the heading indicated by the given line.

GetHashCode()

Returns a hash-map value for the current object.

Declaration
public override int GetHashCode()
Returns
Type Description
Int32

IsCardinal()

Returns true if the current direction is a cardinal direction.

Declaration
public bool IsCardinal()
Returns
Type Description
Boolean

True if the current direction is a cardinal direction, false otherwise.

Matches(Direction)

True if the given direction has the same Type the current one.

Declaration
public bool Matches(Direction other)
Parameters
Type Name Description
Direction other

Direction to compare.

Returns
Type Description
Boolean

True if the two directions are the same, false if not.

SetYIncreasesUpwardsUnsafe(Boolean)

Changes the value of YIncreasesUpward. This operation is not safe to perform if another thread may be directly or indirectly using Directions. It is intended that this value be set once to match your environment as part of an initialization routine.

Declaration
public static void SetYIncreasesUpwardsUnsafe(bool newValue)
Parameters
Type Name Description
Boolean newValue

New value to assign to YIncreasesUpward.

ToString()

Writes the string (eg. "UP", "UP_RIGHT", etc.) for the direction.

Declaration
public override string ToString()
Returns
Type Description
String

String representation of the direction.

Operators

Addition(Direction, Int32)

Moves the direction clockwise i times.

Declaration
public static Direction operator +(Direction d, int i)
Parameters
Type Name Description
Direction d
Int32 i
Returns
Type Description
Direction

The given direction moved clockwise i times.

Addition((Int32, Int32), Direction)

Translates the given position by one unit in the given direction.

Declaration
public static (int, int) operator +((int, int) tuple, Direction d)
Parameters
Type Name Description
(, )<Int32, Int32> tuple
Direction d
Returns
Type Description
(, )<Int32, Int32>

Tuple (tuple.y + d.DeltaX, tuple.y + d.DeltaY).

Decrement(Direction)

Moves the direction counter-clockwise by one.

Declaration
public static Direction operator --(Direction d)
Parameters
Type Name Description
Direction d
Returns
Type Description
Direction

The direction one unit counterclockwise of d.

Equality(Direction, Direction)

True if the two directions have the same Type.

Declaration
public static bool operator ==(Direction lhs, Direction rhs)
Parameters
Type Name Description
Direction lhs
Direction rhs
Returns
Type Description
Boolean

True if the two directions are equal, false if not.

Implicit(Direction to Direction.Types)

Implicitly converts a Direction to its corresponding Type.

Declaration
public static implicit operator Direction.Types(Direction direction)
Parameters
Type Name Description
Direction direction
Returns
Type Description
Direction.Types

Implicit(Direction.Types to Direction)

Implicitly converts an Direction.Types enum value to its corresponding Direction.

Declaration
public static implicit operator Direction(Direction.Types type)
Parameters
Type Name Description
Direction.Types type
Returns
Type Description
Direction

Increment(Direction)

Moves the direction clockwise by one.

Declaration
public static Direction operator ++(Direction d)
Parameters
Type Name Description
Direction d
Returns
Type Description
Direction

The direction one unit clockwise of d.

Inequality(Direction, Direction)

True if the types are not equal.

Declaration
public static bool operator !=(Direction lhs, Direction rhs)
Parameters
Type Name Description
Direction lhs
Direction rhs
Returns
Type Description
Boolean

True if the types are not equal, false if they are both equal.

Subtraction(Direction, Int32)

Moves the direction counter-clockwise i times.

Declaration
public static Direction operator -(Direction d, int i)
Parameters
Type Name Description
Direction d
Int32 i
Returns
Type Description
Direction

The given direction moved counter-clockwise i times.

Implements

System.IEquatable<T>
IMatchable<T>

Extension Methods

PropertyChangedEventHelpers.SafelySetProperty<TObject, TProperty>(TObject, ref TProperty, TProperty, EventHandler<ValueChangedEventArgs<TProperty>>)
PropertyChangedEventHelpers.SafelySetProperty<TObject, TProperty>(TObject, ref TProperty, TProperty, EventHandler<ValueChangedEventArgs<TProperty>>, EventHandler<ValueChangedEventArgs<TProperty>>)
In This Article
Back to top Generated by DocFX