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 GenerateRiverMap( int width, int height, float[] heightMap, RainParameter para, IReturn <float[]> ret) { _width = width; _height = height; _para = para; var startLocations = heightMap .Select((h, idx) => new { h, idx }) .OrderByDescending(i => i.h) .Take(heightMap.Length / (int)(1 / _para.HEIGHT_LOCATIONS)) .Select(o => o.idx).ToArray(); _directionMap = new int[heightMap.Length]; _rainMap = new int[heightMap.Length]; yield return(_GenerateDirationMap(heightMap)); yield return(_GenerateRainMap(startLocations, heightMap)); var rains = _rainMap.Where(i => i > 0); var average = (rains.Sum() / rains.Count()) * _para.RIVER_AVERAGE_FACTOR; var rainResult = _rainMap.Select(i => Mathf.Min(i / average, 1)).ToArray(); ret.Accept(rainResult); }
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); }
void _MonadCompletionSourceTestTask1(IReturn <int> r) { ThreadPool.QueueUserWorkItem(state => { Thread.Sleep(500); r.Accept(3); }); }
IEnumerator _FirstCompletedTestTask1(IReturn <int> ret) { yield return(null); yield return(null); ret.Accept(1); }
IEnumerator TestTask3(IReturn <string> ret) { yield return(null); yield return(null); ret.Accept("ok 3"); }
public IEnumerator TestTask5(int value, int iter, IReturn <int> ret) { for (int i = 0; i < iter; ++i) { yield return(null); } ret.Accept(value); }
IEnumerator _FirstCompletedTestTask2(IReturn <int> ret) { yield return(null); yield return(null); yield return(null); Assert.Fail(); ret.Accept(2); }
IEnumerator TestTask1(IReturn <int> ret) { yield return(null); yield return(null); yield return(null); yield return(null); ret.Accept(10); }
public IEnumerator ChangeToNextWeather(IReturn <float[]> ret) { if (_para == null || _weatherMap == null) { ret.Fail(new System.Exception("Need Initial / Need Parameter")); yield break; } NextRandom(); yield return(_GenerateWeatherMap()); ret.Accept(_weatherMap); }
IEnumerator TestTask4(IReturn <bool> ret) { yield return(null); yield return(null); yield return(null); yield return(null); yield return(null); ret.Accept(true); }
public IEnumerator GenerateRandomLocalAreaMap( int width, int height, RandomPointParameter para, IReturn <float[]> ret) { _width = width; _height = height; _para = para; _localAreaMap = new float[_width * _height]; yield return(_GetRandomLoosePoints(_para.NUM)); yield return(_GenerateRandomLocalAreaMap()); ret.Accept(_localAreaMap); }
public IEnumerator GenerateWeatherMap( int width, int height, float xOffset, float yOffset, WeatherParameter para, IReturn <float[]> ret) { _width = width; _height = height; _para = para; _varietyStatus = new WeatherVarietyStatus(xOffset, yOffset); _weatherMap = new float[_width * _height]; yield return(_GenerateWeatherMap()); ret.Accept(_weatherMap); }
public IEnumerator GenerateManaMap( int width, int height, ManaParameter para, IReturn <float[]> ret) { _width = width; _height = height; _para = para; _randomParam = para.RANDOM_POINT_GEN_PARA; _manaMap = new float[_width * _height]; _localAreaMap = new float[_width * _height]; var totalPoints = _para.POSITIVE_HIGH_POINTS_NUM + _para.POSITIVE_MID_POINTS_NUM + _para.POSITIVE_LOW_POINTS_NUM + _para.NEGATIVE_HIGH_POINTS_NUM + _para.NEGATIVE_MID_POINTS_NUM + _para.NEGATIVE_LOW_POINTS_NUM; yield return(_randPointGen.GenerateRandomPoints( width, height, totalPoints, _randomParam)); var points = _randPointGen.Points.OrderBy(i => Random.value).ToList(); _highPosPoints = points.Take(_para.POSITIVE_HIGH_POINTS_NUM).ToList(); points = points.Skip(_para.POSITIVE_HIGH_POINTS_NUM).ToList(); _midPosPoints = points.Take(_para.POSITIVE_HIGH_POINTS_NUM).ToList(); points = points.Skip(_para.POSITIVE_HIGH_POINTS_NUM).ToList(); _lowPosPoints = points.Take(_para.POSITIVE_LOW_POINTS_NUM).ToList(); points = points.Skip(_para.POSITIVE_LOW_POINTS_NUM).ToList(); _highNegPoints = points.Take(_para.NEGATIVE_HIGH_POINTS_NUM).ToList(); points = points.Skip(_para.NEGATIVE_HIGH_POINTS_NUM).ToList(); _midNegPoints = points.Take(_para.NEGATIVE_MID_POINTS_NUM).ToList(); points = points.Skip(_para.NEGATIVE_MID_POINTS_NUM).ToList(); _lowNegPoints = points.Take(_para.NEGATIVE_LOW_POINTS_NUM).ToList(); yield return(_GenerateRandomLocalAreaMap(_highPosPoints, _para.POSITIVE_HIGH_RADIUS, _para.POSITIVE_HIGH_FACTOR)); yield return(_GenerateRandomLocalAreaMap(_midPosPoints, _para.POSITIVE_MID_RADIUS, _para.POSITIVE_MID_FACTOR)); yield return(_GenerateRandomLocalAreaMap(_lowPosPoints, _para.POSITIVE_LOW_RADIUS, _para.POSITIVE_LOW_FACTOR)); yield return(_GenerateRandomLocalAreaMap(_highNegPoints, _para.NEGATIVE_HIGH_RADIUS, _para.NEGATIVE_HIGH_FACTOR)); yield return(_GenerateRandomLocalAreaMap(_midNegPoints, _para.NEGATIVE_MID_RADIUS, _para.NEGATIVE_MID_FACTOR)); yield return(_GenerateRandomLocalAreaMap(_lowNegPoints, _para.NEGATIVE_LOW_RADIUS, _para.NEGATIVE_LOW_FACTOR)); for (int x = 0; x < _width; x++) { for (int y = 0; y < _height; y++) { var idx = y * _width + x; _manaMap[idx] = _localAreaMap[idx] + 0.5f; } } ret.Accept(_manaMap); }
IEnumerator _SleepAndIncrement(int s, IReturn <int> ret) { yield return(Coroutine.Sleep(0.1f)); ret.Accept(s + 1); }