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);
    }
Example #3
0
    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);
    }
Example #4
0
 void _MonadCompletionSourceTestTask1(IReturn <int> r)
 {
     ThreadPool.QueueUserWorkItem(state =>
     {
         Thread.Sleep(500);
         r.Accept(3);
     });
 }
Example #5
0
        IEnumerator _FirstCompletedTestTask1(IReturn <int> ret)
        {
            yield return(null);

            yield return(null);

            ret.Accept(1);
        }
Example #6
0
        IEnumerator TestTask3(IReturn <string> ret)
        {
            yield return(null);

            yield return(null);

            ret.Accept("ok 3");
        }
Example #7
0
        public IEnumerator TestTask5(int value, int iter, IReturn <int> ret)
        {
            for (int i = 0; i < iter; ++i)
            {
                yield return(null);
            }

            ret.Accept(value);
        }
Example #8
0
        IEnumerator _FirstCompletedTestTask2(IReturn <int> ret)
        {
            yield return(null);

            yield return(null);

            yield return(null);

            Assert.Fail();
            ret.Accept(2);
        }
Example #9
0
        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);
    }
Example #11
0
        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);
    }
Example #14
0
    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);
    }
Example #15
0
        IEnumerator _SleepAndIncrement(int s, IReturn <int> ret)
        {
            yield return(Coroutine.Sleep(0.1f));

            ret.Accept(s + 1);
        }