Fix crash when unloading scene during tick of that scene
This commit is contained in:
@@ -44,7 +44,7 @@ void SceneTicking::TickData::Tick()
|
||||
{
|
||||
TickScripts(Scripts);
|
||||
|
||||
for (int32 i = 0; i < Ticks.Count(); i++)
|
||||
for (int32 i = 0; i < Ticks.Count() && _canTick; i++)
|
||||
Ticks.Get()[i].Call();
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ void SceneTicking::TickData::TickExecuteInEditor()
|
||||
{
|
||||
TickScripts(ScriptsExecuteInEditor);
|
||||
|
||||
for (int32 i = 0; i < TicksExecuteInEditor.Count(); i++)
|
||||
for (int32 i = 0; i < TicksExecuteInEditor.Count() && _canTick; i++)
|
||||
TicksExecuteInEditor.Get()[i].Call();
|
||||
}
|
||||
|
||||
@@ -89,10 +89,8 @@ SceneTicking::FixedUpdateTickData::FixedUpdateTickData()
|
||||
|
||||
void SceneTicking::FixedUpdateTickData::TickScripts(const Array<Script*>& scripts)
|
||||
{
|
||||
for (auto* script : scripts)
|
||||
{
|
||||
script->OnFixedUpdate();
|
||||
}
|
||||
for (int32 i = 0; i < scripts.Count() && _canTick; i++)
|
||||
scripts.Get()[i]->OnFixedUpdate();
|
||||
}
|
||||
|
||||
SceneTicking::UpdateTickData::UpdateTickData()
|
||||
@@ -102,36 +100,30 @@ SceneTicking::UpdateTickData::UpdateTickData()
|
||||
|
||||
void SceneTicking::UpdateTickData::TickScripts(const Array<Script*>& scripts)
|
||||
{
|
||||
for (auto* script : scripts)
|
||||
{
|
||||
script->OnUpdate();
|
||||
}
|
||||
for (int32 i = 0; i < scripts.Count() && _canTick; i++)
|
||||
scripts.Get()[i]->OnUpdate();
|
||||
}
|
||||
|
||||
SceneTicking::LateUpdateTickData::LateUpdateTickData()
|
||||
: TickData(64)
|
||||
: TickData(0)
|
||||
{
|
||||
}
|
||||
|
||||
void SceneTicking::LateUpdateTickData::TickScripts(const Array<Script*>& scripts)
|
||||
{
|
||||
for (auto* script : scripts)
|
||||
{
|
||||
script->OnLateUpdate();
|
||||
}
|
||||
for (int32 i = 0; i < scripts.Count() && _canTick; i++)
|
||||
scripts.Get()[i]->OnLateUpdate();
|
||||
}
|
||||
|
||||
SceneTicking::LateFixedUpdateTickData::LateFixedUpdateTickData()
|
||||
: TickData(64)
|
||||
: TickData(0)
|
||||
{
|
||||
}
|
||||
|
||||
void SceneTicking::LateFixedUpdateTickData::TickScripts(const Array<Script*>& scripts)
|
||||
{
|
||||
for (auto* script : scripts)
|
||||
{
|
||||
script->OnLateFixedUpdate();
|
||||
}
|
||||
for (int32 i = 0; i < scripts.Count() && _canTick; i++)
|
||||
scripts.Get()[i]->OnLateFixedUpdate();
|
||||
}
|
||||
|
||||
void SceneTicking::AddScript(Script* obj)
|
||||
@@ -167,3 +159,11 @@ void SceneTicking::Clear()
|
||||
LateUpdate.Clear();
|
||||
LateFixedUpdate.Clear();
|
||||
}
|
||||
|
||||
void SceneTicking::SetTicking(bool enable)
|
||||
{
|
||||
FixedUpdate._canTick = enable;
|
||||
Update._canTick = enable;
|
||||
LateUpdate._canTick = enable;
|
||||
LateFixedUpdate._canTick = enable;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user