From c1b9dc4b2e2493714d6be17d2bec6068d73db1bf Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 8 Mar 2021 12:27:05 +0100 Subject: [PATCH] Add support for using `Level.SpawnActor` to add scene from code --- Source/Engine/Level/Level.cpp | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/Source/Engine/Level/Level.cpp b/Source/Engine/Level/Level.cpp index 2746ce65e..049e9ebf3 100644 --- a/Source/Engine/Level/Level.cpp +++ b/Source/Engine/Level/Level.cpp @@ -140,15 +140,31 @@ bool LevelImpl::spawnActor(Actor* actor, Actor* parent) Log::ArgumentNullException(TEXT("Cannot spawn null actor.")); return true; } - if (Level::Scenes.IsEmpty()) - { - Log::InvalidOperationException(TEXT("Cannot spawn actor. No scene loaded.")); - return true; - } - if (parent == nullptr) - parent = Level::Scenes[0]; - actor->SetParent(parent, true, true); + if (actor->Is()) + { + // Spawn scene + actor->PostSpawn(); + actor->OnTransformChanged(); + { + SceneBeginData beginData; + actor->BeginPlay(&beginData); + beginData.OnDone(); + } + CallSceneEvent(SceneEventType::OnSceneLoaded, (Scene*)actor, actor->GetID()); + } + else + { + // Spawn actor + if (Level::Scenes.IsEmpty()) + { + Log::InvalidOperationException(TEXT("Cannot spawn actor. No scene loaded.")); + return true; + } + if (parent == nullptr) + parent = Level::Scenes[0]; + actor->SetParent(parent, true, true); + } return false; }