示例#1
0
    public ClimateGenerator(ClimateSettings _settings, int _seed)
    {
        biomesColors[BiomeType.WATER]                       = Color.blue;
        biomesColors[BiomeType.POLAR_ICE]                   = new Color(255, 255, 255) / 255;
        biomesColors[BiomeType.POLAR_DESERT]                = new Color(192, 192, 192) / 255;
        biomesColors[BiomeType.SUBPOLAR_MOIST_TUNDRA]       = new Color(96, 128, 128) / 255;
        biomesColors[BiomeType.SUBPOLAR_WET_TUNDRA]         = new Color(64, 128, 128) / 255;
        biomesColors[BiomeType.SUBPOLAR_RAIN_TUNDRA]        = new Color(32, 128, 192) / 255;
        biomesColors[BiomeType.SUBPOLAR_DRY_TUNDRA]         = new Color(128, 128, 128) / 255;
        biomesColors[BiomeType.BOREAL_DESERT]               = new Color(160, 160, 128) / 255;
        biomesColors[BiomeType.BOREAL_DRY_SCRUB]            = new Color(128, 160, 128) / 255;
        biomesColors[BiomeType.BOREAL_MOIST_FOREST]         = new Color(96, 160, 128) / 255;
        biomesColors[BiomeType.BOREAL_WET_FOREST]           = new Color(64, 160, 144) / 255;
        biomesColors[BiomeType.BOREAL_RAIN_FOREST]          = new Color(32, 160, 192) / 255;
        biomesColors[BiomeType.COOL_TEMPERATE_MOIST_FOREST] = new Color(96, 192, 128) / 255;
        biomesColors[BiomeType.COOL_TEMPERATE_WET_FOREST]   = new Color(64, 192, 144) / 255;
        biomesColors[BiomeType.COOL_TEMPERATE_RAIN_FOREST]  = new Color(32, 192, 192) / 255;
        biomesColors[BiomeType.COOL_TEMPERATE_STEPPES]      = new Color(128, 192, 128) / 255;
        biomesColors[BiomeType.COOL_TEMPERATE_DESERT]       = new Color(192, 192, 128) / 255;
        biomesColors[BiomeType.COOL_TEMPERATE_DESERT_SCRUB] = new Color(160, 192, 128) / 255;
        biomesColors[BiomeType.WARM_TEMPERATE_MOIST_FOREST] = new Color(96, 224, 128) / 255;
        biomesColors[BiomeType.WARM_TEMPERATE_WET_FOREST]   = new Color(64, 224, 144) / 255;
        biomesColors[BiomeType.WARM_TEMPERATE_RAIN_FOREST]  = new Color(32, 224, 192) / 255;
        biomesColors[BiomeType.WARM_TEMPERATE_THORN_SCRUB]  = new Color(160, 224, 128) / 255;
        biomesColors[BiomeType.WARM_TEMPERATE_DRY_FOREST]   = new Color(128, 224, 128) / 255;
        biomesColors[BiomeType.WARM_TEMPERATE_DESERT]       = new Color(224, 224, 128) / 255;
        biomesColors[BiomeType.WARM_TEMPERATE_DESERT_SCRUB] = new Color(192, 224, 128) / 255;
        biomesColors[BiomeType.SUBTROPICAL_DESERT]          = new Color(240, 240, 128) / 255;
        biomesColors[BiomeType.SUBTROPICAL_DESERT_SCRUB]    = new Color(224, 240, 128) / 255;
        biomesColors[BiomeType.TROPICAL_DESERT]             = new Color(255, 255, 128) / 255;
        biomesColors[BiomeType.TROPICAL_DESERT_SCRUB]       = new Color(224, 255, 128) / 255;
        biomesColors[BiomeType.SUBTROPICAL_THORN_WOODLAND]  = new Color(176, 240, 128) / 255;
        biomesColors[BiomeType.TROPICAL_THORN_WOODLAND]     = new Color(192, 255, 128) / 255;
        biomesColors[BiomeType.TROPICAL_VERY_DRY_FOREST]    = new Color(160, 255, 128) / 255;
        biomesColors[BiomeType.SUBTROPICAL_DRY_FOREST]      = new Color(128, 240, 128) / 255;
        biomesColors[BiomeType.TROPICAL_DRY_FOREST]         = new Color(128, 255, 128) / 255;
        biomesColors[BiomeType.SUBTROPICAL_MOIST_FOREST]    = new Color(96, 240, 128) / 255;
        biomesColors[BiomeType.SUBTROPICAL_WET_FOREST]      = new Color(64, 240, 144) / 255;
        biomesColors[BiomeType.SUBTROPICAL_RAIN_FOREST]     = new Color(32, 240, 176) / 255;
        biomesColors[BiomeType.TROPICAL_MOIST_FOREST]       = new Color(96, 255, 128) / 255;
        biomesColors[BiomeType.TROPICAL_WET_FOREST]         = new Color(64, 255, 144) / 255;
        biomesColors[BiomeType.TROPICAL_RAIN_FOREST]        = new Color(32, 255, 160) / 255;

        settings = _settings;

        noiseFilters = new NoiseFilter[_settings.moistureNoiseLayers.Length];

        for (var i = 0; i < noiseFilters.Length; i++)
        {
            noiseFilters[i] = new NoiseFilter(_settings.moistureNoiseLayers[i].noiseSettings, _seed);
        }

        moistureMinMax = new MinMax();
    }
