Fix for watering every hour and seed bed texture fixes

This commit is contained in:
2026-09-18 21:27:30 +02:00
parent b0908e2e65
commit 62c8e8e292
6 changed files with 43 additions and 17 deletions

View File

@@ -121,14 +121,7 @@ void ATimeOfDayManager::Tick(float DeltaTime)
QueuedWeatherPreset = GetWeatherDistributionValue();
K2_WeatherFadeStart(QueuedWeatherPreset->bIsRain);
if (QueuedWeatherPreset->bIsRain)
{
// Rain refills the soil of every plant, the game state also reaches the beds that are streamed out
if (AEleriGameState* GameState = AEleriGameState::Get(this))
{
GameState->WaterAllSeedBeds();
}
}
WaterSeedBedsIfRaining();
}
else
{
@@ -393,6 +386,28 @@ void ATimeOfDayManager::CheckLateHours()
}
}
bool ATimeOfDayManager::IsRaining()
{
// While a weather change is blending, the queue is the weather the world is heading into, which is the same
// preset the rain toggle is already driven with, so rain reads as active from the first blended frame on
const UWeatherPresetDataAsset* ActivePreset = QueuedWeatherPreset ? QueuedWeatherPreset : CurrentWeatherPreset;
return IsValid(ActivePreset) && ActivePreset->bIsRain;
}
void ATimeOfDayManager::WaterSeedBedsIfRaining()
{
if (!IsRaining())
{
return;
}
// The game state owns the cache, so the beds that are streamed out are watered along with the loaded ones
if (AEleriGameState* GameState = AEleriGameState::Get(this))
{
GameState->WaterAllSeedBeds();
}
}
void ATimeOfDayManager::GoToSleep()
{
if (currentHours == 0 || currentHours == 1 || currentHours == 2)
@@ -451,6 +466,11 @@ void ATimeOfDayManager::AddMinutes(float minutes)
for (int32 HourIndex = AbsoluteHoursBefore; HourIndex < AbsoluteHoursAfter; ++HourIndex)
{
OnHourPassed.Broadcast();
// Sitting behind the broadcast makes the order deterministic: the beds have already drained a moisture
// hour and checked their plants for this hour, rain now refills the soil of every planted seed instead
// of only doing it once when the rain started
WaterSeedBedsIfRaining();
}
NextWeatherChangeMinutes -= minutes;

View File

@@ -335,8 +335,11 @@ public:
UFUNCTION(BlueprintCallable, Category = "Time of day")
void GoToSleep();
/** True while the weather the world is in, or is blending into, is a rain preset.
* The Raining property this used to read was never written anywhere, so the weather preset is the only
* live source of truth and it matches the bIsRain flag the rain toggle is driven with. */
UFUNCTION(BlueprintCallable, Category = "Time of day")
bool IsRaining() { return Raining; }
bool IsRaining();
UFUNCTION(BlueprintCallable, Category = "Time of day")
void ToggleTimeActive(bool bNewActive);
@@ -365,6 +368,9 @@ protected:
void SetSkylightIntensity(const float &_rotator);
void CheckLateHours();
/** Refills the soil of every planted seed of every seed bed for the hour that just passed in the rain. */
void WaterSeedBedsIfRaining();
// Called every frame
virtual void Tick(float DeltaTime) override;