void TriangulateCornerTerracesCliff(
        Vector3 begin, HexCell beginCell,
        Vector3 left, HexCell leftCell,
        Vector3 right, HexCell rightCell
        )
    {
        float b = 1f / (rightCell.Elevation - beginCell.Elevation);

        if (b < 0)
        {
            b = -b;
        }

        Vector3 boundary      = Vector3.Lerp(HexMetrics.Perturb(begin), HexMetrics.Perturb(right), b);
        Color   boundaryColor = Color.Lerp(color1, color3, b);
        Vector3 types;

        types.x = (float)beginCell.TerrainType;
        types.y = (float)leftCell.TerrainType;
        types.z = (float)rightCell.TerrainType;

        TriangulateBoundaryTriangle(
            begin, color1, left, color2, boundary, boundaryColor, types
            );

        if (leftCell.GetEdgeType(rightCell) == HexEdgeType.Slope)
        {
            TriangulateBoundaryTriangle(
                left, color2, right, color3, boundary, boundaryColor, types
                );
        }
        else
        {
            terrain.AddTriangleUnPerturbed(HexMetrics.Perturb(left), HexMetrics.Perturb(right), boundary);
            terrain.AddTriangleColor(color2, color3, boundaryColor);
            terrain.AddTriangleTerrainTypes(types);
        }
    }
Esempio n. 2
0
    /// <summary>
    /// Creates an additional quads and triangle to fill the space when a wall connects next to a cliff face so there is no gap.
    /// </summary>
    /// <param name="near"> Near vector3 point for wall </param>
    /// <param name="far"> Far Vector 3 point for wall</param>
    /// <param name="point"> vector 3 of cliff </param>
    void AddWallWedge(Vector3 near, Vector3 far, Vector3 point)
    {
        near  = HexMetrics.Perturb(near);
        far   = HexMetrics.Perturb(far);
        point = HexMetrics.Perturb(point);

        Vector3 center    = HexMetrics.WallLerp(near, far);
        Vector3 thickness = HexMetrics.WallThicknessOffset(near, far);

        Vector3 v1, v2, v3, v4;
        Vector3 pointTop = point;

        point.y = center.y;

        v1   = v3 = center - thickness;
        v2   = v4 = center + thickness;
        v3.y = v4.y = pointTop.y = center.y + HexMetrics.wallHeight;

        walls.AddQuadUnperturbed(v1, point, v3, pointTop);
        walls.AddQuadUnperturbed(point, v2, pointTop, v4);
        walls.AddTriangleUnPerturbed(pointTop, v3, v4);
    }