void TriangulateOpenWater(HexDirection dir, HexCell cell, HexCell neighbor, Vector3 center) { var c1 = center + HexMetrics.GetFirstWaterCorner(dir); var c2 = center + HexMetrics.GetSecondWaterCorner(dir); water.AddTriangle(center, c1, c2); if (dir <= HexDirection.SE && neighbor) { var bridge = HexMetrics.GetWaterBridge(dir); var e1 = c1 + bridge; var e2 = c2 + bridge; water.AddQuad(c1, c2, e1, e2); if (dir <= HexDirection.E) { var nextNeighbor = cell.GetNeighbor(dir.Next()); if (!nextNeighbor || !nextNeighbor.isUnderWater) { return; } water.AddTriangle(c2, e2, c2 + HexMetrics.GetWaterBridge(dir.Next())); } } }
void TriangulateWaterShore(HexDirection dir, HexCell cell, HexCell neighbor, Vector3 center) { var e1 = new EdgeVertices( center + HexMetrics.GetFirstWaterCorner(dir), center + HexMetrics.GetSecondWaterCorner(dir)); water.AddTriangle(center, e1.v1, e1.v2); water.AddTriangle(center, e1.v2, e1.v3); water.AddTriangle(center, e1.v3, e1.v4); water.AddTriangle(center, e1.v4, e1.v5); var center2 = neighbor.position; center2.y = center.y; var e2 = new EdgeVertices( center2 + HexMetrics.GetSecondSolidCorner(dir.Opposite()), center2 + HexMetrics.GetFirstSolidCorner(dir.Opposite())); if (cell.HasRiverThroughEdge(dir)) { TriangulateEstuary(e1, e2, cell.incomingRiver == dir); } else { waterShore.AddQuad(e1.v1, e1.v2, e2.v1, e2.v2); waterShore.AddQuad(e1.v2, e1.v3, e2.v2, e2.v3); waterShore.AddQuad(e1.v3, e1.v4, e2.v3, e2.v4); waterShore.AddQuad(e1.v4, e1.v5, e2.v4, e2.v5); waterShore.AddQuadUV(0f, 0f, 0f, 1f); waterShore.AddQuadUV(0f, 0f, 0f, 1f); waterShore.AddQuadUV(0f, 0f, 0f, 1f); waterShore.AddQuadUV(0f, 0f, 0f, 1f); } var nextNeighbor = cell.GetNeighbor(dir.Next()); if (nextNeighbor) { var v3 = nextNeighbor.position + (nextNeighbor.isUnderWater ? HexMetrics.GetFirstWaterCorner(dir.Previous()) : HexMetrics.GetFirstSolidCorner(dir.Previous())); v3.y = center.y; waterShore.AddTriangle(e1.v5, e2.v5, v3); waterShore.AddTriangleUV( new Vector2(0f, 0f), new Vector2(0f, 1f), new Vector2(0f, nextNeighbor.isUnderWater ? 0f : 1f)); } }