123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694 |
- //#define WEATHER_DATA_LOGGING
- class SakhalData : WorldData
- {
- const float SPAWN_CHANCE_CHOLERA = 20;
- const float COLD_AREA_TOOL_DMG_MODIF = 1.2;
-
- //-------test variables & methods ------
- #ifdef WEATHER_DATA_LOGGING
- int overcastChangeCount = 0;
- int directSuddenChangeCount = 0;
- int badWeatherSuddenChangeCount = 0;
- int thundersnowCount = 0;
- int suddenThundersnowCount = 0;
- int badWeatherCount = 0;
- int cloudyWeatherCount = 0;
- int clearWeatherCount = 0;
- int startYear = 0;
- int startMonth = 0;
- int startDay = 0;
- int startHour = 0;
- int startMinute = 0;
- int currentDay = 0;
- int daysToRun = 10;
- bool dayInit = false;
- #endif
- //------------------------
-
- override void Init()
- {
- super.Init();
-
- // new temperature curve settings
- m_Sunrise_Jan = 8.41;
- m_Sunset_Jan = 15.58;
- m_Sunrise_Jul = 3.75;
- m_Sunset_Jul = 20.25;
- int tempIdx;
- m_MinTemps = {-6.5, -9.5, -6.5, -9.5, 2, 6, 9, 10, 6, 1, -5, -10}; //{-13, -11, -7, -3, 2, 6, 9, 10, 6, 1, -5, -10} original values
- if (CfgGameplayHandler.GetEnvironmentMinTemps() && CfgGameplayHandler.GetEnvironmentMinTemps().Count() == 12)
- {
- for (tempIdx = 0; tempIdx < CfgGameplayHandler.GetEnvironmentMinTemps().Count(); tempIdx++)
- {
- m_MinTemps[tempIdx] = CfgGameplayHandler.GetEnvironmentMinTemps().Get(tempIdx);
- }
- }
- m_MaxTemps = {-3, -5, -3, -5, 9, 14, 16, 17, 14, 8, 1, -3}; //{-6, -4, -1, 3, 9, 14, 16, 17, 14, 8, 1, -3} original values
- if (CfgGameplayHandler.GetEnvironmentMaxTemps() && CfgGameplayHandler.GetEnvironmentMaxTemps().Count() == 12)
- {
- for (tempIdx = 0; tempIdx < CfgGameplayHandler.GetEnvironmentMaxTemps().Count(); tempIdx++)
- {
- m_MaxTemps[tempIdx] = CfgGameplayHandler.GetEnvironmentMaxTemps().Get(tempIdx);
- }
- }
- m_Pollution = m_Pollution | EPollution.HEAVYMETAL;
-
- m_TemperatureInsideBuildingsModifier = -1.0;
-
- m_UniversalTemperatureSourceCapModifier = -3.0;
-
- m_ClearWeatherChance = m_WeatherDefaultSettings.m_ClearWeatherChance;
- m_BadWeatherChance = m_WeatherDefaultSettings.m_BadWeatherChance;
-
- if (GetGame().IsServer() || !GetGame().IsMultiplayer())
- {
- m_Weather.SetDynVolFogHeightDensity( 1, 0 );
- m_Weather.SetDynVolFogHeightBias( 0, 0 );
- m_Weather.GetFog().Set(0,0,1000);
- m_Weather.GetFog().SetLimits(0,0);
- m_Weather.GetOvercast().SetLimits(0.07, 1);
-
- if (GetGame().IsMultiplayer())
- {
- m_Weather.GetOvercast().Set(Math.RandomFloat(0,0.75),0,5); //forcing a random weather at a clean server start and an instant change for overcast
- CalculateVolFog(m_Weather.GetSnowfall().GetActual(),m_Weather.GetWindSpeed(),0);
- }
-
- m_DefaultPlayerRestrictedAreas = {"pra/warheadstorage.json"};
- }
-
-
- }
-
- override void InitYieldBank()
- {
- super.InitYieldBank();
-
- m_YieldBank.ClearAllRegisteredItems();
-
- //fishies
- m_YieldBank.RegisterYieldItem(new YieldItemWalleyePollock(24));
- m_YieldBank.RegisterYieldItem(new YieldItemSteelheadTrout(12));
-
- m_YieldBank.RegisterYieldItem(new YieldItemShrimp(1));
-
- //fishy junk
- m_YieldBank.RegisterYieldItem(new YieldItemJunk(1,"Wellies_Brown"));
- m_YieldBank.RegisterYieldItem(new YieldItemJunk(1,"Wellies_Grey"));
- m_YieldBank.RegisterYieldItem(new YieldItemJunk(1,"Wellies_Green"));
- m_YieldBank.RegisterYieldItem(new YieldItemJunk(1,"Wellies_Black"));
- m_YieldBank.RegisterYieldItem(new YieldItemJunkEmpty(1,"Pot"));
-
- //non-fishies
- m_YieldBank.RegisterYieldItem(new YieldItemDeadRabbit(1));
- m_YieldBank.RegisterYieldItem(new YieldItemDeadFox(1));
- //m_YieldBank.RegisterYieldItem(new YieldItemGenericSmallAnimal(1,"Animal_UrsusArctos",AnimalCatchingConstants.MASK_ENVIRO_FOREST,AnimalCatchingConstants.MASK_METHOD_LANDTRAP_MEATBAIT));
- }
-
- override void SetupWeatherSettings()
- {
- super.SetupWeatherSettings();
-
- m_WeatherDefaultSettings.m_GlobalSuddenChance = 95; // works if the randomization value is bigger than this. we do not want to decrease the clear sky chance
- m_WeatherDefaultSettings.m_ClearWeatherChance = 20;
- m_WeatherDefaultSettings.m_BadWeatherChance = 65;
- m_WeatherDefaultSettings.m_BadWeatherSuddenChance = 15;
- }
-
- override void SetupLiquidTemperatures()
- {
-
- m_LiquidSettings = new WorldDataLiquidSettings();
-
- m_LiquidSettings.m_Temperatures[LIQUID_SALTWATER] = -0.5;
- m_LiquidSettings.m_Temperatures[LIQUID_WATER] = 2.0;
- m_LiquidSettings.m_Temperatures[LIQUID_STILLWATER] = 2.0;
- m_LiquidSettings.m_Temperatures[LIQUID_RIVERWATER] = 2.0;
- m_LiquidSettings.m_Temperatures[LIQUID_FRESHWATER] = 2.0;
- m_LiquidSettings.m_Temperatures[LIQUID_CLEANWATER] = 5.0;
- m_LiquidSettings.m_Temperatures[LIQUID_SNOW] = -5.0;
- m_LiquidSettings.m_Temperatures[LIQUID_HOTWATER] = 90.0;
- }
-
- override bool WeatherOnBeforeChange( EWeatherPhenomenon type, float actual, float change, float time )
- {
- #ifdef WEATHER_DATA_LOGGING
- if ( !dayInit )
- {
- GetGame().GetWorld().GetDate(startYear, startMonth, startDay, startHour, startMinute);
- dayInit = true;
- }
- #endif
-
- float phmnTime = 120;
- float phmnLength = 10;
- float phmnValue = 0;
-
- m_Weather.GetRain().SetLimits(0, 0);//since we decided that it will not rain in sakhal...
-
- m_Weather.GetOvercast().SetLimits(0.07, 1);
- m_Weather.GetSnowfall().SetLimits(0, 1);
- m_Weather.SetSnowfallThresholds( m_WeatherDefaultSettings.m_SnowfallThreshold, 1.0, 60 );
- m_Weather.GetSnowfall().SetForecastChangeLimits(0, 1);
-
- m_Weather.SetStorm( 1.0, m_WeatherDefaultSettings.m_ThundersnowThreshold, 45 );
-
- m_Weather.SetWindMaximumSpeed( 20 );
- m_Weather.GetWindMagnitude().SetForecastChangeLimits( 0, 20 );
-
- m_Weather.GetFog().SetLimits(0,0);
- switch (type)
- {
- //-----------------------------------------------------------------------------------------------------------------------------
- case EWeatherPhenomenon.OVERCAST:
- {
- float windDirection, windMag;
-
- #ifdef WEATHER_DATA_LOGGING
- overcastChangeCount++;
- #endif
- //went something goes wrong choose some default random weather
- phmnValue = Math.RandomFloatInclusive( 0.2, 0.7 );
- phmnTime = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_OvercastMinTime, m_WeatherDefaultSettings.m_OvercastMaxTime );
- phmnLength = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_OvercastMinLength, m_WeatherDefaultSettings.m_OvercastMaxLength );
-
- //----
- //--
- if ( m_LastWeather == WorldDataWeatherConstants.CLEAR_WEATHER )
- {
- m_ClearWeatherChance -= ( m_StepValue * m_SameWeatherCnt); //decrease the chance of the same weather
- }
- if ( m_LastWeather == WorldDataWeatherConstants.CLOUDY_WEATHER )
- {
- m_ClearWeatherChance += ( m_StepValue * m_SameWeatherCnt); //increase the chance of the better weather
- }
-
- if ( m_LastWeather == WorldDataWeatherConstants.BAD_WEATHER )
- {
- m_ClearWeatherChance += m_StepValue; //increase the chance of the better weather slightly
- m_BadWeatherChance += (( m_StepValue * m_SameWeatherCnt ) + m_StepValue ); //decrease the chance of the same weather rapidly
- }
-
- //----
- //calculate next weather
-
- m_Chance = Math.RandomIntInclusive( 0, 100 );
- if ( m_Chance > m_WeatherDefaultSettings.m_GlobalSuddenChance && !m_IsSuddenChange) //checks if previous weather was a sudden change
- {
- #ifdef WEATHER_DATA_LOGGING
- directSuddenChangeCount++;
- #endif
-
- m_IsSuddenChange = true;
- m_ChoosenWeather = WorldDataWeatherConstants.BAD_WEATHER;
- if ( m_LastWeather == WorldDataWeatherConstants.BAD_WEATHER )
- m_SameWeatherCnt ++;
- }
- else if ( m_Chance < m_ClearWeatherChance )
- {
- m_ChoosenWeather = WorldDataWeatherConstants.CLEAR_WEATHER;
- m_IsSuddenChange = false;
-
- if ( m_LastWeather == WorldDataWeatherConstants.CLEAR_WEATHER )
- m_SameWeatherCnt ++;
- }
- else if ( m_Chance > m_BadWeatherChance )
- {
- m_ChoosenWeather = WorldDataWeatherConstants.BAD_WEATHER;
-
- if ( m_LastWeather == WorldDataWeatherConstants.BAD_WEATHER )
- m_SameWeatherCnt ++;
-
- if ( m_IsSuddenChange )
- {
- m_IsSuddenChange = false;
-
- #ifdef WEATHER_DATA_LOGGING
- badWeatherCount++;
- #endif
- }
- else
- {
- if ( Math.RandomIntInclusive( 0, 100 ) < m_WeatherDefaultSettings.m_BadWeatherSuddenChance )
- {
- m_IsSuddenChange = true;
-
- #ifdef WEATHER_DATA_LOGGING
- badWeatherSuddenChangeCount++;
- #endif
- }
- else
- {
- #ifdef WEATHER_DATA_LOGGING
- badWeatherCount++;
- #endif
- }
- }
- }
- else
- {
- m_ChoosenWeather = WorldDataWeatherConstants.CLOUDY_WEATHER;
- m_IsSuddenChange = false;
- if ( m_LastWeather == WorldDataWeatherConstants.CLOUDY_WEATHER )
- m_SameWeatherCnt ++;
- }
- if ( m_ChoosenWeather != m_LastWeather )
- m_SameWeatherCnt = 0;
- m_ClearWeatherChance = m_WeatherDefaultSettings.m_ClearWeatherChance;
- m_BadWeatherChance = m_WeatherDefaultSettings.m_BadWeatherChance;
- //----
- //set choosen weather
- if ( m_ChoosenWeather == WorldDataWeatherConstants.CLEAR_WEATHER )
- {
- m_LastWeather = WorldDataWeatherConstants.CLEAR_WEATHER;
- #ifdef WEATHER_DATA_LOGGING
- clearWeatherCount++;
- #endif
- phmnValue = Math.RandomFloatInclusive( 0.07, 0.3 );
- phmnTime = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_OvercastMinTime, m_WeatherDefaultSettings.m_OvercastMaxTime );
- phmnLength = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_OvercastMinLength, m_WeatherDefaultSettings.m_OvercastMaxLength );
- }
- if ( m_ChoosenWeather == CLOUDY_WEATHER )
- {
- #ifdef WEATHER_DATA_LOGGING
- cloudyWeatherCount++;
- #endif
- m_LastWeather = CLOUDY_WEATHER;
- phmnValue = Math.RandomFloatInclusive( 0.3, 0.6 );
- phmnTime = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_OvercastMinTime, m_WeatherDefaultSettings.m_OvercastMaxTime );
- phmnLength = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_OvercastMinLength, m_WeatherDefaultSettings.m_OvercastMaxLength );
- }
-
- if ( m_ChoosenWeather == WorldDataWeatherConstants.BAD_WEATHER )
- {
- m_LastWeather = WorldDataWeatherConstants.BAD_WEATHER;
- phmnValue = Math.RandomFloatInclusive( 0.6, 1.0 );
- phmnTime = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_OvercastMinTime, m_WeatherDefaultSettings.m_OvercastMaxTime );
- phmnLength = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_OvercastMinLength, m_WeatherDefaultSettings.m_OvercastMaxLength );
-
- if ( m_IsSuddenChange )
- {
- phmnTime *= SUDDENCHANGE_TIME_MULTIPLIER;
- phmnLength *= SUDDENCHANGE_LENGTH_MULTIPLIER;
- }
-
- #ifdef WEATHER_DATA_LOGGING
- if ( phmnValue > m_WeatherDefaultSettings.m_ThundersnowThreshold )
- {
- if ( m_IsSuddenChange )
- {
- suddenThundersnowCount++;
- if ( m_Chance < m_WeatherDefaultSettings.m_GlobalSuddenChance )
- {
- directSuddenChangeCount--;
- }
- else
- {
- badWeatherSuddenChangeCount--;
- }
- }
- else
- {
- thundersnowCount++;
- badWeatherCount--;
- }
- }
- #endif
-
- }
- m_Weather.GetOvercast().Set( phmnValue, phmnTime, phmnLength );
-
- //we want to control wind with the overcast calculation and change with it.
- CalculateWind( m_ChoosenWeather, m_IsSuddenChange, windMag, windDirection );
- m_Weather.GetWindMagnitude().Set( windMag, phmnTime * WIND_MAGNITUDE_TIME_MULTIPLIER , phmnTime - (phmnTime * WIND_MAGNITUDE_TIME_MULTIPLIER) + phmnLength + 1000 );
- m_Weather.GetWindDirection().Set( windDirection, phmnTime * WIND_DIRECTION_TIME_MULTIPLIER , phmnTime - (phmnTime * WIND_DIRECTION_TIME_MULTIPLIER) + phmnLength + 1000 );
-
- if( m_IsSuddenChange )
- {
- m_Weather.GetSnowfall().Set(Math.RandomFloatInclusive( 0.4, 0.8 ), phmnTime, 0); //forces to snow in the suddenchange.
- }
-
- Debug.WeatherLog(string.Format("Sakhal::Weather::Overcast:: (%1) overcast: %2", g_Game.GetDayTime(), actual));
- Debug.WeatherLog(string.Format("Sakhal::Weather::Overcast::Snow:: (%1) %2", g_Game.GetDayTime(), m_Weather.GetRain().GetActual()));
-
- #ifdef WEATHER_DATA_LOGGING
- int testYear = 0;
- int testMonth = 0;
- int testDay = 0;
- int testHour = 0;
- int testMinute = 0;
- GetGame().GetWorld().GetDate(testYear, testMonth, testDay, testHour, testMinute);
-
- if ( testDay - startDay > currentDay && testHour - startHour >= 0 && testMinute - startMinute >= 0 )
- {
- FileHandle file = OpenFile("$profile:OvercastCountsSakhal" + (currentDay + 1) + ".log", FileMode.WRITE);
- FPrintln(file, "================================================================");
- FPrintln(file," ================== Day " + (currentDay + 1) + " ================== ");
- FPrintln(file, "================================================================");
- FPrintln(file, "Overcast Change Count: " + overcastChangeCount);
- FPrintln(file, "Bad Weather Change Count: " + badWeatherCount);
- FPrintln(file, "Bad Weather Sudden Change Count: " + badWeatherSuddenChangeCount);
- FPrintln(file, "Global Sudden Change Count: " + directSuddenChangeCount);
- FPrintln(file, "Thunder Snow Count: " + thundersnowCount);
- FPrintln(file, "Sudden Thundersnow Count: " + suddenThundersnowCount);
- FPrintln(file, "Cloudy Weather Count: " + cloudyWeatherCount);
- FPrintln(file, "Clear Weather Count: " + clearWeatherCount);
-
- currentDay++;
- CloseFile(file);
- if ( currentDay == daysToRun )
- {
- g_Game.RequestExit(IDC_MAIN_QUIT);
- }
-
- overcastChangeCount = 0;
- directSuddenChangeCount = 0;
- badWeatherSuddenChangeCount = 0;
- thundersnowCount = 0;
- suddenThundersnowCount = 0;
- badWeatherCount = 0;
- cloudyWeatherCount = 0;
- clearWeatherCount = 0;
- }
- #endif
-
-
- return true;
- }
- //-----------------------------------------------------------------------------------------------------------------------------
- case EWeatherPhenomenon.SNOWFALL:
- {
- float actualOvercast = m_Weather.GetOvercast().GetActual();
-
- m_Chance = Math.RandomIntInclusive( 0, 100 );
- phmnValue = 0.2;
- phmnTime = 90;
- phmnLength = 20;
-
- if ( actualOvercast <= m_WeatherDefaultSettings.m_SnowfallThreshold )
- {
- m_Weather.GetSnowfall().Set( 0.0, m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMin );
- CalculateVolFog(0.0, m_Weather.GetWindMagnitude().GetForecast(), phmnTime);
-
- Debug.WeatherLog(string.Format("Sakhal::Weather::Snow::ForceEnd:: (%1) %2 -> 0", g_Game.GetDayTime(), actual));
- return true;
- }
-
- if ( actualOvercast > m_WeatherDefaultSettings.m_ThundersnowThreshold )
- {
- phmnValue = Math.RandomFloatInclusive( 0.8, 1.0 );
- phmnTime = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMax ) * 0.5;
- phmnLength = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallLengthMin, m_WeatherDefaultSettings.m_SnowfallLengthMax ) * 1.2;
- m_Weather.GetSnowfall().Set( phmnValue, phmnTime, phmnLength );
-
- CalculateVolFog(phmnValue, m_Weather.GetWindMagnitude().GetForecast(), phmnTime);
- Debug.WeatherLog(string.Format("Sakhal::Weather::Snow::ForceStorm:: (%1) %2 -> %3", g_Game.GetDayTime(), actual, phmnValue));
- return true;
- }
- if ( actualOvercast == m_Weather.GetOvercast().GetForecast() && m_Weather.GetSnowfall().GetActual() >= 0.8 && m_Weather.GetWindSpeed() >= 10 ) //if overcast is not changing and there was high snowfall
- {
- phmnValue = Math.RandomFloatInclusive( 0.2, 0.4 );
- phmnTime = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMax ) * 0.5;
- phmnLength = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallLengthMin, m_WeatherDefaultSettings.m_SnowfallLengthMax ) * 1.2;
-
- m_Weather.GetWindMagnitude().Set(m_Weather.GetWindMagnitude().GetActual() * 0.2, phmnTime , phmnLength); // next change will be happen in phenomenon change and reset the wind speed
- m_Weather.GetSnowfall().Set( phmnValue, phmnTime, phmnLength );
-
- CalculateVolFog(phmnValue, m_Weather.GetWindMagnitude().GetForecast(), phmnTime);
- Debug.WeatherLog(string.Format("Sakhal::Weather::Snow::ForceStorm:: (%1) %2 -> %3", g_Game.GetDayTime(), actual, phmnValue));
- return true;
- }
- if ( actualOvercast < 0.6 ) //snowfall treshold to 0.6 overcast, snowfall in this bracket does not increase wetness
- {
- if ( m_Chance < 40 )
- {
- phmnValue = Math.RandomFloatInclusive( 0.02, 0.4 );
- phmnTime = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMax );
- phmnLength = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallLengthMin, m_WeatherDefaultSettings.m_SnowfallLengthMax ) * 1.2;
- }
- else //also have the chance to not have snow at all
- {
- phmnValue = 0;
- phmnTime = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMax );
- phmnLength = Math.RandomIntInclusive(m_WeatherDefaultSettings.m_SnowfallLengthMin, m_WeatherDefaultSettings.m_SnowfallLengthMax) * 2;
- }
- }
- else if ( actualOvercast < 0.75 ) //0.6 to 0.75 overcast
- {
- if ( m_Chance < 30 )
- {
- phmnValue = Math.RandomFloatInclusive( 0.5, 0.8 );
- phmnTime = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMax );
- phmnLength = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallLengthMin, m_WeatherDefaultSettings.m_SnowfallLengthMax );
- }
- else if ( m_Chance < 60 )
- {
- phmnValue = Math.RandomFloat( 0.3, 0.5 ); //0.5 snowfall starts to increase wetness
- phmnTime = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMax );
- phmnLength = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallLengthMin, m_WeatherDefaultSettings.m_SnowfallLengthMax );
- }
- else if ( m_Chance < 75 )
- {
- phmnValue = Math.RandomFloatInclusive( 0.02, 0.3 );
- phmnTime = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMax );
- phmnLength = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallLengthMin, m_WeatherDefaultSettings.m_SnowfallLengthMax );
- }
- else //also have the chance to not have snow at all
- {
- if ( m_IsSuddenChange )
- {
- phmnValue = Math.RandomFloat( 0.3, 0.5 ); //0.5 snowfall starts to increase wetness
- phmnTime = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMax );
- phmnLength = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallLengthMin, m_WeatherDefaultSettings.m_SnowfallLengthMax );
- }
- else
- {
- phmnValue = 0;
- phmnTime = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMax );
- phmnLength = Math.RandomIntInclusive(m_WeatherDefaultSettings.m_SnowfallLengthMin, m_WeatherDefaultSettings.m_SnowfallLengthMax) * 1.2;
- }
- }
- }
- else //0.75 to thunderstorm threshold overcast
- {
- if ( m_Chance < 35 )
- {
- phmnValue = Math.RandomFloatInclusive( 0.7, 1.0 );
- phmnTime = Math.RandomInt( m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMax );
- phmnLength = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallLengthMin, m_WeatherDefaultSettings.m_SnowfallLengthMax );
- }
- else if ( m_Chance < 75 )
- {
- phmnValue = Math.RandomFloatInclusive( 0.5, 0.7 );
- phmnTime = Math.RandomInt( m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMax );
- phmnLength = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallLengthMin, m_WeatherDefaultSettings.m_SnowfallLengthMax ) ;
- }
- else if ( m_Chance < 85 )
- {
- phmnValue = Math.RandomFloat( 0.2, 0.5 ); //0.5 snowfall starts to increase wetness
- phmnTime = Math.RandomInt( m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMax );
- phmnLength = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallLengthMin, m_WeatherDefaultSettings.m_SnowfallLengthMax );
- }
- else
- {
- if ( m_IsSuddenChange )
- {
- phmnValue = Math.RandomFloat( 0.5, 0.7 ); //0.5 snowfall starts to increase wetness
- phmnTime = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMax );
- phmnLength = Math.RandomIntInclusive( m_WeatherDefaultSettings.m_SnowfallLengthMin, m_WeatherDefaultSettings.m_SnowfallLengthMax );
- }
- else
- {
- phmnValue = Math.RandomFloat( 0.02, 0.1 );
- phmnTime = Math.RandomInt( m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMax );
- phmnLength = Math.RandomIntInclusive(m_WeatherDefaultSettings.m_SnowfallLengthMin, m_WeatherDefaultSettings.m_SnowfallLengthMax) * 1.2;
- }
- }
- }
-
- m_Weather.GetSnowfall().Set( phmnValue, phmnTime, phmnLength );
- CalculateVolFog(phmnValue, m_Weather.GetWindMagnitude().GetForecast(), phmnTime);
- Debug.WeatherLog(string.Format("Sakhal::Weather::Snow:: (%1) %2", g_Game.GetDayTime(), actual));
- return true;
- }
- //-----------------------------------------------------------------------------------------------------------------------------
- case EWeatherPhenomenon.FOG:
- {
- m_Weather.GetFog().Set(0,0,100000);
-
- return true;
-
- /*float fogMin = 0.0;
- float fogMax = 0.15;
- float fogTime = 1800.0;
-
- if ( m_Weather.GetWindSpeed() >= 10 )
- {
- m_Weather.GetFog().Set( 0, 300, 0);
- Debug.WeatherLog(string.Format("Sakhal::Weather::Fog:: (%1) %2", g_Game.GetDayTime(), actual));
-
- return true;
- }
-
- if ( m_Weather.GetOvercast().GetActual() < 0.3 )
- {
- fogMin = 0.0;
- fogMax = 0.1;
- fogTime = 600.0;
- }
- else if ( m_Weather.GetOvercast().GetActual() > 0.6 )
- {
- fogMin = 0.1;
- fogMax = 0.3;
- fogTime = 600.0;
- }
- else
- {
- fogMin = 0.0;
- fogMax = 0.15;
- fogTime = 600.0;
- }
-
- m_Weather.GetFog().Set( Math.RandomFloatInclusive( fogMin, fogMax ), fogTime, 0);
- Debug.WeatherLog(string.Format("Sakhal::Weather::Fog:: (%1) %2", g_Game.GetDayTime(), actual));
- return true;*/
- }
- //-----------------------------------------------------------------------------------------------------------------------------
- case EWeatherPhenomenon.WIND_MAGNITUDE:
- {
- phmnTime = Math.RandomInt( m_WeatherDefaultSettings.m_SnowfallTimeMin, m_WeatherDefaultSettings.m_SnowfallTimeMax );
- m_Weather.GetWindMagnitude().Set(m_Weather.GetWindMagnitude().GetActual() / 0.2, phmnTime , m_WeatherDefaultSettings.m_OvercastMaxTime + 1000); // next change will be happen with the overcast or snowfall change
- CalculateVolFog(m_Weather.GetSnowfall().GetForecast(), m_Weather.GetWindMagnitude().GetForecast(), phmnTime);
-
- return true;
- }
- }
- return false;
- }
-
- protected override void CalculateWind(int newWeather, bool suddenChange, out float magnitude, out float direction)
- {
- magnitude = 5;
- direction = 0;
-
- float windChance = Math.RandomIntInclusive( 0, 100 );
-
- if ( newWeather == WorldDataWeatherConstants.CLEAR_WEATHER )
- {
- if ( windChance < 15 )
- {
- magnitude = Math.RandomFloatInclusive( 2 , 4 );
- direction = Math.RandomFloatInclusive( -0.35 , 0.35);
- }
- else if ( windChance < 90 )
- {
- magnitude = Math.RandomFloatInclusive( 3 , 6 );
- direction = Math.RandomFloatInclusive( 0 , 2.2);
- }
- else
- {
- magnitude = Math.RandomFloatInclusive( 8 , 15 );
- direction = Math.RandomFloatInclusive( -3.0 , -2.25);
- }
- }
- else if ( newWeather == WorldDataWeatherConstants.CLOUDY_WEATHER )
- {
- if ( windChance < 45 )
- {
- magnitude = Math.RandomFloatInclusive( 5 , 10 );
- direction = Math.RandomFloatInclusive( 1.0 , 1.25);
- }
- else if ( windChance < 90 )
- {
- magnitude = Math.RandomFloatInclusive( 8 , 14 );
- direction = Math.RandomFloatInclusive( -1.8, -1.4);
- }
- else
- {
- magnitude = Math.RandomFloatInclusive( 2 , 4 );
- direction = Math.RandomFloatInclusive( -1.0 , -0.4);
- }
- }
- else
- {
- if ( suddenChange || m_Weather.GetOvercast().GetForecast() > 0.85 )
- {
- magnitude = Math.RandomFloatInclusive( 18 , 20 );
- direction = Math.RandomFloatInclusive( 2.25 , 3.14);
- }
- else if ( windChance < 45 )
- {
- magnitude = Math.RandomFloatInclusive( 6 , 12 );
- direction = Math.RandomFloatInclusive( -1.8 , -1.4);
- }
- else if ( windChance < 90 )
- {
- magnitude = Math.RandomFloatInclusive( 8 , 20 );
- direction = Math.RandomFloatInclusive( 1.6 , 2.0);
- }
- else
- {
- magnitude = Math.RandomFloatInclusive( 4 , 10 );
- direction = Math.RandomFloatInclusive( 1.5, 1.75 );
- }
- }
-
- CalculateVolFog(m_Weather.GetSnowfall().GetForecast(), magnitude, 60);
- }
-
- protected override void CalculateVolFog(float lerpValue, float windMagnitude, float changeTime)// in sakhal volfog supports snowfall effect
- {
- float maxVolFogDistanceDensity = Math.Lerp( 0, 0.35, Easing.EaseInQuart(lerpValue) );
- float minVolFogDistanceDensity = Math.Lerp(0.001, 0.01, m_Weather.GetOvercast().GetActual());
-
- if (minVolFogDistanceDensity > maxVolFogDistanceDensity)
- maxVolFogDistanceDensity = minVolFogDistanceDensity;
-
- float volFogDistanceDensity = Math.Lerp( minVolFogDistanceDensity, maxVolFogDistanceDensity, windMagnitude/m_Weather.GetWindMaximumSpeed() );
- m_Weather.SetDynVolFogDistanceDensity(volFogDistanceDensity, changeTime);
- }
-
- override float GetAgentSpawnChance(eAgents agent)
- {
- if (agent == eAgents.CHOLERA)
- return SPAWN_CHANCE_CHOLERA;
-
- return 0;
- }
-
- override float GetColdAreaToolDamageModifier()
- {
- return COLD_AREA_TOOL_DMG_MODIF;
- }
-
- bool LogWeatherData() //called from mission file to check if the logging should start
- {
- #ifdef WEATHER_DATA_LOGGING
- return true;
- #endif
- return false;
- }
-
- //! DEPRECATED (see WorldDataWeatherConstants)
- const int CLEAR_WEATHER = 1;
- const int CLOUDY_WEATHER = 2;
- const int BAD_WEATHER = 3;
- }
|