void TriangulateConnection(HexDirection direction, HexCell cell, EdgeVertices el) { var neighbor = cell.GetNeighbor(direction); if (!neighbor) { return; } var bridge = HexMetrics.GetBridge(direction); bridge.y = neighbor.position.y - cell.position.y; var el2 = new EdgeVertices( el.v1 + bridge, el.v5 + bridge); var hasRiver = cell.HasRiverThroughEdge(direction); var hasRoad = cell.HasRoadThroughEdge(direction); if (hasRiver) { el2.v3.y = neighbor.streamBedY; if (!cell.isUnderWater) { if (!neighbor.isUnderWater) { TriangulateRiverQuad( el.v2, el.v4, el2.v2, el2.v4, cell.riverSurfaceY, neighbor.riverSurfaceY, cell.hasIncomingRiver && cell.incomingRiver == direction); } else if (cell.elevation > neighbor.waterLevel) { TriangulateWaterfallInWater(el.v2, el.v4, el2.v2, el2.v4, cell.riverSurfaceY, neighbor.riverSurfaceY, neighbor.waterSurfaceY); } } else if (!neighbor.isUnderWater && neighbor.elevation > cell.waterLevel) { TriangulateWaterfallInWater(el2.v4, el2.v2, el.v4, el.v2, neighbor.riverSurfaceY, cell.riverSurfaceY, cell.waterSurfaceY); } } if (cell.GetEdgeType(direction) == HexEdgeType.Slope) { TriangulateEdgeTerraces(el, cell, el2, neighbor, hasRoad); } else { TriangulateEdgeStrip(el, color1, cell.terrainTypeIndex, el2, color2, neighbor.terrainTypeIndex, hasRoad); } features.AddWall(el, cell, el2, neighbor, hasRiver, hasRoad); var next_d = direction.Next(); var nextNeighbor = cell.GetNeighbor(next_d); if (direction <= HexDirection.E && nextNeighbor) { var v5 = el.v5 + HexMetrics.GetBridge(next_d); v5.y = nextNeighbor.position.y; if (cell.elevation <= neighbor.elevation) { if (cell.elevation <= nextNeighbor.elevation) { TriangulateCorner(el.v5, cell, el2.v5, neighbor, v5, nextNeighbor); } else { TriangulateCorner(v5, nextNeighbor, el.v5, cell, el2.v5, neighbor); } } else if (neighbor.elevation <= nextNeighbor.elevation) { TriangulateCorner(el2.v5, neighbor, v5, nextNeighbor, el.v5, cell); } else { TriangulateCorner(v5, nextNeighbor, el.v5, cell, el2.v5, neighbor); } //AddTriangle(v2, v4, v5); //AddTriangleColor(cell.color, neighbor.color, nextNeighbor.color); } }