Refactor scene objects initialization to call OnAwake before all OnStart
#520
This commit is contained in:
@@ -331,7 +331,7 @@ void Actor::SetParent(Actor* value, bool worldPositionsStays, bool canBreakPrefa
|
||||
ASSERT(_parent != nullptr && GetScene() != nullptr);
|
||||
|
||||
// Fire events
|
||||
PostSpawn();
|
||||
InitializeHierarchy();
|
||||
{
|
||||
SceneBeginData beginData;
|
||||
BeginPlay(&beginData);
|
||||
@@ -778,13 +778,13 @@ void Actor::BreakPrefabLink()
|
||||
}
|
||||
}
|
||||
|
||||
void Actor::PostLoad()
|
||||
void Actor::Initialize()
|
||||
{
|
||||
// Cache scene
|
||||
ASSERT(!IsDuringPlay());
|
||||
|
||||
// Cache
|
||||
if (_parent)
|
||||
_scene = _parent->GetScene();
|
||||
|
||||
// Cache flag
|
||||
_isActiveInHierarchy = _isActive && (_parent == nullptr || _parent->IsActiveInHierarchy());
|
||||
|
||||
// Use lazy creation for the managed instance, just register the object
|
||||
@@ -792,32 +792,6 @@ void Actor::PostLoad()
|
||||
RegisterObject();
|
||||
}
|
||||
|
||||
void Actor::PostSpawn()
|
||||
{
|
||||
// Cache scene
|
||||
if (_parent)
|
||||
_scene = _parent->GetScene();
|
||||
|
||||
// Cache flag
|
||||
_isActiveInHierarchy = _isActive && (_parent == nullptr || _parent->IsActiveInHierarchy());
|
||||
|
||||
// Create managed object
|
||||
if (!HasManagedInstance())
|
||||
CreateManaged();
|
||||
|
||||
// Init scripts
|
||||
for (int32 i = 0; i < Scripts.Count(); i++)
|
||||
{
|
||||
Scripts[i]->PostSpawn();
|
||||
}
|
||||
|
||||
// Init children
|
||||
for (int32 i = 0; i < Children.Count(); i++)
|
||||
{
|
||||
Children[i]->PostSpawn();
|
||||
}
|
||||
}
|
||||
|
||||
void Actor::BeginPlay(SceneBeginData* data)
|
||||
{
|
||||
// Perform additional verification
|
||||
@@ -853,13 +827,6 @@ void Actor::BeginPlay(SceneBeginData* data)
|
||||
}
|
||||
|
||||
// Fire events for scripting
|
||||
for (auto* script : Scripts)
|
||||
{
|
||||
CHECK_EXECUTE_IN_EDITOR
|
||||
{
|
||||
script->OnAwake();
|
||||
}
|
||||
}
|
||||
if (IsActiveInHierarchy() && GetScene() && !_isEnabled)
|
||||
{
|
||||
OnEnable();
|
||||
@@ -1229,6 +1196,17 @@ void Actor::UnregisterObjectHierarchy()
|
||||
}
|
||||
}
|
||||
|
||||
void Actor::InitializeHierarchy()
|
||||
{
|
||||
Initialize();
|
||||
|
||||
for (int32 i = 0; i < Scripts.Count(); i++)
|
||||
Scripts[i]->Initialize();
|
||||
|
||||
for (int32 i = 0; i < Children.Count(); i++)
|
||||
Children[i]->InitializeHierarchy();
|
||||
}
|
||||
|
||||
void Actor::Draw(RenderContext& renderContext)
|
||||
{
|
||||
}
|
||||
@@ -1685,7 +1663,7 @@ bool Actor::FromBytes(const Span<byte>& data, Array<Actor*>& output, ISerializeM
|
||||
}
|
||||
for (int32 i = 0; i < parents->Count(); i++)
|
||||
{
|
||||
parents->At(i)->PostSpawn();
|
||||
parents->At(i)->InitializeHierarchy();
|
||||
}
|
||||
for (int32 i = 0; i < parents->Count(); i++)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user