示例#2
0
        private double avar(double zzt, double zzl, double zzc)
        {
            const double rt = 7.8, rl = 24.0;
            double       sgt, yr;

            if (_lvar > Changes.None)
            {
                double q;
                switch (_lvar)
                {
                case Changes.All:
                    _cs = _climateSettings[_klim];
                    goto case Changes.VariabilityMode;

                case Changes.VariabilityMode:
                    goto case Changes.Frequency;

                case Changes.Frequency:
                    q   = Math.Log(0.133 * _wn);
                    _gm = _cs.cfm1 + _cs.cfm2 / (Math.Pow(_cs.cfm3 * q, 2) + 1);
                    _gp = _cs.cfp1 + _cs.cfp2 / (Math.Pow(_cs.cfp3 * q, 2) + 1);
                    goto case Changes.AntennaHeight;

                case Changes.AntennaHeight:
                    _dexa = Math.Sqrt(18000000 * Transmitter.he) + Math.Sqrt(18000000 * Receiver.he) + Math.Pow(575.7e12 / _wn, THIRD);
                    goto case Changes.Distance;

                case Changes.Distance:
                    if (_dist < _dexa)
                    {
                        _de = 130000 * _dist / _dexa;
                    }
                    else
                    {
                        _de = 130000 + _dist - _dexa;
                    }
                    break;
                }
                _vmd  = curve(_cs.cv1, _cs.cv2, _cs.yv1, _cs.yv2, _cs.yv3, _de);
                _sgtm = curve(_cs.csm1, _cs.csm2, _cs.ysm1, _cs.ysm2, _cs.ysm3, _de) * _gm;
                _sgtp = curve(_cs.csp1, _cs.csp2, _cs.ysp1, _cs.ysp2, _cs.ysp3, _de) * _gp;
                _sgtd = _sgtp * _cs.csd1;
                _tgtd = (_sgtp - _sgtd) * _cs.zd;
                if (_w1)
                {
                    _sgl = 0;
                }
                else
                {
                    q    = (1 - 0.8 * Math.Exp(-_dist / 50000.0)) * _dh * _wn;
                    _sgl = 10 * q / (q + 13);
                }
                _vs0  = Math.Pow(5 + 3 * Math.Exp(-_de / 100000.0), 2);
                _lvar = Changes.None;
            }
            var zt = zzt;
            var zl = zzl;
            var zc = zzc;

            switch (_mdvar)
            {
            case VariabilityMode.Single:
                zt = zc;
                zl = zc;
                break;

            case VariabilityMode.Individual:
                zl = zc;
                break;

            case VariabilityMode.Mobile:
                zl = zt;
                break;
            }
            if (Math.Abs(zt) > 3.1 || Math.Abs(zl) > 3.1 || Math.Abs(zc) > 3.1)
            {
                _kwx = Math.Max(_kwx, 1);
            }
            if (zt < 0)
            {
                sgt = _sgtm;
            }
            else if (zt <= _cs.zd)
            {
                sgt = _sgtp;
            }
            else
            {
                sgt = _sgtd + _tgtd / zt;
            }
            var vs = _vs0 + Math.Pow(sgt * zt, 2) / (rt + zc * zc) + Math.Pow(_sgl * zl, 2) / (rl + zc * zc);

            switch (_mdvar)
            {
            case VariabilityMode.Single:
                yr   = 0;
                _sgc = Math.Sqrt(sgt * sgt + _sgl * _sgl + vs);
                break;

            case VariabilityMode.Individual:
                yr   = sgt * zt;
                _sgc = Math.Sqrt(_sgl * _sgl + vs);
                break;

            case VariabilityMode.Mobile:
                yr   = Math.Sqrt(sgt * sgt + _sgl * _sgl) * zt;
                _sgc = Math.Sqrt(vs);
                break;

            default:
                yr   = sgt * zt + _sgl * zl;
                _sgc = Math.Sqrt(vs);
                break;
            }
            var avarv = _aref - _vmd - yr - _sgc * zc;

            if (avarv < 0)
            {
                avarv = avarv * (29 - avarv) / (29 - 10 * avarv);
            }
            return(avarv);
        }