Ejemplo n.º 1
0
    void FillHole(SquareCell cell, Vector3 v1)
    {
        SquareCell eastNeighbor      = cell.GetNeighbor(SquareDirection.E);
        SquareCell northNeighbor     = cell.GetNeighbor(SquareDirection.N);
        SquareCell northEastNeighbor = null;

        if (northNeighbor == null || eastNeighbor == null)
        {
            return;
        }

        northEastNeighbor = cell.GetNeighbor(SquareDirection.N).GetNeighbor(SquareDirection.E);

        Vector3 bridgeN = SquareMetrics.GetBridge(SquareDirection.N);
        Vector3 n       = v1 + bridgeN;

        Vector3 bridgeE = SquareMetrics.GetBridge(SquareDirection.E);
        Vector3 e       = v1 + bridgeE;

        Vector3 ne = v1 + bridgeN + bridgeE;

        Color northColor, eastColor, northEastColor;

        northColor = eastColor = northEastColor = cell.Color;

        if (northNeighbor != null)
        {
            n.y        = northNeighbor.transform.localPosition.y;
            northColor = northNeighbor.Color;
        }
        if (eastNeighbor != null)
        {
            e.y       = eastNeighbor.transform.localPosition.y;
            eastColor = eastNeighbor.Color;
        }
        if (northEastNeighbor != null)
        {
            ne.y           = northEastNeighbor.transform.localPosition.y;
            northEastColor = northEastNeighbor.Color;
        }

        Vector3 center = v1 + 0.5f * (bridgeN + bridgeE);

        center.y = (Mathf.Max(v1.y, e.y, n.y, ne.y) + Mathf.Min(v1.y, e.y, n.y, ne.y)) / 2f;
        Color blendColor = GetBlendColor(cell.Color, northColor, eastColor, northEastColor);

        // Triangle vertices should be clockwise
        // First Triangle to add will be v1, n, center
        AddTriangle(v1, n, center);
        AddTriangleColor(cell.Color, northColor, blendColor);
        // Second will be v1, center, e
        AddTriangle(v1, center, e);
        AddTriangleColor(cell.Color, blendColor, eastColor);
        // Third will be n, ne, center
        AddTriangle(n, ne, center);
        AddTriangleColor(northColor, northEastColor, blendColor);
        // Last is ne, e, center
        AddTriangle(ne, e, center);
        AddTriangleColor(northEastColor, eastColor, blendColor);
    }
Ejemplo n.º 2
0
    private void BuildBridge(SquareDirection direction, SquareCell cell, Vector3 v1, Vector3 v2)
    {
        SquareCell neighbor = cell.GetNeighbor(direction);

        if (neighbor == null)
        {
            return;
        }
        Vector3 bridge = SquareMetrics.GetBridge(direction);
        Vector3 v3     = v1 + bridge;
        Vector3 v4     = v2 + bridge;

        v3.y = v4.y = neighbor.transform.localPosition.y;

        AddQuad(v1, v2, v3, v4);
        AddQuadColor(cell.Color, neighbor.Color);
    }