示例#1
0
    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);
        }
    }
示例#2
0
    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));
        }
    }
示例#3
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);
        }
    }