示例#1
0
        /// <summary>
        /// Handle edge terraces
        /// </summary>
        /// <param name="begin">begin edge of slope trapezoid</param>
        /// <param name="beginCell">begin hex cell</param>
        /// <param name="end">end edge of slope trapezoid</param>
        /// <param name="endCell">end hex cell</param>
        private void TriangulateEdgeTerraces(EdgeVertices begin, HexCell beginCell, EdgeVertices end, HexCell endCell, bool hasRoad)
        {
            EdgeVertices e2 = EdgeVertices.TerraceLerp(begin, end, 1);

            Color w2 = HexMetrics.TerraceLerp(weights1, weights2, 1);
            float i1 = beginCell.Index;
            float i2 = endCell.Index;

            TriangulateEdgeStrip(begin, weights1, i1, e2, w2, i2, hasRoad);

            for (int i = 2; i < HexMetrics.terraceSteps; i++)
            {
                EdgeVertices e1 = e2;
                Color        w1 = w2;
                e2 = EdgeVertices.TerraceLerp(begin, end, i);
                w2 = HexMetrics.TerraceLerp(weights1, weights2, i);
                TriangulateEdgeStrip(e1, w1, i1, e2, w2, i2, hasRoad);
            }

            TriangulateEdgeStrip(e2, w2, i1, end, weights2, i2, hasRoad);
        }
示例#2
0
        // Build a terrace between two cells
        void TriangulateEdgeTerraces(EdgeVertices begin, HexCell beginCell, EdgeVertices end, HexCell endCell, bool hasRoad)
        {
            EdgeVertices e2 = EdgeVertices.TerraceLerp(begin, end, 1);
            Color        c2 = HexMetrics.TerraceLerp(beginCell.Color, endCell.Color, 1);

            // The first step is a quad
            TriangulateEdgeStrip(begin, beginCell.Color, e2, c2, hasRoad);

            // All the steps are quads
            for (int i = 2; i < HexMetrics.terraceSteps; i++)
            {
                EdgeVertices e1 = e2;
                Color        c1 = c2;
                e2 = EdgeVertices.TerraceLerp(begin, end, i);
                c2 = HexMetrics.TerraceLerp(beginCell.Color, endCell.Color, i);
                TriangulateEdgeStrip(e1, c1, e2, c2, hasRoad);
            }

            // The last step is a quad
            TriangulateEdgeStrip(e2, c2, end, endCell.Color, hasRoad);
        }