示例#1
0
        public static WeatherSystem CreateRandomWeatherSystem(
            GameConstants.WeatherSystemTypes weatherType,
            GameConstants.WeatherSystemSeasonTypes season,
            double latitude)
        {
            WeatherSystem system = new WeatherSystem();

            system.WindDirectionFromDeg = GameManager.Instance.GetRandomNumber(360);
            if (GameManager.Instance.ThrowDice(34))
            {
                system.WindDirectionFromDeg = GameManager.Instance.GetRandomNumber(30) + 240; //wind tends to be from the west
            }
            double MinTemp = 0;
            double MaxTemp = 0;

            GetMinMaxTempFromLatitude(season, latitude, out MinTemp, out MaxTemp);
            int TempRange = (int)GetRange(MinTemp, MaxTemp);

            system.TemperatureC = GameManager.Instance.GetRandomNumber(TempRange) + MinTemp;

            switch (weatherType)
            {
            case GameConstants.WeatherSystemTypes.Random:
                system.CloudCover8ths = GameManager.Instance.GetRandomNumber(8);
                if (season == GameConstants.WeatherSystemSeasonTypes.Summer &&
                    GameManager.Instance.ThrowDice(50))
                {
                    system.CloudCover8ths = GameManager.Instance.GetRandomNumber(3);
                }
                system.WindSpeedMSec = GameManager.Instance.GetRandomNumber(30);
                if (system.WindSpeedMSec > 10 && GameManager.Instance.ThrowDice(25))
                {
                    system.WindSpeedMSec = GameManager.Instance.GetRandomNumber(5);
                }
                system.Precipitation = (GameConstants.PrecipitationLevel)
                                       GameManager.Instance.GetRandomNumber((int)GameConstants.PrecipitationLevel.Heavy);
                if (GameManager.Instance.ThrowDice(25))
                {
                    system.Precipitation = GameConstants.PrecipitationLevel.None;
                }
                if (system.Precipitation > GameConstants.PrecipitationLevel.None)
                {
                    if (system.TemperatureC > 0)
                    {
                        system.PrecipitationType = GameConstants.PrecipitationType.Rain;
                    }
                    else
                    {
                        system.PrecipitationType = GameConstants.PrecipitationType.Snow;
                    }
                }

                break;

            case GameConstants.WeatherSystemTypes.Fine:
                system.CloudCover8ths = GameManager.Instance.GetRandomNumber(2);
                system.Precipitation  = GameConstants.PrecipitationLevel.None;
                system.TemperatureC   = system.TemperatureC.Clamp(-5, 25);
                system.WindSpeedMSec  = GameManager.Instance.GetRandomNumber(5);

                break;

            case GameConstants.WeatherSystemTypes.Fair:
                system.CloudCover8ths = GameManager.Instance.GetRandomNumber(2);
                system.Precipitation  = GameConstants.PrecipitationLevel.None;
                if (GameManager.Instance.ThrowDice(20))
                {
                    system.Precipitation = GameConstants.PrecipitationLevel.Light;
                }
                system.TemperatureC  = system.TemperatureC.Clamp(-5, 25);
                system.WindSpeedMSec = GameManager.Instance.GetRandomNumber(12);


                break;

            case GameConstants.WeatherSystemTypes.Rough:
                system.WindSpeedMSec = GameManager.Instance.GetRandomNumber(15) + 10;
                system.Precipitation = (GameConstants.PrecipitationLevel)
                                       GameManager.Instance.GetRandomNumber((int)GameConstants.PrecipitationLevel.Heavy);
                if (system.Precipitation > GameConstants.PrecipitationLevel.None)
                {
                    if (system.TemperatureC > 0)
                    {
                        system.PrecipitationType = GameConstants.PrecipitationType.Rain;
                    }
                    else
                    {
                        system.PrecipitationType = GameConstants.PrecipitationType.Snow;
                    }
                }

                break;

            case GameConstants.WeatherSystemTypes.Severe:
                system.WindSpeedMSec = GameManager.Instance.GetRandomNumber(20) + 20;
                system.Precipitation = (GameConstants.PrecipitationLevel)
                                       GameManager.Instance.GetRandomNumber((int)GameConstants.PrecipitationLevel.Heavy);
                if (system.Precipitation > GameConstants.PrecipitationLevel.None)
                {
                    if (system.TemperatureC > 0)
                    {
                        system.PrecipitationType = GameConstants.PrecipitationType.Rain;
                    }
                    else
                    {
                        system.PrecipitationType = GameConstants.PrecipitationType.Snow;
                    }
                }

                break;
            }
            if (system.Precipitation >= GameConstants.PrecipitationLevel.Light && system.CloudCover8ths < 7)
            {
                system.CloudCover8ths = 7;
            }
            if (system.Precipitation > GameConstants.PrecipitationLevel.Intermediate && system.CloudCover8ths < 8)
            {
                system.CloudCover8ths = 8;
            }

            return(system);
        }
示例#2
0
        private static void GetMinMaxTempFromLatitude(GameConstants.WeatherSystemSeasonTypes season, double latitude, out double minTemp, out double maxTemp)
        {
            double lat = Math.Abs(latitude);

            lat     = lat.Clamp(0, 90);
            minTemp = 5;
            maxTemp = 15;
            switch (season)
            {
            case GameConstants.WeatherSystemSeasonTypes.Summer:
                if (lat > 70)
                {
                    minTemp = -1;
                    maxTemp = 10;
                }
                else if (lat > 60)
                {
                    minTemp = 5;
                    maxTemp = 20;
                }
                else if (lat > 50)
                {
                    minTemp = 10;
                    maxTemp = 25;
                }
                else if (lat > 40)
                {
                    minTemp = 10;
                    maxTemp = 30;
                }
                else
                {
                    minTemp = 15;
                    maxTemp = 40;
                }
                break;

            case GameConstants.WeatherSystemSeasonTypes.Spring:
                if (lat > 70)
                {
                    minTemp = -30;
                    maxTemp = -5;
                }
                else if (lat > 60)
                {
                    minTemp = -10;
                    maxTemp = 10;
                }
                else if (lat > 50)
                {
                    minTemp = 0;
                    maxTemp = 20;
                }
                else if (lat > 40)
                {
                    minTemp = 15;
                    maxTemp = 30;
                }
                else
                {
                    minTemp = 20;
                    maxTemp = 40;
                }

                break;

            case GameConstants.WeatherSystemSeasonTypes.Autumn:
                if (lat > 70)
                {
                    minTemp = -20;
                    maxTemp = -2;
                }
                else if (lat > 60)
                {
                    minTemp = -5;
                    maxTemp = 12;
                }
                else if (lat > 50)
                {
                    minTemp = 2;
                    maxTemp = 10;
                }
                else if (lat > 40)
                {
                    minTemp = 5;
                    maxTemp = 20;
                }
                else
                {
                    minTemp = 10;
                    maxTemp = 35;
                }

                break;

            case GameConstants.WeatherSystemSeasonTypes.Winter:
            case GameConstants.WeatherSystemSeasonTypes.ArcticWinter:
                if (lat > 70)
                {
                    minTemp = -50;
                    maxTemp = -20;
                }
                else if (lat > 60)
                {
                    minTemp = -30;
                    maxTemp = -5;
                }
                else if (lat > 50)
                {
                    minTemp = -10;
                    maxTemp = 10;
                }
                else if (lat > 40)
                {
                    minTemp = -1;
                    maxTemp = 15;
                }
                else
                {
                    minTemp = 10;
                    maxTemp = 30;
                }
                break;
            }
        }