public IEnumerator Initialize() { var genTerrainMonad = new BlockMonad <float[]>(r => _terrainGen.GenerateHeightMap( MAP_WIDTH, MAP_HEIGHT, Random.Range(0, 10000), Random.Range(0, 10000), new TerrainParameter(), r)); var genTemperatureMonad = new BlockMonad <float[]>(r => _temperatureGen.GenerateWeatherMap( MAP_WIDTH, MAP_HEIGHT, Random.Range(0, 10000), Random.Range(0, 10000), new WeatherParameter(), r)); var genHumidityMonad = new BlockMonad <float[]>(r => _humidityGen.GenerateWeatherMap( MAP_WIDTH, MAP_HEIGHT, Random.Range(0, 10000), Random.Range(0, 10000), new WeatherParameter(), r)); var genManaMonad = new BlockMonad <float[]>(r => _manaGen.GenerateWeatherMap( MAP_WIDTH, MAP_HEIGHT, Random.Range(0, 10000), Random.Range(0, 10000), new WeatherParameter(), r)); var combineM = Monad.WhenAll( genTerrainMonad, genTemperatureMonad, genHumidityMonad, genManaMonad); _executor.Add(combineM.Do()); yield return(_executor.Join()); }
private IEnumerator _ShowHeightMap() { float t1 = Time.time; Debug.Log("[TerrainGen] generate start"); var monad = new BlockMonad <float[]>(r => _terrainGen.GenerateHeightMap( _spriteView.Width, _spriteView.Height, _xOffset, _yOffset, _terrainParam, r)); yield return(monad.Do()); Debug.Log("[TerrainGen] generate complete"); _heightMap = monad.Result; _spriteView.SetHeightMap(_heightMap); float t2 = Time.time; Debug.LogFormat("{0}=>{1} spent:{2}", t1, t2, t2 - t1); }
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."; }