Add LateFixedUpdate event for scripts

This commit is contained in:
2023-03-27 17:43:32 +03:00
parent aa64da9869
commit 558a7d99ff
7 changed files with 53 additions and 3 deletions

View File

@@ -65,6 +65,7 @@ Action Engine::FixedUpdate;
Action Engine::Update; Action Engine::Update;
TaskGraph* Engine::UpdateGraph = nullptr; TaskGraph* Engine::UpdateGraph = nullptr;
Action Engine::LateUpdate; Action Engine::LateUpdate;
Action Engine::LateFixedUpdate;
Action Engine::Draw; Action Engine::Draw;
Action Engine::Pause; Action Engine::Pause;
Action Engine::Unpause; Action Engine::Unpause;
@@ -198,6 +199,7 @@ int32 Engine::Main(const Char* cmdLine)
if (Time::OnBeginPhysics()) if (Time::OnBeginPhysics())
{ {
OnFixedUpdate(); OnFixedUpdate();
OnLateFixedUpdate();
Time::OnEndPhysics(); Time::OnEndPhysics();
} }
@@ -273,6 +275,17 @@ void Engine::OnFixedUpdate()
} }
} }
void Engine::OnLateFixedUpdate()
{
PROFILE_CPU_NAMED("Late Fixed Update");
// Call event
LateFixedUpdate();
// Update services
EngineService::OnLateFixedUpdate();
}
void Engine::OnUpdate() void Engine::OnUpdate()
{ {
PROFILE_CPU_NAMED("Update"); PROFILE_CPU_NAMED("Update");

View File

@@ -54,6 +54,11 @@ public:
/// </summary> /// </summary>
static Action LateUpdate; static Action LateUpdate;
/// <summary>
/// Event called after engine update.
/// </summary>
static Action LateFixedUpdate;
/// <summary> /// <summary>
/// Event called during frame rendering and can be used to invoke custom rendering with GPUDevice. /// Event called during frame rendering and can be used to invoke custom rendering with GPUDevice.
/// </summary> /// </summary>
@@ -107,6 +112,11 @@ public:
/// </summary> /// </summary>
static void OnLateUpdate(); static void OnLateUpdate();
/// <summary>
/// Late fixed update callback.
/// </summary>
static void OnLateFixedUpdate();
/// <summary> /// <summary>
/// Draw callback. /// Draw callback.
/// </summary> /// </summary>

View File

@@ -33,6 +33,7 @@ static bool CompareEngineServices(EngineService* const& a, EngineService* const&
DEFINE_ENGINE_SERVICE_EVENT(FixedUpdate); DEFINE_ENGINE_SERVICE_EVENT(FixedUpdate);
DEFINE_ENGINE_SERVICE_EVENT(Update); DEFINE_ENGINE_SERVICE_EVENT(Update);
DEFINE_ENGINE_SERVICE_EVENT(LateUpdate); DEFINE_ENGINE_SERVICE_EVENT(LateUpdate);
DEFINE_ENGINE_SERVICE_EVENT(LateFixedUpdate);
DEFINE_ENGINE_SERVICE_EVENT(Draw); DEFINE_ENGINE_SERVICE_EVENT(Draw);
DEFINE_ENGINE_SERVICE_EVENT_INVERTED(BeforeExit); DEFINE_ENGINE_SERVICE_EVENT_INVERTED(BeforeExit);

View File

@@ -44,6 +44,7 @@ public:
DECLARE_ENGINE_SERVICE_EVENT(void, FixedUpdate); DECLARE_ENGINE_SERVICE_EVENT(void, FixedUpdate);
DECLARE_ENGINE_SERVICE_EVENT(void, Update); DECLARE_ENGINE_SERVICE_EVENT(void, Update);
DECLARE_ENGINE_SERVICE_EVENT(void, LateUpdate); DECLARE_ENGINE_SERVICE_EVENT(void, LateUpdate);
DECLARE_ENGINE_SERVICE_EVENT(void, LateFixedUpdate);
DECLARE_ENGINE_SERVICE_EVENT(void, Draw); DECLARE_ENGINE_SERVICE_EVENT(void, Draw);
DECLARE_ENGINE_SERVICE_EVENT(void, BeforeExit); DECLARE_ENGINE_SERVICE_EVENT(void, BeforeExit);
DECLARE_ENGINE_SERVICE_EVENT(void, Dispose); DECLARE_ENGINE_SERVICE_EVENT(void, Dispose);

View File

@@ -108,6 +108,13 @@ public:
{ {
} }
/// <summary>
/// Called every fixed framerate frame (after FixedUpdate) if object is enabled.
/// </summary>
API_FUNCTION(Attributes = "NoAnimate") virtual void OnLateFixedUpdate()
{
}
/// <summary> /// <summary>
/// Called during drawing debug shapes in editor. Use <see cref="DebugDraw"/> to draw debug shapes and other visualization. /// Called during drawing debug shapes in editor. Use <see cref="DebugDraw"/> to draw debug shapes and other visualization.
/// </summary> /// </summary>

View File

@@ -46,6 +46,7 @@ public:
void Update() override; void Update() override;
void LateUpdate() override; void LateUpdate() override;
void FixedUpdate() override; void FixedUpdate() override;
void LateFixedUpdate() override;
void Draw() override; void Draw() override;
void BeforeExit() override; void BeforeExit() override;
void Dispose() override; void Dispose() override;
@@ -100,6 +101,7 @@ namespace
MMethod* _method_Update = nullptr; MMethod* _method_Update = nullptr;
MMethod* _method_LateUpdate = nullptr; MMethod* _method_LateUpdate = nullptr;
MMethod* _method_FixedUpdate = nullptr; MMethod* _method_FixedUpdate = nullptr;
MMethod* _method_LateFixedUpdate = nullptr;
MMethod* _method_Draw = nullptr; MMethod* _method_Draw = nullptr;
MMethod* _method_Exit = nullptr; MMethod* _method_Exit = nullptr;
Array<BinaryModule*, InlinedAllocation<64>> _nonNativeModules; Array<BinaryModule*, InlinedAllocation<64>> _nonNativeModules;
@@ -210,6 +212,12 @@ void ScriptingService::FixedUpdate()
INVOKE_EVENT(FixedUpdate); INVOKE_EVENT(FixedUpdate);
} }
void ScriptingService::LateFixedUpdate()
{
PROFILE_CPU_NAMED("Scripting::LateFixedUpdate");
INVOKE_EVENT(LateFixedUpdate);
}
void ScriptingService::Draw() void ScriptingService::Draw()
{ {
PROFILE_CPU_NAMED("Scripting::Draw"); PROFILE_CPU_NAMED("Scripting::Draw");

View File

@@ -80,17 +80,22 @@ namespace FlaxEngine
public static event Action Update; public static event Action Update;
/// <summary> /// <summary>
/// Occurs on scripting 'late' update. /// Occurs on scripting late update.
/// </summary> /// </summary>
public static event Action LateUpdate; public static event Action LateUpdate;
/// <summary> /// <summary>
/// Occurs on scripting `fixed` update. /// Occurs on scripting fixed update.
/// </summary> /// </summary>
public static event Action FixedUpdate; public static event Action FixedUpdate;
/// <summary> /// <summary>
/// Occurs on scripting `draw` update. Called during frame rendering and can be used to invoke custom rendering with GPUDevice. /// Occurs on scripting late fixed update.
/// </summary>
public static event Action LateFixedUpdate;
/// <summary>
/// Occurs on scripting draw update. Called during frame rendering and can be used to invoke custom rendering with GPUDevice.
/// </summary> /// </summary>
public static event Action Draw; public static event Action Draw;
@@ -302,6 +307,11 @@ namespace FlaxEngine
FixedUpdate?.Invoke(); FixedUpdate?.Invoke();
} }
internal static void Internal_LateFixedUpdate()
{
LateFixedUpdate?.Invoke();
}
internal static void Internal_Draw() internal static void Internal_Draw()
{ {
Draw?.Invoke(); Draw?.Invoke();