diff --git a/Source/Editor/States/PlayingState.cs b/Source/Editor/States/PlayingState.cs index 50cde2212..51dfd3677 100644 --- a/Source/Editor/States/PlayingState.cs +++ b/Source/Editor/States/PlayingState.cs @@ -163,7 +163,7 @@ namespace FlaxEditor.States IsPlayModeStarting = false; Profiler.EndEvent(); - Time.Synchronize(); + Time.Synchronize(true); } private void SetupEditorEnvOptions() @@ -213,7 +213,7 @@ namespace FlaxEditor.States IsPlayModeEnding = false; Profiler.EndEvent(); - Time.Synchronize(); + Time.Synchronize(true); } } } diff --git a/Source/Engine/Engine/Engine.cpp b/Source/Engine/Engine/Engine.cpp index 3d709499b..23768f6b0 100644 --- a/Source/Engine/Engine/Engine.cpp +++ b/Source/Engine/Engine/Engine.cpp @@ -157,7 +157,7 @@ int32 Engine::OnInit(const Char* cmdLine) Application::BeforeRun(); LOG_FLOOR(); LOG_FLUSH(); - Time::Synchronize(); + Time::Synchronize(true); EngineImpl::IsReady = true; PROFILE_MEM_END(); diff --git a/Source/Engine/Engine/Time.cpp b/Source/Engine/Engine/Time.cpp index 7d268cf73..4ca9f7ecd 100644 --- a/Source/Engine/Engine/Time.cpp +++ b/Source/Engine/Engine/Time.cpp @@ -75,10 +75,11 @@ void TimeSettings::Apply() #endif } -void Time::TickData::Synchronize(float targetFps, double currentTime) +void Time::TickData::Synchronize(float targetFps, double currentTime, bool resetTotalTime) { OnReset(targetFps, currentTime); - Time = UnscaledTime = TimeSpan::Zero(); + if (resetTotalTime) + Time = UnscaledTime = TimeSpan::Zero(); NextBegin = targetFps > ZeroTolerance ? LastBegin + (1.0f / targetFps) : 0.0; } @@ -258,13 +259,13 @@ void Time::SetFixedDeltaTime(bool enable, float value) FixedDeltaTimeValue = value; } -void Time::Synchronize() +void Time::Synchronize(bool resetTotalTime) { // Initialize tick data (based on a time settings) const double time = Platform::GetTimeSeconds(); - Update.Synchronize(UpdateFPS, time); - Physics.Synchronize(PhysicsFPS, time); - Draw.Synchronize(DrawFPS, time); + Update.Synchronize(UpdateFPS, time, resetTotalTime); + Physics.Synchronize(PhysicsFPS, time, resetTotalTime); + Draw.Synchronize(DrawFPS, time, resetTotalTime); } bool Time::OnBeginUpdate(double time) diff --git a/Source/Engine/Engine/Time.h b/Source/Engine/Engine/Time.h index bda7a7537..ee6802f67 100644 --- a/Source/Engine/Engine/Time.h +++ b/Source/Engine/Engine/Time.h @@ -75,7 +75,7 @@ public: TimeSpan UnscaledTime; public: - virtual void Synchronize(float targetFps, double currentTime); + virtual void Synchronize(float targetFps, double currentTime, bool resetTotalTime); virtual void OnReset(float targetFps, double currentTime); virtual bool OnTickBegin(double time, float targetFps, float maxDeltaTime); virtual void OnTickEnd(); @@ -220,7 +220,8 @@ public: /// /// Synchronizes update, fixed update and draw. Resets any pending deltas for fresh ticking in sync. /// - API_FUNCTION() static void Synchronize(); + /// True if reset total time, otherwise only delta time and ticking is reset. + API_FUNCTION() static void Synchronize(bool resetTotalTime = false); private: // Methods used by the Engine class