Add cancelling to WeatherChanging event.
This commit is contained in:
parent
5e427ee825
commit
1d67345989
@ -307,25 +307,52 @@ void cWorld::CastThunderbolt (int a_BlockX, int a_BlockY, int a_BlockZ)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int cWorld::GetDefaultWeatherInterval(eWeather a_Weather)
|
||||||
|
{
|
||||||
|
switch (a_Weather)
|
||||||
|
{
|
||||||
|
case eWeather_Sunny:
|
||||||
|
{
|
||||||
|
return 14400 + (m_TickRand.randInt() % 4800); // 12 - 16 minutes
|
||||||
|
}
|
||||||
|
case eWeather_Rain:
|
||||||
|
{
|
||||||
|
return 9600 + (m_TickRand.randInt() % 7200); // 8 - 14 minutes
|
||||||
|
}
|
||||||
|
case eWeather_ThunderStorm:
|
||||||
|
{
|
||||||
|
return 2400 + (m_TickRand.randInt() % 4800); // 2 - 6 minutes
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
LOGWARNING("Missing default weather interval for weather %d.", a_Weather);
|
||||||
|
return 1200;
|
||||||
|
}
|
||||||
|
} // switch (Weather)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cWorld::SetWeather(eWeather a_NewWeather)
|
void cWorld::SetWeather(eWeather a_NewWeather)
|
||||||
{
|
{
|
||||||
// Do the plugins agree? Do they want a different weather?
|
// Do the plugins agree? Do they want a different weather?
|
||||||
cRoot::Get()->GetPluginManager()->CallHookWeatherChanging(*this, a_NewWeather);
|
if (cRoot::Get()->GetPluginManager()->CallHookWeatherChanging(*this, a_NewWeather))
|
||||||
|
{
|
||||||
|
m_WeatherInterval = GetDefaultWeatherInterval(m_Weather);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Set new period for the selected weather:
|
// Set new period for the selected weather:
|
||||||
switch (a_NewWeather)
|
m_WeatherInterval = GetDefaultWeatherInterval(a_NewWeather);
|
||||||
|
|
||||||
|
// The weather can't be found:
|
||||||
|
if (m_WeatherInterval == 1200)
|
||||||
{
|
{
|
||||||
case eWeather_Sunny: m_WeatherInterval = 14400 + (m_TickRand.randInt() % 4800); break; // 12 - 16 minutes
|
return;
|
||||||
case eWeather_Rain: m_WeatherInterval = 9600 + (m_TickRand.randInt() % 7200); break; // 8 - 14 minutes
|
|
||||||
case eWeather_ThunderStorm: m_WeatherInterval = 2400 + (m_TickRand.randInt() % 4800); break; // 2 - 6 minutes
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
LOGWARNING("Requested unknown weather %d, setting sunny for a minute instead.", a_NewWeather);
|
|
||||||
a_NewWeather = eWeather_Sunny;
|
|
||||||
m_WeatherInterval = 1200;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
} // switch (NewWeather)
|
|
||||||
m_Weather = a_NewWeather;
|
m_Weather = a_NewWeather;
|
||||||
BroadcastWeather(m_Weather);
|
BroadcastWeather(m_Weather);
|
||||||
|
|
||||||
|
@ -139,6 +139,9 @@ public:
|
|||||||
BroadcastTimeUpdate();
|
BroadcastTimeUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns the default weather interval for the specific weather type */
|
||||||
|
int GetDefaultWeatherInterval(eWeather a_Weather);
|
||||||
|
|
||||||
/** Returns the current game mode. Partly OBSOLETE, you should use IsGameModeXXX() functions wherever applicable */
|
/** Returns the current game mode. Partly OBSOLETE, you should use IsGameModeXXX() functions wherever applicable */
|
||||||
eGameMode GetGameMode(void) const { return m_GameMode; }
|
eGameMode GetGameMode(void) const { return m_GameMode; }
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user