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