Exemple #1
0
    private IEnumerator _CreateNewWorldMonad()
    {
        Random.InitState(_seed);

        var genTerrainMonad = new BlockMonad <float[]>(r =>
                                                       _terrainGen.GenerateHeightMap(
                                                           _width,
                                                           _height,
                                                           Random.Range(0, 10000),
                                                           Random.Range(0, 10000),
                                                           _paramTerrain,
                                                           r));
        var genHumidityMonad = new BlockMonad <float[]>(r =>
                                                        _humidityGen.GenerateWeatherMap(
                                                            _width,
                                                            _height,
                                                            Random.Range(0, 10000),
                                                            Random.Range(0, 10000),
                                                            _paramWeather,
                                                            r));
        var genTemperatureMonad = new BlockMonad <float[]>(r =>
                                                           _temperatureGen.GenerateWeatherMap(
                                                               _width,
                                                               _height,
                                                               Random.Range(0, 10000),
                                                               Random.Range(0, 10000),
                                                               _paramTemperature,
                                                               r));
        var genManaMonad = new BlockMonad <float[]>(r =>
                                                    _manaGen.GenerateManaMap(
                                                        _width,
                                                        _height,
                                                        _paramMana,
                                                        r));

        Debug.Log("start genTerrainMonad");
        yield return(genTerrainMonad.Do());

        Debug.Log("start genHumidityMonad");
        yield return(genHumidityMonad.Do());

        Debug.Log("start genTemperatureMonad");
        yield return(genTemperatureMonad.Do());

        Debug.Log("start genManaMonad");
        yield return(genManaMonad.Do());

        var terrainMap     = genTerrainMonad.Result;
        var humidityMap    = genHumidityMonad.Result;
        var temperatureMap = genTemperatureMonad.Result;
        var manaMap        = genManaMonad.Result;

        var genRiverMonad = new BlockMonad <float[]>(r =>
                                                     _riverGen.GenerateRiverMap(
                                                         _width,
                                                         _height,
                                                         terrainMap,
                                                         _paramRain,
                                                         r));

        Debug.Log("start genRiverMonad");
        yield return(genRiverMonad.Do());

        var riverMap = genRiverMonad.Result;

        var tileUnitMap = new TileUnit[_width * _height];

        IBiomeIdentifier identifier = new BasicBiomeIdentifier(_biomeDistribution);

        for (int x = 0; x < _width; x++)
        {
            for (int y = 0; y < _height; y++)
            {
                var idx = MathUtility.MapIndex(x, y, _height);

                var height      = terrainMap[idx];
                var humidity    = humidityMap[idx];
                var temperature = temperatureMap[idx];
                var mana        = manaMap[idx];
                var river       = riverMap[idx];

                BiomeData biome = identifier.IdentifyBiome(humidity, height, temperature);
                tileUnitMap[idx] = new TileUnit(
                    height,
                    humidity,
                    temperature,
                    mana,
                    river,
                    biome.Biome);
            }
        }

        _tileData = new TileDataUnit
        {
            Map    = tileUnitMap,
            Width  = _width,
            Height = _height,
        };
        _noticeTxt = "New world created.";
    }