public RoadNode(int thickness, InnerDirection flowDirection, InnerDirection crossDirection, Point position) { Thickness = thickness; FlowDirection = flowDirection; CrossDirection = crossDirection; Position = position; }
/// <summary> /// Gets the dir. /// </summary> /// <param name="dir">The dir.</param> /// <param name="n">The n.</param> /// <returns></returns> private static InnerDirection GetDirection(this InnerDirection dir, int n) { var v = (int)dir + n; if (v < 0) { v += dirLength; } else if (v >= dirLength) { v -= dirLength; } return((InnerDirection)v); }
/// <summary> /// Gets the point. /// </summary> /// <param name="dir">The dir.</param> /// <returns>Point.</returns> public Point GetInnerPoint(InnerDirection dir) { switch (dir) { case InnerDirection.up: return(up); case InnerDirection.right: return(right); case InnerDirection.down: return(down); case InnerDirection.left: return(left); } return(zero); }
/// <summary> /// Gets the inverse. /// </summary> /// <param name="dir">The dir.</param> /// <param name="inverse">if set to <c>true</c> [inverse].</param> /// <returns></returns> public static InnerDirection GetInverse(this InnerDirection dir, bool inverse = false) { // down ==> up // right ==> left return(GetDirection(dir, inverse ? -2 : 2)); }
/// <summary> /// Gets the perpendicular. /// </summary> /// <param name="dir">The dir.</param> /// <returns>Direction.</returns> public static InnerDirection GetPerpendicular(this InnerDirection dir, bool inverse = false) { // left ==> up // down ==> left ... return(GetDirection(dir, inverse ? -1 : 1)); }
/// <summary> /// Nexts the direction. /// </summary> /// <param name="lastDirection">The last direction.</param> /// <returns></returns> public Point NextDirection(ref InnerDirection lastDirection) { lastDirection = lastDirection.GetPerpendicular(); return(GetInnerPoint(lastDirection)); }
/// <summary> /// News the position. /// </summary> /// <param name="dir">The dir.</param> /// <returns>Point.</returns> public Point NewInnerPos(InnerDirection dir) { return(this + GetInnerPoint(dir)); }
private Direction(InnerDirection direction) { this.direction = direction; }
private Direction(uint dir) { this.direction = (InnerDirection)dir; }