Ejemplo n.º 1
0
        void TriangulateEdgeTerraces(
            EdgeVertices begin, HexCell beginCell,
            EdgeVertices end, HexCell endCell, bool hasRoad = false)
        {
            EdgeVertices e2 = EdgeVertices.TerraceLerp(begin, end, 1);
            Color        c2 = HexMetrics.TerraceLerp(color1, color2, 1);
            float        t1 = beginCell.terrainTypeIndex;
            float        t2 = endCell.terrainTypeIndex;

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

            for (int i = 2; i < HexMetrics.terracedSteps; i++)
            {
                EdgeVertices e1 = e2;
                Color        c1 = c2;

                e2 = EdgeVertices.TerraceLerp(begin, end, i);
                c2 = HexMetrics.TerraceLerp(color1, color2, i);

                TriangulateEdgeStrip(e1, c1, t1, e2, c2, t2, hasRoad);
            }

            // last step
            TriangulateEdgeStrip(e2, c2, t1, end, color2, t2, hasRoad);
        }
Ejemplo n.º 2
0
        void TriangulateBoundaryTriangle(
            Vector3 bottom, Color beginColor,
            Vector3 left, Color leftColor,
            Vector3 boundary, Color boundaryColor, Vector3 types)
        {
            Vector3 v2 = HexMetrics.Perturb(HexMetrics.TerraceLerp(bottom, left, 1));
            Color   c2 = HexMetrics.TerraceLerp(beginColor, leftColor, 1);

            terrain.AddTriangleUnperturbed(HexMetrics.Perturb(bottom), v2, boundary);
            terrain.AddTriangleColor(beginColor, c2, boundaryColor);
            terrain.AddTriangleTerrainTypes(types);

            for (int i = 2; i < HexMetrics.terracedSteps; i++)
            {
                Vector3 v1 = v2;
                Color   c1 = c2;

                v2 = HexMetrics.Perturb(HexMetrics.TerraceLerp(bottom, left, i));
                c2 = HexMetrics.TerraceLerp(beginColor, leftColor, i);

                terrain.AddTriangleUnperturbed(v1, v2, boundary);
                terrain.AddTriangleColor(c1, c2, boundaryColor);
                terrain.AddTriangleTerrainTypes(types);
            }

            terrain.AddTriangleUnperturbed(v2, HexMetrics.Perturb(left), boundary);
            terrain.AddTriangleColor(c2, leftColor, boundaryColor);
            terrain.AddTriangleTerrainTypes(types);
        }
Ejemplo n.º 3
0
 public static EdgeVertices TerraceLerp(EdgeVertices a, EdgeVertices b, int step)
 {
     return(new EdgeVertices {
         v1 = HexMetrics.TerraceLerp(a.v1, b.v1, step),
         v2 = HexMetrics.TerraceLerp(a.v2, b.v2, step),
         v3 = HexMetrics.TerraceLerp(a.v3, b.v3, step),
         v4 = HexMetrics.TerraceLerp(a.v4, b.v4, step),
         v5 = HexMetrics.TerraceLerp(a.v5, b.v5, step)
     });
 }
Ejemplo n.º 4
0
        void TriangulateCornerTerraces(
            Vector3 bottom, HexCell bottomCell,
            Vector3 left, HexCell leftCell,
            Vector3 right, HexCell rightCell)
        {
            Vector3 v3 = HexMetrics.TerraceLerp(bottom, left, 1);
            Vector3 v4 = HexMetrics.TerraceLerp(bottom, right, 1);
            Color   c3 = HexMetrics.TerraceLerp(color1, color2, 1);
            Color   c4 = HexMetrics.TerraceLerp(color1, color3, 1);
            Vector3 types;

            types.x = bottomCell.terrainTypeIndex;
            types.y = leftCell.terrainTypeIndex;
            types.z = rightCell.terrainTypeIndex;

            // first step
            terrain.AddTriangle(bottom, v3, v4);
            terrain.AddTriangleColor(color1, c3, c4);
            terrain.AddTriangleTerrainTypes(types);

            for (int i = 2; i < HexMetrics.terracedSteps; i++)
            {
                Vector3 v1 = v3;
                Vector3 v2 = v4;
                Color   c1 = c3;
                Color   c2 = c4;

                v3 = HexMetrics.TerraceLerp(bottom, left, i);
                v4 = HexMetrics.TerraceLerp(bottom, right, i);

                c3 = HexMetrics.TerraceLerp(color1, color2, i);
                c4 = HexMetrics.TerraceLerp(color1, color3, i);

                terrain.AddQuad(v1, v2, v3, v4);
                terrain.AddQuadColor(c1, c2, c3, c4);
                terrain.AddQuadTerrainTypes(types);
            }

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