コード例 #1
0
    private Tile[,] CreatePrimaryWorldArray()
    {
        Tile[,] worldTiles = new Tile[X, Z];
        // Each layer can be done asynchronusly - seems unnecessary so far.
        // Elevation
        double startingElevation = randy.NextDouble() * 10.0 - 5.0;

        double[,] elevationLayer = generateWorldLayer(-100.0, 100.0, 2.0, startingElevation, true);
        // Temps
        double startingHighTemp = randy.NextDouble() * 40.0 + 40.0;

        double[,] highTempLayer = generateWorldLayer(20.0, 100.0, 2.0, startingHighTemp, false);
        double[,] lowTempLayer  = generateWorldLayer(-20.0, 70.0, 2.0, randy.NextDouble() * 40.0, false);
        double startingMidpoint = randy.NextDouble() * 30.0 + 45.0;

        double[,] midpointLayer = generateWorldLayer(45.0, 75.0, 2.0, startingMidpoint, true);
        // Variance
        double[,] varianceLayer = generateWorldLayer(0.0, 12.0, 1.0, randy.NextDouble() * 12.0, false);
        // Humidity
        double[][,] humiditySegments = new double[Humidity.HUMIDITY_SEGMENTS][, ];
        for (int i = 0; i < Humidity.HUMIDITY_SEGMENTS; i++)
        {
            humiditySegments[i] = generateWorldLayer(0.0, 12.0, 1.0, randy.NextDouble() * 12.0, false);
        }

        // This can be done asynchronously once the above is completed - seems to halve world creation time.
        Parallel.For(X, x =>
        {
            for (int z = 0; z < Z; z++)
            {
                Humidity currentHumidity = Humidity.convertToObject(x, z, humiditySegments);
                worldTiles[x, z]         = new Tile(elevationLayer[x, z], lowTempLayer[x, z], highTempLayer[x, z], midpointLayer[x, z], varianceLayer[x, z], currentHumidity);
                maxElevationDifference   = checkForBiggerMaxDiff(x, z, elevationLayer);
            }
        });

        return(worldTiles);
    }