Use level time for volume timestamps, as using GlobalCounter may be inconsistent

This commit is contained in:
Lwmte 2024-12-19 22:34:02 +01:00
parent 625131fbb7
commit 64c1777023

View file

@ -168,7 +168,7 @@ namespace TEN::Control::Volumes
if (candidate.Status == VolumeStateStatus::Leaving)
{
if ((GlobalCounter - candidate.Timestamp) > VOLUME_BUSY_TIMEOUT)
if ((SaveGame::Statistics.Level.TimeTaken - candidate.Timestamp) > VOLUME_BUSY_TIMEOUT)
candidate.Status = VolumeStateStatus::Outside;
}
else if (candidate.Status != VolumeStateStatus::Outside)
@ -191,7 +191,7 @@ namespace TEN::Control::Volumes
{
VolumeStateStatus::Entering,
activator,
GlobalCounter
SaveGame::Statistics.Level.TimeTaken
});
HandleEvent(set.Events[(int)EventType::Enter], activator);
@ -199,7 +199,7 @@ namespace TEN::Control::Volumes
else
{
entryPtr->Status = VolumeStateStatus::Inside;
entryPtr->Timestamp = GlobalCounter;
entryPtr->Timestamp = SaveGame::Statistics.Level.TimeTaken;
HandleEvent(set.Events[(int)EventType::Inside], activator);
}
@ -209,10 +209,10 @@ namespace TEN::Control::Volumes
// Only fire leave event when a certain timeout has passed.
// This helps to filter out borderline cases when moving around volumes.
if ((GlobalCounter - entryPtr->Timestamp) > VOLUME_LEAVE_TIMEOUT)
if ((SaveGame::Statistics.Level.TimeTaken - entryPtr->Timestamp) > VOLUME_LEAVE_TIMEOUT)
{
entryPtr->Status = VolumeStateStatus::Leaving;
entryPtr->Timestamp = GlobalCounter;
entryPtr->Timestamp = SaveGame::Statistics.Level.TimeTaken;
HandleEvent(set.Events[(int)EventType::Leave], activator);
}