public MapSegmentPathTile FindStartTile(ICollection <MapSegmentPathTile> tiles, MapSegmentDirection direction) { foreach (var tile in tiles) { if (MapSegmentPathTile.IsFree(tile.NeighbourUp)) { return(tile); } } // In theory; this is not possible return(null); }
public Point GetEndPoint(MapSegmentDirection direction) { if (direction == MapSegmentDirection.Up) { return(Point + UP_END_OFFSET); } else if (direction == MapSegmentDirection.Right) { return(Point + RIGHT_END_OFFSET); } else if (direction == MapSegmentDirection.Down) { return(Point + DOWN_END_OFFSET); } else if (direction == MapSegmentDirection.Left) { return(Point + LEFT_END_OFFSET); } return(Point); }
public MapSegmentPathTile GetNeighbour(MapSegmentDirection direction) { MapSegmentPathTile result = null; if (direction == MapSegmentDirection.Up) { result = NeighbourUp; } else if (direction == MapSegmentDirection.Down) { result = NeighbourDown; } else if (direction == MapSegmentDirection.Left) { result = NeighbourLeft; } else if (direction == MapSegmentDirection.Right) { result = NeighbourRight; } return(result); }
public List <Vector2> GetGroupPoints(ICollection <MapSegmentPathTile> tiles, MapSegmentPathTile startTile, MapSegmentDirection startDirection) { var result = new List <Vector2>(); var startNode = new MapSegmentTraverseResult { PathTile = startTile, Direction = startDirection }; var currentNode = startNode; var point = startNode.PathTile.GetStartPoint(startDirection).ToVector2(); result.Add(point); while (!CheckTerminationCondition(currentNode, startNode, result)) { point = currentNode.PathTile.GetEndPoint(currentNode.Direction).ToVector2(); result.Add(point); currentNode = GetNextNode(currentNode); } return(result); }
public bool IsNeighbourFree(MapSegmentDirection direction) { var tile = GetNeighbour(direction); return(IsFree(tile)); }