Esempio n. 1
0
    void TriangulateBoundaryTriangle(Vector3 begin, Color beginColor, Vector3 left, Color leftColor, Vector3 boundary, Color boundaryColor, Vector3 types)
    {
        Vector3 v2 = HexMetric.Perturb(HexMetric.TerraceLerp(begin, left, 1));
        Color   c2 = HexMetric.TerraceLerp(beginColor, leftColor, 1);

        // first triangle
        terrain.AddTriangleUnperturbed(HexMetric.Perturb(begin), v2, boundary);
        terrain.AddTriangleColor(beginColor, c2, boundaryColor);
        terrain.AddTriangleTerrainTypes(types);

        //connect terrace with cliff
        for (int i = 2; i < HexMetric.terraceSteps; i++)
        {
            Vector3 v1 = v2;
            Color   c1 = c2;
            v2 = HexMetric.Perturb(HexMetric.TerraceLerp(begin, left, i));
            c2 = HexMetric.TerraceLerp(beginColor, leftColor, i);
            terrain.AddTriangleUnperturbed(v1, v2, boundary);
            terrain.AddTriangleColor(c1, c2, boundaryColor);
            terrain.AddTriangleTerrainTypes(types);
        }
        //last triangle
        terrain.AddTriangleUnperturbed(v2, HexMetric.Perturb(left), boundary);
        terrain.AddTriangleColor(c2, leftColor, boundaryColor);
        terrain.AddTriangleTerrainTypes(types);
    }
Esempio n. 2
0
    internal static EdgeVertices TerraceLerp(EdgeVertices a, EdgeVertices b, int step)
    {
        EdgeVertices result;

        result.v1 = HexMetric.TerraceLerp(a.v1, b.v1, step);
        result.v2 = HexMetric.TerraceLerp(a.v2, b.v2, step);
        result.v3 = HexMetric.TerraceLerp(a.v3, b.v3, step);
        result.v4 = HexMetric.TerraceLerp(a.v4, b.v4, step);
        result.v5 = HexMetric.TerraceLerp(a.v5, b.v5, step);
        return(result);
    }
Esempio n. 3
0
    void TriangulateEdgeTerraces(EdgeVertices begin, HexCell beginCell, EdgeVertices end, HexCell endCell, bool hasRoad)
    {
        EdgeVertices e2 = EdgeVertices.TerraceLerp(begin, end, 1);
        Color        c2 = HexMetric.TerraceLerp(color1, color2, 1);
        float        t1 = beginCell.TerrainTypeIndex;
        float        t2 = endCell.TerrainTypeIndex;

        //first task
        TriangulateEdgeStrip(begin, color1, t1, e2, c2, t2, hasRoad);

        //process of creating actual steps
        for (int i = 2; i < HexMetric.terraceSteps; i++)
        {
            EdgeVertices e1 = e2;
            Color        c1 = c2;
            e2 = EdgeVertices.TerraceLerp(begin, end, i);
            c2 = HexMetric.TerraceLerp(color1, color2, i);
            TriangulateEdgeStrip(e1, c1, t1, e2, c2, t2, hasRoad);
        }

        //last task
        TriangulateEdgeStrip(e2, c2, t1, end, color2, t2, hasRoad);
    }
Esempio n. 4
0
    void TriangulateCornerTerraces(Vector3 begin, HexCell beginCell, Vector3 left, HexCell leftCell, Vector3 right, HexCell rightCell)
    {
        Vector3 v3 = HexMetric.TerraceLerp(begin, left, 1);
        Vector3 v4 = HexMetric.TerraceLerp(begin, right, 1);
        Color   c3 = HexMetric.TerraceLerp(color1, color2, 1);
        Color   c4 = HexMetric.TerraceLerp(color1, color3, 1);

        Vector3 types;

        types.x = beginCell.TerrainTypeIndex;
        types.y = leftCell.TerrainTypeIndex;
        types.z = rightCell.TerrainTypeIndex;

        terrain.AddTriangle(begin, v3, v4);
        terrain.AddTriangleColor(color1, c3, c4);
        terrain.AddTriangleTerrainTypes(types);

        for (int i = 2; i < HexMetric.terraceSteps; i++)
        {
            Vector3 v1 = v3;
            Vector3 v2 = v4;
            Color   c1 = c3;
            Color   c2 = c4;
            v3 = HexMetric.TerraceLerp(begin, left, i);
            v4 = HexMetric.TerraceLerp(begin, right, i);
            c3 = HexMetric.TerraceLerp(color1, color2, i);
            c4 = HexMetric.TerraceLerp(color1, color3, i);
            terrain.AddQuad(v1, v2, v3, v4);
            terrain.AddQuadColor(c1, c2, c3, c4);
            terrain.AddQuadTerrainTypes(types);
        }

        terrain.AddQuad(v3, v4, left, right);
        terrain.AddQuadColor(c3, c4, color2, color3);
        terrain.AddQuadTerrainTypes(types);
    }