/* Triangulate Edge Terraces */ private void TriangulateEdgeTerraces(Vector3 beginLeft, Vector3 beginRight, HexCell beginCell, Vector3 endLeft, Vector3 endRight, HexCell endCell) { Vector3 v3 = HexMeshUtility.TerraceLerp(beginLeft, endLeft, 1); Vector3 v4 = HexMeshUtility.TerraceLerp(beginRight, endRight, 1); Color c2; if (HexMeshUtility.UseTextures) { c2 = HexMeshUtility.TerraceLerp(m_red, m_green, 1); m_terrainMesh.AddQuadColor(m_red, c2); AddQuadType(beginCell.TerrainTypeIndex, endCell.TerrainTypeIndex); } else { c2 = HexMeshUtility.TerraceLerp(beginCell.Color, endCell.Color, 1); m_terrainMesh.AddQuadColor(beginCell.Color, c2); } m_terrainMesh.AddQuad(beginLeft, beginRight, v3, v4); for (int i = 2; i < HexMeshUtility.TerraceSteps; i++) { Vector3 v1 = v3; Vector3 v2 = v4; Color c1 = c2; v3 = HexMeshUtility.TerraceLerp(beginLeft, endLeft, i); v4 = HexMeshUtility.TerraceLerp(beginRight, endRight, i); if (HexMeshUtility.UseTextures) { c2 = HexMeshUtility.TerraceLerp(m_red, m_green, i); AddQuadType(beginCell.TerrainTypeIndex, endCell.TerrainTypeIndex); } else { c2 = HexMeshUtility.TerraceLerp(beginCell.Color, endCell.Color, i); } m_terrainMesh.AddQuad(v1, v2, v3, v4); m_terrainMesh.AddQuadColor(c1, c2); } if (HexMeshUtility.UseTextures) { m_terrainMesh.AddQuadColor(c2, m_green); AddQuadType(beginCell.TerrainTypeIndex, endCell.TerrainTypeIndex); } else { m_terrainMesh.AddQuadColor(c2, endCell.Color); } m_terrainMesh.AddQuad(v3, v4, endLeft, endRight); }
/* Triangulate Boundary Triangle (using Color) */ private void TriangulateBoundaryTriangle(Vector3 begin, HexCell beginCell, Vector3 left, HexCell leftCell, Vector3 boundary, Color boundaryColor) { Vector3 v2 = HexMeshUtility.TerraceLerp(begin, left, 1); Color c2 = HexMeshUtility.TerraceLerp(beginCell.Color, leftCell.Color, 1); m_terrainMesh.AddTriangle(begin, v2, boundary); m_terrainMesh.AddTriangleColor(beginCell.Color, c2, boundaryColor); for (int i = 2; i < HexMeshUtility.TerraceSteps; i++) { Vector3 v1 = v2; Color c1 = c2; v2 = HexMeshUtility.TerraceLerp(begin, left, i); c2 = HexMeshUtility.TerraceLerp(beginCell.Color, leftCell.Color, i); m_terrainMesh.AddTriangle(v1, v2, boundary); m_terrainMesh.AddTriangleColor(c1, c2, boundaryColor); } m_terrainMesh.AddTriangle(v2, left, boundary); m_terrainMesh.AddTriangleColor(c2, leftCell.Color, boundaryColor); }
/* Triangulate Corner Terraces */ private void TriangulateCornerTerraces(Vector3 begin, HexCell beginCell, Vector3 left, HexCell leftCell, Vector3 right, HexCell rightCell) { Vector3 v3 = HexMeshUtility.TerraceLerp(begin, left, 1); Vector3 v4 = HexMeshUtility.TerraceLerp(begin, right, 1); Color c3, c4; Vector3 types; types.x = beginCell.TerrainTypeIndex; types.y = leftCell.TerrainTypeIndex; types.z = rightCell.TerrainTypeIndex; if (HexMeshUtility.UseTextures) { c3 = HexMeshUtility.TerraceLerp(m_red, m_green, 1); c4 = HexMeshUtility.TerraceLerp(m_red, m_blue, 1); m_terrainMesh.AddTriangleTerrainTypes(types); } else { c3 = HexMeshUtility.TerraceLerp(beginCell.Color, leftCell.Color, 1); c4 = HexMeshUtility.TerraceLerp(beginCell.Color, rightCell.Color, 1); } m_terrainMesh.AddTriangle(begin, v3, v4); m_terrainMesh.AddTriangleColor(beginCell.Color, c3, c4); for (int i = 2; i < HexMeshUtility.TerraceSteps; i++) { Vector3 v1 = v3; Vector3 v2 = v4; Color c1 = c3; Color c2 = c4; v3 = HexMeshUtility.TerraceLerp(begin, left, i); v4 = HexMeshUtility.TerraceLerp(begin, right, i); if (HexMeshUtility.UseTextures) { c3 = HexMeshUtility.TerraceLerp(m_red, m_green, i); c4 = HexMeshUtility.TerraceLerp(m_red, m_blue, i); m_terrainMesh.AddQuadTerrainTypes(types); } else { c3 = HexMeshUtility.TerraceLerp(beginCell.Color, leftCell.Color, i); c4 = HexMeshUtility.TerraceLerp(beginCell.Color, rightCell.Color, i); } m_terrainMesh.AddQuad(v1, v2, v3, v4); m_terrainMesh.AddQuadColor(c1, c2, c3, c4); } if (HexMeshUtility.UseTextures) { m_terrainMesh.AddQuadColor(c3, c4, m_green, m_blue); m_terrainMesh.AddQuadTerrainTypes(types); } else { m_terrainMesh.AddQuadColor(c3, c4, leftCell.Color, rightCell.Color); } m_terrainMesh.AddQuad(v3, v4, left, right); }