private void UpdateNewNeighbor(Grid grid, Grid.NeighborType neighborType) { Grid neighbor = grid.GetNeighbor(neighborType); if (neighbor == null) { return; } Vector2 coordStep = GetCoordStep(neighborType); Vector2 coord = grid.Coord + coordStep; Grid roadNode = GetGrid(coord); Grid.NeighborType oppositeNeighborType = GetOppositeNeighborType(neighborType); if (roadNode.GetNeighbor(oppositeNeighborType) == grid) { return; } while (true) { roadNode.SetNeighbor(oppositeNeighborType, grid); if (roadNode.IsWaypoint) { _disjointSet.Union(grid, roadNode); return; } coord += coordStep; roadNode = GetGrid(coord); } }
private Vector2 GetCoordStep(Grid.NeighborType neighborType) { switch (neighborType) { case Grid.NeighborType.UP: return(new Vector2(0, 1)); case Grid.NeighborType.DOWN: return(new Vector2(0, -1)); case Grid.NeighborType.LEFT: return(new Vector2(-1, 0)); case Grid.NeighborType.RIGHT: return(new Vector2(1, 0)); default: Debug.Assert(false); return(new Vector2(0, 0)); } }
private Grid.NeighborType GetOppositeNeighborType(Grid.NeighborType neighborType) { switch (neighborType) { case Grid.NeighborType.UP: return(Grid.NeighborType.DOWN); case Grid.NeighborType.DOWN: return(Grid.NeighborType.UP); case Grid.NeighborType.LEFT: return(Grid.NeighborType.RIGHT); case Grid.NeighborType.RIGHT: return(Grid.NeighborType.LEFT); default: Debug.Assert(false); return(Grid.NeighborType.COUNT); } }