diff --git a/Engine/Src/Imp/CPP/InternalEngine.cpp b/Engine/Src/Imp/CPP/InternalEngine.cpp index 5549799..cdbd88e 100644 --- a/Engine/Src/Imp/CPP/InternalEngine.cpp +++ b/Engine/Src/Imp/CPP/InternalEngine.cpp @@ -83,6 +83,7 @@ namespace ia::iae FontManager::Initialize(); UI::Initialize(); Physics::Initialize(); + SceneManager::Initialize(); Game_OnInitialize(); @@ -93,6 +94,7 @@ namespace ia::iae { Game_OnTerminate(); + SceneManager::Terminate(); Physics::Terminate(); UI::Terminate(); FontManager::Terminate(); diff --git a/Engine/Src/Imp/CPP/Renderer/Renderer.cpp b/Engine/Src/Imp/CPP/Renderer/Renderer.cpp index b8837ec..2d227f7 100644 --- a/Engine/Src/Imp/CPP/Renderer/Renderer.cpp +++ b/Engine/Src/Imp/CPP/Renderer/Renderer.cpp @@ -488,4 +488,9 @@ namespace ia::iae Renderer::s_activeSceneDesignViewport = value; Renderer::UpdateSceneScalingFactor(); } + + Vec2 Engine::GetSceneDesignViewport() + { + return Renderer::s_activeSceneDesignViewport; + } } // namespace ia::iae \ No newline at end of file diff --git a/Engine/Src/Imp/CPP/SceneManager.cpp b/Engine/Src/Imp/CPP/SceneManager.cpp index c32545e..04f40b3 100644 --- a/Engine/Src/Imp/CPP/SceneManager.cpp +++ b/Engine/Src/Imp/CPP/SceneManager.cpp @@ -44,27 +44,32 @@ namespace ia::iae namespace ia::iae { - SceneManager::SceneManager( - IN std::function(IN CONST String &, IN CONST Vector &)> getCustomNode, - IN std::function getResource) - : m_customNodeGetter(getCustomNode), m_resourceGetter(getResource) - { + Map SceneManager::s_scenes; + std::function(IN CONST String &, IN CONST Vector &)> SceneManager::s_customNodeGetter; + std::function SceneManager::s_resourceGetter; + + VOID SceneManager::Initialize(){} + VOID SceneManager::Terminate(){ +for (const auto &t : s_scenes) + delete t->Value; } - SceneManager::~SceneManager() + VOID SceneManager::Setup( + IN std::function(IN CONST String &, IN CONST Vector &)> getCustomNode, + IN std::function getResource) { - for (const auto &t : m_scenes) - delete t->Value; + s_customNodeGetter = getCustomNode; + s_resourceGetter = getResource; } VOID SceneManager::SwitchTo(IN CONST String &name) { - Engine::ChangeActiveScene(m_scenes[name]); + Engine::ChangeActiveScene(s_scenes[name]); } Scene *SceneManager::GetScene(IN CONST String &name) { - return m_scenes[name]; + return s_scenes[name]; } VOID SceneManager::AddScene(IN Scene *scene, IN CONST String &name, IN CONST String &xml) @@ -84,13 +89,13 @@ namespace ia::iae { if (!strcmp(t.name(), "Image")) { - resources[t.attribute("name").as_string()] = m_resourceGetter( + resources[t.attribute("name").as_string()] = s_resourceGetter( ResourceType::IMAGE, t.attribute("path").as_string(), t.attribute("index").as_llong()); } else if (!strcmp(t.name(), "Audio")) { resources[t.attribute("name").as_string()] = - m_resourceGetter(ResourceType::SOUND, t.attribute("path").as_string(), 0); + s_resourceGetter(ResourceType::SOUND, t.attribute("path").as_string(), 0); } } } @@ -104,17 +109,17 @@ namespace ia::iae scene->Extent() = Vec2{t.attribute("width").as_float(), t.attribute("height").as_float()}; t = propRoot.child("DesignViewport"); - if(t) + if (t) scene->DesignViewport() = Vec2{t.attribute("width").as_float(), t.attribute("height").as_float()}; else scene->DesignViewport() = Vec2{}; scene->EnableOnScreenGamePad() = false; t = propRoot.child("GamePad"); - if(t) + if (t) { const auto t2 = t.attribute("enableOnScreen"); - if(t2 && t2.as_bool()) + if (t2 && t2.as_bool()) scene->EnableOnScreenGamePad() = true; } } @@ -136,7 +141,7 @@ namespace ia::iae } else { - const auto node = m_customNodeGetter(t.name(), String(t.attribute("id").as_string()).split(';')); + const auto node = s_customNodeGetter(t.name(), String(t.attribute("id").as_string()).split(';')); scene->AddNode(node); n = node.get(); } @@ -165,11 +170,11 @@ namespace ia::iae }); scene->UIMarkup() = html; } - else { - + else + { } } - m_scenes[name] = scene; + s_scenes[name] = scene; } } // namespace ia::iae \ No newline at end of file diff --git a/Engine/Src/Inc/IAEngine/Engine.hpp b/Engine/Src/Inc/IAEngine/Engine.hpp index a328a20..ca176f9 100644 --- a/Engine/Src/Inc/IAEngine/Engine.hpp +++ b/Engine/Src/Inc/IAEngine/Engine.hpp @@ -24,9 +24,9 @@ #include #include -#include #include #include +#include namespace ia::iae { @@ -54,6 +54,7 @@ namespace ia::iae STATIC VOID DrawQuad(IN Vec2 position, IN Handle texture, IN Vec2 scale, IN FLOAT32 rotation, IN UINT8 layer, IN UINT16 sortIndex); STATIC VOID DrawCircle(IN Vec2 position, IN Handle texture, IN FLOAT32 radius, IN FLOAT32 rotation, IN UINT8 layer, IN UINT16 sortIndex); STATIC VOID DrawText(IN CONST String& text, IN Vec2 position, IN FLOAT32 scale, IN FLOAT32 rotation, IN UINT8 layer, IN UINT16 sortIndex); + STATIC Vec2 GetSceneDesignViewport(); STATIC VOID SetSceneDesignViewport(IN Vec2 value); // Renderer State Functions diff --git a/Engine/Src/Inc/IAEngine/SceneManager.hpp b/Engine/Src/Inc/IAEngine/SceneManager.hpp index 8dbcc63..f0ff3ae 100644 --- a/Engine/Src/Inc/IAEngine/SceneManager.hpp +++ b/Engine/Src/Inc/IAEngine/SceneManager.hpp @@ -23,28 +23,33 @@ namespace ia::iae class SceneManager { public: - SceneManager(IN std::function(IN CONST String &, IN CONST Vector&)> getCustomNode, - IN std::function getResource); - ~SceneManager(); + STATIC VOID Setup(IN std::function(IN CONST String &, IN CONST Vector &)> getCustomNode, + IN std::function getResource); - VOID SwitchTo(IN CONST String &name); + STATIC VOID SwitchTo(IN CONST String &name); - Scene *GetScene(IN CONST String &name); + STATIC Scene *GetScene(IN CONST String &name); public: - template SceneType* AddScene(IN CONST String &name, IN CONST String &xml) + template STATIC SceneType *AddScene(IN CONST String &name, IN CONST String &xml) { - const auto t = (Scene*)new SceneType(); + const auto t = (Scene *) new SceneType(); AddScene(t, name, xml); - return (SceneType*)t; + return (SceneType *) t; } private: - VOID AddScene(IN Scene *scene, IN CONST String &name, IN CONST String &xml); + STATIC VOID AddScene(IN Scene *scene, IN CONST String &name, IN CONST String &xml); private: - Map m_scenes; - std::function(IN CONST String &, IN CONST Vector&)> m_customNodeGetter; - std::function m_resourceGetter; + STATIC Map s_scenes; + STATIC std::function(IN CONST String &, IN CONST Vector &)> s_customNodeGetter; + STATIC std::function s_resourceGetter; + + private: + STATIC VOID Initialize(); + STATIC VOID Terminate(); + + friend class __Internal_Engine; }; } // namespace ia::iae \ No newline at end of file diff --git a/Vendor/IACore b/Vendor/IACore index 07638ea..5a38f9f 160000 --- a/Vendor/IACore +++ b/Vendor/IACore @@ -1 +1 @@ -Subproject commit 07638ea7b3145902cd9ed99c0c358ecab2fe29fe +Subproject commit 5a38f9f36d0bb942f5833335182874d4372f8329