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);
    }
示例#2
0
    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);
    }