diff --git a/src/WeatherManager.cpp b/src/WeatherManager.cpp index ab5d54d7af..8e97e26713 100644 --- a/src/WeatherManager.cpp +++ b/src/WeatherManager.cpp @@ -12,9 +12,16 @@ WeatherManager::CurrentWeathers WeatherManager::GetCurrentWeathers() } result.currentWeather = sky->currentWeather; - result.lastWeather = sky->lastWeather; result.lerpFactor = sky->currentWeatherPct; + // Update cache: store current lastWeather if it exists, otherwise keep the cached one + if (sky->lastWeather) { + cachedLastWeather = sky->lastWeather; + } + + // Use cached last weather if sky->lastWeather is null + result.lastWeather = sky->lastWeather ? sky->lastWeather : cachedLastWeather; + return result; } @@ -260,5 +267,6 @@ void WeatherManager::ClearCache() { perWeatherSettingsCache.clear(); lastKnownWeather = CurrentWeathers(); + cachedLastWeather = nullptr; logger::info("Cleared WeatherManager cache"); } diff --git a/src/WeatherManager.h b/src/WeatherManager.h index 3b9fbe8f9c..66dc042d5b 100644 --- a/src/WeatherManager.h +++ b/src/WeatherManager.h @@ -57,4 +57,7 @@ class WeatherManager // Track last known weather state to detect changes CurrentWeathers lastKnownWeather; + + // Cached last weather - sky->lastWeather can be cleared before currentWeatherPct reaches 1.0 + RE::TESWeather* cachedLastWeather = nullptr; };