private WaterTriangulationData TriangulateOpenWaterCenter( Hex source, WaterTriangulationData triangulationData, HexDirections direction, float hexOuterRadius, int wrapSize, MapMeshChunkLayer water ) { triangulationData.waterSurfaceCornerLeft = triangulationData.waterSurfaceCenter + HexagonPoint.GetFirstWaterCorner( direction, hexOuterRadius ); triangulationData.waterSurfaceCornerRight = triangulationData.waterSurfaceCenter + HexagonPoint.GetSecondWaterCorner( direction, hexOuterRadius ); water.AddTrianglePerturbed( triangulationData.waterSurfaceCenter, triangulationData.waterSurfaceCornerLeft, triangulationData.waterSurfaceCornerRight, hexOuterRadius, wrapSize ); Vector3 openWaterCenterIndices; openWaterCenterIndices.x = openWaterCenterIndices.y = openWaterCenterIndices.z = source.Index; water.AddTriangleHexData( openWaterCenterIndices, _weights1 ); return(triangulationData); }
private WaterTriangulationData GetWaterData( Hex source, Hex neighbor, WaterTriangulationData waterTriData, HexDirections direction, float hexOuterRadius, int wrapSize ) { waterTriData.waterSurfaceCenter = source.Position; waterTriData.waterSurfaceCenter.y = source.WaterSurfaceY; waterTriData.sourceWaterEdge = new EdgeVertices( waterTriData.waterSurfaceCenter + HexagonPoint.GetFirstWaterCorner( direction, hexOuterRadius ), waterTriData.waterSurfaceCenter + HexagonPoint.GetSecondWaterCorner( direction, hexOuterRadius ) ); Vector3 neighborCenter = neighbor.Position; float hexInnerRadius = HexagonPoint.OuterToInnerRadius(hexOuterRadius); float hexInnerDiameter = hexInnerRadius * 2f; // TODO: This will not work once the column index is removed from // Hex class. // If the neighbor outside the wrap boundaries, adjust accordingly. if (neighbor.ColumnIndex < source.ColumnIndex - 1) { neighborCenter.x += wrapSize * hexInnerDiameter; } else if (neighbor.ColumnIndex > source.ColumnIndex + 1) { neighborCenter.x -= wrapSize * hexInnerDiameter; } neighborCenter.y = waterTriData.waterSurfaceCenter.y; waterTriData.neighborWaterEdge = new EdgeVertices( neighborCenter + HexagonPoint.GetSecondSolidCorner( direction.Opposite(), hexOuterRadius ), neighborCenter + HexagonPoint.GetFirstSolidCorner( direction.Opposite(), hexOuterRadius ) ); return(waterTriData); }