From de7c6483e0236a7a15bd4fad97c079d17a6ecccc Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Thu, 11 May 2023 21:09:33 +0300 Subject: [PATCH] Add LateFixedUpdate event for C# scripts --- Source/Engine/Level/Scene/SceneTicking.cpp | 19 +++++++++++++++++++ Source/Engine/Level/Scene/SceneTicking.h | 12 ++++++++++++ Source/Engine/Scripting/Script.cpp | 2 ++ Source/Engine/Scripting/Script.h | 1 + 4 files changed, 34 insertions(+) diff --git a/Source/Engine/Level/Scene/SceneTicking.cpp b/Source/Engine/Level/Scene/SceneTicking.cpp index 8998a4b37..7aeee452b 100644 --- a/Source/Engine/Level/Scene/SceneTicking.cpp +++ b/Source/Engine/Level/Scene/SceneTicking.cpp @@ -121,6 +121,19 @@ void SceneTicking::LateUpdateTickData::TickScripts(const Array& scripts } } +SceneTicking::LateFixedUpdateTickData::LateFixedUpdateTickData() + : TickData(64) +{ +} + +void SceneTicking::LateFixedUpdateTickData::TickScripts(const Array& scripts) +{ + for (auto* script : scripts) + { + script->OnLateFixedUpdate(); + } +} + void SceneTicking::AddScript(Script* obj) { ASSERT_LOW_LAYER(obj && obj->GetParent() && obj->GetParent()->GetScene()); @@ -130,6 +143,9 @@ void SceneTicking::AddScript(Script* obj) Update.AddScript(obj); if (obj->_tickLateUpdate) LateUpdate.AddScript(obj); + if (obj->_tickLateFixedUpdate) + LateFixedUpdate.AddScript(obj); + } void SceneTicking::RemoveScript(Script* obj) @@ -141,6 +157,8 @@ void SceneTicking::RemoveScript(Script* obj) Update.RemoveScript(obj); if (obj->_tickLateUpdate) LateUpdate.RemoveScript(obj); + if (obj->_tickLateFixedUpdate) + LateFixedUpdate.RemoveScript(obj); } void SceneTicking::Clear() @@ -148,4 +166,5 @@ void SceneTicking::Clear() FixedUpdate.Clear(); Update.Clear(); LateUpdate.Clear(); + LateFixedUpdate.Clear(); } diff --git a/Source/Engine/Level/Scene/SceneTicking.h b/Source/Engine/Level/Scene/SceneTicking.h index 230861087..7d590c8e7 100644 --- a/Source/Engine/Level/Scene/SceneTicking.h +++ b/Source/Engine/Level/Scene/SceneTicking.h @@ -109,6 +109,13 @@ public: void TickScripts(const Array& scripts) override; }; + class FLAXENGINE_API LateFixedUpdateTickData : public TickData + { + public: + LateFixedUpdateTickData(); + void TickScripts(const Array& scripts) override; + }; + public: /// /// Adds the script to scene ticking system. @@ -142,4 +149,9 @@ public: /// The late update tick function. /// LateUpdateTickData LateUpdate; + + /// + /// The late fixed update tick function. + /// + LateFixedUpdateTickData LateFixedUpdate; }; diff --git a/Source/Engine/Scripting/Script.cpp b/Source/Engine/Scripting/Script.cpp index 3f8df354c..8eaff42de 100644 --- a/Source/Engine/Scripting/Script.cpp +++ b/Source/Engine/Scripting/Script.cpp @@ -26,6 +26,7 @@ Script::Script(const SpawnParams& params) , _tickFixedUpdate(false) , _tickUpdate(false) , _tickLateUpdate(false) + , _tickLateFixedUpdate(false) , _wasStartCalled(false) , _wasEnableCalled(false) { @@ -181,6 +182,7 @@ void Script::SetupType() _tickUpdate |= type.Script.ScriptVTable[8] != nullptr; _tickLateUpdate |= type.Script.ScriptVTable[9] != nullptr; _tickFixedUpdate |= type.Script.ScriptVTable[10] != nullptr; + _tickLateFixedUpdate |= type.Script.ScriptVTable[11] != nullptr; } typeHandle = type.GetBaseType(); } diff --git a/Source/Engine/Scripting/Script.h b/Source/Engine/Scripting/Script.h index 769771f46..49cba0ec4 100644 --- a/Source/Engine/Scripting/Script.h +++ b/Source/Engine/Scripting/Script.h @@ -19,6 +19,7 @@ protected: int32 _tickFixedUpdate : 1; int32 _tickUpdate : 1; int32 _tickLateUpdate : 1; + int32 _tickLateFixedUpdate : 1; int32 _wasStartCalled : 1; int32 _wasEnableCalled : 1; #if USE_EDITOR