Add missing implementation for #987

This commit is contained in:
Wojtek Figat
2023-05-12 14:56:19 +02:00
parent aab48f1cc1
commit b43196cd1a
3 changed files with 42 additions and 76 deletions

View File

@@ -20,4 +20,6 @@ void EditorScene::Update()
e.Call();
for (auto& e : Ticking.FixedUpdate.Ticks)
e.Call();
for (auto& e : Ticking.LateFixedUpdate.Ticks)
e.Call();
}

View File

@@ -138,6 +138,7 @@ public:
void Update() override;
void LateUpdate() override;
void FixedUpdate() override;
void LateFixedUpdate() override;
void Dispose() override;
};
@@ -242,96 +243,60 @@ void LayersAndTagsSettings::Apply()
}
}
void LevelService::Update()
{
PROFILE_CPU_NAMED("Level::Update");
ScopeLock lock(Level::ScenesLock);
auto& scenes = Level::Scenes;
// Update all actors
if (!Time::GetGamePaused() && Level::TickEnabled)
{
for (int32 i = 0; i < scenes.Count(); i++)
{
if (scenes[i]->GetIsActive())
scenes[i]->Ticking.Update.Tick();
}
#define TICK_LEVEL(tickingStage, name) \
PROFILE_CPU_NAMED(name); \
ScopeLock lock(Level::ScenesLock); \
auto& scenes = Level::Scenes; \
if (!Time::GetGamePaused() && Level::TickEnabled) \
{ \
for (int32 i = 0; i < scenes.Count(); i++) \
{ \
if (scenes[i]->GetIsActive()) \
scenes[i]->Ticking.tickingStage.Tick(); \
} \
}
#if USE_EDITOR
else if (!Editor::IsPlayMode)
{
// Run event for script executed in editor
for (int32 i = 0; i < scenes.Count(); i++)
{
if (scenes[i]->GetIsActive())
scenes[i]->Ticking.Update.TickExecuteInEditor();
}
#define TICK_LEVEL_EDITOR(tickingStage) \
else if (!Editor::IsPlayMode) \
{ \
for (int32 i = 0; i < scenes.Count(); i++) \
{ \
if (scenes[i]->GetIsActive()) \
scenes[i]->Ticking.tickingStage.TickExecuteInEditor(); \
} \
}
#else
#define TICK_LEVEL_EDITOR(tickingStage)
#endif
void LevelService::Update()
{
TICK_LEVEL(Update, "Level::Update")
TICK_LEVEL_EDITOR(Update)
}
void LevelService::LateUpdate()
{
PROFILE_CPU_NAMED("Level::LateUpdate");
ScopeLock lock(Level::ScenesLock);
auto& scenes = Level::Scenes;
// Update all actors
if (!Time::GetGamePaused() && Level::TickEnabled)
{
for (int32 i = 0; i < scenes.Count(); i++)
{
if (scenes[i]->GetIsActive())
scenes[i]->Ticking.LateUpdate.Tick();
}
}
#if USE_EDITOR
else if (!Editor::IsPlayMode)
{
// Run event for script executed in editor
for (int32 i = 0; i < scenes.Count(); i++)
{
if (scenes[i]->GetIsActive())
scenes[i]->Ticking.LateUpdate.TickExecuteInEditor();
}
}
#endif
// Flush actions
TICK_LEVEL(LateUpdate, "Level::LateUpdate")
TICK_LEVEL_EDITOR(LateUpdate)
flushActions();
}
void LevelService::FixedUpdate()
{
PROFILE_CPU_NAMED("Level::FixedUpdate");
ScopeLock lock(Level::ScenesLock);
auto& scenes = Level::Scenes;
// Update all actors
if (!Time::GetGamePaused() && Level::TickEnabled)
{
for (int32 i = 0; i < scenes.Count(); i++)
{
if (scenes[i]->GetIsActive())
scenes[i]->Ticking.FixedUpdate.Tick();
}
}
#if USE_EDITOR
else if (!Editor::IsPlayMode)
{
// Run event for script executed in editor
for (int32 i = 0; i < scenes.Count(); i++)
{
if (scenes[i]->GetIsActive())
scenes[i]->Ticking.FixedUpdate.TickExecuteInEditor();
}
}
#endif
TICK_LEVEL(FixedUpdate, "Level::FixedUpdate")
TICK_LEVEL_EDITOR(FixedUpdate)
}
void LevelService::LateFixedUpdate()
{
TICK_LEVEL(LateFixedUpdate, "Level::LateFixedUpdate")
TICK_LEVEL_EDITOR(LateFixedUpdate)
}
#undef TICK_LEVEL
#undef TICK_LEVEL_EDITOR
void LevelService::Dispose()
{
ScopeLock lock(_sceneActionsLocker);

View File

@@ -145,7 +145,6 @@ void SceneTicking::AddScript(Script* obj)
LateUpdate.AddScript(obj);
if (obj->_tickLateFixedUpdate)
LateFixedUpdate.AddScript(obj);
}
void SceneTicking::RemoveScript(Script* obj)