From 3ee6bffef7147198b1f90ec35b40b27ae4247e92 Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Sat, 19 Mar 2022 23:27:25 +0200 Subject: [PATCH] Always run fixed update ticks at fixed deltatime The random variance in fixed updates makes it impossible to do anything deterministic during physics ticks. --- Source/Engine/Engine/Time.cpp | 19 +++---------------- Source/Engine/Engine/Time.h | 6 ------ 2 files changed, 3 insertions(+), 22 deletions(-) diff --git a/Source/Engine/Engine/Time.cpp b/Source/Engine/Engine/Time.cpp index 43ac4f9b5..2705a8965 100644 --- a/Source/Engine/Engine/Time.cpp +++ b/Source/Engine/Engine/Time.cpp @@ -94,7 +94,7 @@ bool Time::TickData::OnTickBegin(double time, float targetFps, float maxDeltaTim if (targetFps > ZeroTolerance) { - int skip = (int)(1 + (time - NextBegin) * targetFps); + const int skip = (int)(1 + (time - NextBegin) * targetFps); NextBegin += (1.0 / targetFps) * skip; } } @@ -132,14 +132,12 @@ bool Time::FixedStepTickData::OnTickBegin(double time, float targetFps, float ma if (FixedDeltaTimeEnable) { deltaTime = (double)FixedDeltaTimeValue; - minDeltaTime = deltaTime; } else { if (time < NextBegin) return false; - minDeltaTime = targetFps > ZeroTolerance ? 1.0 / targetFps : 0.0; deltaTime = Math::Max((time - LastBegin), 0.0); if (deltaTime > maxDeltaTime) { @@ -149,21 +147,10 @@ bool Time::FixedStepTickData::OnTickBegin(double time, float targetFps, float ma if (targetFps > ZeroTolerance) { - int skip = (int)(1 + (time - NextBegin) * targetFps); - NextBegin += (1.0 / targetFps) * skip; + deltaTime = 1.0 / targetFps; + NextBegin += 1.0 / targetFps; } } - Samples.Add(deltaTime); - - // Check if last few ticks were not taking too long so it's running slowly - const bool isRunningSlowly = Samples.Average() > 1.5 * minDeltaTime; - if (!isRunningSlowly) - { - // Make steps fixed size - const double diff = deltaTime - minDeltaTime; - time -= diff; - deltaTime = minDeltaTime; - } // Update data Advance(time, deltaTime); diff --git a/Source/Engine/Engine/Time.h b/Source/Engine/Engine/Time.h index ff81fb93e..9c03fe026 100644 --- a/Source/Engine/Engine/Time.h +++ b/Source/Engine/Engine/Time.h @@ -5,7 +5,6 @@ #include "Engine/Core/Types/TimeSpan.h" #include "Engine/Core/Types/DateTime.h" #include "Engine/Scripting/ScriptingType.h" -#include "Engine/Core/Collections/SamplesBuffer.h" /// /// Game ticking and timing system. @@ -89,12 +88,7 @@ public: class FixedStepTickData : public TickData { public: - /// - /// The last few ticks delta times. Used to check if can use fixed steps or whenever is running slowly so should use normal stepping. - /// - SamplesBuffer Samples; - public: // [TickData] bool OnTickBegin(double time, float targetFps, float maxDeltaTime) override; };