/// <summary> /// Fire after calling <see cref="FailedGamePlay()"/> /// Will proccess continue logic during this phase. /// Note. during GameFaildFlow the GamePlay is still running but keeps in pause status. /// This flow may fire mutilple times during one gameplay. /// </summary> /// <returns></returns> IEnumerator GameFaildFlow() { EnterPause(); currentGamePlayData.OnGameFaild(); //已經接關過 if (!currentGamePlayData.IsContinueAvailable) { EndTheGame(); } //尚未接關過 else { isContinueing = true; BlockMonad <bool> continueFlowCoroutine = new BlockMonad <bool>(r => currentGamePlayData.OnContinueFlow(r)); yield return(continueFlowCoroutine.Do()); // Continue success if (continueFlowCoroutine.Result) { currentGamePlayData.OnContinue(); isFailed = false; isContinueing = false; // alreadyContinue = true; } else { isContinueing = false; EndTheGame(); } continueFlowCoroutine = null; } ResumePause(); }
public IEnumerator GenerateHeightMap( int width, int height, float xOffset, float yOffset, TerrainParameter para, IReturn <float[]> ret) { _width = width; _height = height; _xOffset = xOffset; _yOffset = yOffset; _para = para; _heightMap = new float[_width * _height]; var genLocalMonad = new BlockMonad <float[]>(r => _randPointGen.GenerateRandomLocalAreaMap( width, height, _para.RANDOM_POINT_GEN_PARA, r)); yield return(genLocalMonad.Do()); if (genLocalMonad.Error != null) { ret.Fail(genLocalMonad.Error); yield break; } _localAreaMap = genLocalMonad.Result; yield return(_GenerateHeightMap()); ret.Accept(_heightMap); }
public IEnumerator GenerateWeatherMap( int width, int height, float xOffset, float yOffset, TemperatureParameter para, IReturn <float[]> ret) { _width = width; _height = height; _para = para; _temperatureMap = new float[_width * _height]; var weatherMonad = new BlockMonad <float[]>(r => _weatherGen.GenerateWeatherMap(_width, _height, xOffset, yOffset, _para.WEATHER_GEN_PARA, r)); yield return(weatherMonad.Do()); _varietyStatus = _weatherGen.VarietyStatus; var varietyMap = weatherMonad.Result; _GenerateMainTemperature(varietyMap); ret.Accept(_temperatureMap); }
private void _CreateNewWorld() { _executor.Clear(); var monad = new BlockMonad <None>(r => _CreateNewWorldMonad()); _executor.Add(monad.Do()); }
private IEnumerator _ShowWeatherMap() { Debug.Log("[WeatherGen] generate start"); var monad = new BlockMonad <float[]>(r => _weatherGen.GenerateWeatherMap( _spriteView.Width, _spriteView.Height, _xOffset, _yOffset, _weatherParam, r)); yield return(monad.Do()); Debug.Log("[WeatherGen] generate complete"); _weatherMap = monad.Result; _spriteView.SetTemperatureMap(_weatherMap); }
private IEnumerator _WeatherChangeUpdate() { while (true) { float sleepTime = 3; while (sleepTime > 0) { yield return(null); sleepTime -= Time.deltaTime; } Debug.Log("[WeatherGen] generate Next start"); var monad = new BlockMonad <float[]>(r => _weatherGen.ChangeToNextWeather(r)); yield return(monad.Do()); _xOffset = _weatherGen.VarietyStatus.XOffset; _yOffset = _weatherGen.VarietyStatus.YOffset; _weatherMap = monad.Result; _spriteView.SetTemperatureMap(_weatherMap); } }
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 _ShowLocalAreaMap() { float t1 = Time.time; Debug.Log("[RandomPointGen] generate start"); var monad = new BlockMonad <float[]>(r => _randPointGen.GenerateRandomLocalAreaMap( _spriteView.Width, _spriteView.Height, _randomParam, r)); yield return(monad.Do()); Debug.Log("[RandomPointGen] generate complete"); _localAreaMap = monad.Result; _points = _randPointGen.Points; _spriteView.SetLocalAreaMap(_localAreaMap); 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."; }