diff --git a/Hazel/src/Hazel/Scene/Scene.cpp b/Hazel/src/Hazel/Scene/Scene.cpp index 3d4a6b2a7..1637dea38 100644 --- a/Hazel/src/Hazel/Scene/Scene.cpp +++ b/Hazel/src/Hazel/Scene/Scene.cpp @@ -146,8 +146,9 @@ namespace Hazel { for (auto e : view) { Entity entity = { e, this }; - ScriptEngine::OnCreateEntity(entity); + ScriptEngine::CreateEntity(entity); } + ScriptEngine::OnCreateEntities(); } } diff --git a/Hazel/src/Hazel/Scripting/ScriptEngine.cpp b/Hazel/src/Hazel/Scripting/ScriptEngine.cpp index 88a787b22..47a532934 100644 --- a/Hazel/src/Hazel/Scripting/ScriptEngine.cpp +++ b/Hazel/src/Hazel/Scripting/ScriptEngine.cpp @@ -283,10 +283,10 @@ namespace Hazel { return s_Data->EntityClasses.find(fullClassName) != s_Data->EntityClasses.end(); } - void ScriptEngine::OnCreateEntity(Entity entity) + void ScriptEngine::CreateEntity(Entity entity) { const auto& sc = entity.GetComponent(); - if (ScriptEngine::EntityClassExists(sc.ClassName)) + if (EntityClassExists(sc.ClassName)) { UUID entityID = entity.GetUUID(); @@ -300,7 +300,13 @@ namespace Hazel { for (const auto& [name, fieldInstance] : fieldMap) instance->SetFieldValueInternal(name, fieldInstance.m_Buffer); } + } + } + void ScriptEngine::OnCreateEntities() + { + for (auto& [entity, instance] : s_Data->EntityInstances) + { instance->InvokeOnCreate(); } } diff --git a/Hazel/src/Hazel/Scripting/ScriptEngine.h b/Hazel/src/Hazel/Scripting/ScriptEngine.h index e674ae449..74e20e645 100644 --- a/Hazel/src/Hazel/Scripting/ScriptEngine.h +++ b/Hazel/src/Hazel/Scripting/ScriptEngine.h @@ -153,7 +153,8 @@ namespace Hazel { static void OnRuntimeStop(); static bool EntityClassExists(const std::string& fullClassName); - static void OnCreateEntity(Entity entity); + static void CreateEntity(Entity entity); + static void OnCreateEntities(); static void OnUpdateEntity(Entity entity, Timestep ts); static Scene* GetSceneContext();