1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-22 22:34:33 +01:00

Fix snow transitions using rain animations

This commit is contained in:
Aaron van Geffen
2025-03-01 16:10:06 +01:00
parent 23e6c26c2b
commit ac06d99408
3 changed files with 27 additions and 19 deletions

View File

@@ -53,27 +53,28 @@ const DrawWeatherFunc DrawSnowFunctions[] = {
*/
void DrawWeather(DrawPixelInfo& dpi, IWeatherDrawer* weatherDrawer)
{
if (Config::Get().general.RenderWeatherEffects)
if (!Config::Get().general.RenderWeatherEffects)
return;
uint32_t viewFlags = 0;
const auto* viewport = WindowGetViewport(WindowGetMain());
if (viewport != nullptr)
viewFlags = viewport->flags;
auto weatherLevel = GetGameState().WeatherCurrent.level;
if (weatherLevel == WeatherLevel::None || gTrackDesignSaveMode || (viewFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES))
return;
// Get weather draw function and draw weather
auto drawFunc = DrawRainFunctions[EnumValue(weatherLevel)];
if (ClimateIsSnowing() || ClimateTransitioningToSnow())
{
uint32_t viewFlags = 0;
const auto* viewport = WindowGetViewport(WindowGetMain());
if (viewport != nullptr)
viewFlags = viewport->flags;
// Get weather draw function and draw weather
auto weatherLevel = GetGameState().WeatherCurrent.level;
if (weatherLevel != WeatherLevel::None && !gTrackDesignSaveMode && !(viewFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES))
{
auto drawFunc = DrawRainFunctions[EnumValue(weatherLevel)];
if (ClimateIsSnowing())
{
drawFunc = DrawSnowFunctions[EnumValue(weatherLevel)];
}
auto uiContext = GetContext()->GetUiContext();
uiContext->DrawWeatherAnimation(weatherDrawer, dpi, drawFunc);
}
drawFunc = DrawSnowFunctions[EnumValue(weatherLevel)];
}
auto uiContext = GetContext()->GetUiContext();
uiContext->DrawWeatherAnimation(weatherDrawer, dpi, drawFunc);
}
/**

View File

@@ -256,6 +256,12 @@ bool ClimateIsSnowing()
return weather == WeatherType::Snow || weather == WeatherType::HeavySnow || weather == WeatherType::Blizzard;
}
bool ClimateTransitioningToSnow()
{
auto& weather = GetGameState().WeatherNext.weatherType;
return weather == WeatherType::Snow || weather == WeatherType::HeavySnow || weather == WeatherType::Blizzard;
}
bool ClimateIsSnowingHeavily()
{
auto& weather = GetGameState().WeatherCurrent.weatherType;

View File

@@ -88,6 +88,7 @@ void ClimateForceWeather(WeatherType weather);
enum class FilterPaletteID : int32_t;
bool ClimateIsRaining();
bool ClimateTransitioningToSnow();
bool ClimateIsSnowing();
bool ClimateIsSnowingHeavily();
bool WeatherIsDry(WeatherType);