diff --git a/Nuake/Source/Nuake/Modules/Modules.cpp b/Nuake/Source/Nuake/Modules/Modules.cpp index 3bde3497..8e9d7f0b 100644 --- a/Nuake/Source/Nuake/Modules/Modules.cpp +++ b/Nuake/Source/Nuake/Modules/Modules.cpp @@ -2,6 +2,7 @@ #include "Modules.h" #include "AssimpModule/AssimpModule.h" +#include "AudioModule/AudioModule.h" #include "ExampleModule/ExampleModule.h" #include "Nuake/Core/Logger.h" @@ -10,6 +11,8 @@ void Nuake::Modules::StartupModules() { Logger::Log("Starting AssimpModule", "modules"); AssimpModule_Startup(); + Logger::Log("Starting AudioModule", "modules"); + AudioModule_Startup(); Logger::Log("Starting ExampleModule", "modules"); ExampleModule_Startup(); } @@ -18,6 +21,8 @@ void Nuake::Modules::ShutdownModules() { Logger::Log("Shutting down AssimpModule", "modules"); AssimpModule_Shutdown(); + Logger::Log("Shutting down AudioModule", "modules"); + AudioModule_Shutdown(); Logger::Log("Shutting down ExampleModule", "modules"); ExampleModule_Shutdown(); } diff --git a/Nuake/Source/Nuake/Scene/Scene.cpp b/Nuake/Source/Nuake/Scene/Scene.cpp index 3e0e8428..bdb74ed6 100644 --- a/Nuake/Source/Nuake/Scene/Scene.cpp +++ b/Nuake/Source/Nuake/Scene/Scene.cpp @@ -21,7 +21,6 @@ #include "Nuake/Rendering/Renderer.h" #include "Nuake/Rendering/Textures/MaterialManager.h" -#include #include "Engine.h" #include "Nuake/Core/Maths.h" @@ -34,6 +33,7 @@ #include "Nuake/Scene/Components/SkinnedModelComponent.h" #include "Nuake/Scene/Components/BoneComponent.h" +#include "Nuake/Scene/SceneSystems.h" #include @@ -65,13 +65,16 @@ namespace Nuake scriptingSystem = CreateRef(this); // Adding systems - Order is important + + SceneSystemDB::Get().InstantiateSystems(this); + m_Systems.push_back(physicsSystem); m_Systems.push_back(CreateRef(this)); m_Systems.push_back(scriptingSystem); m_Systems.push_back(CreateRef(this)); m_Systems.push_back(CreateRef(this)); m_Systems.push_back(CreateRef(this)); - m_Systems.push_back(CreateRef(this)); + //m_Systems.push_back(CreateRef(this)); m_SceneRenderer = CreateRef(); m_SceneRenderer->Init(); diff --git a/Nuake/Source/Nuake/Scene/Scene.h b/Nuake/Source/Nuake/Scene/Scene.h index 742f601d..f906640e 100644 --- a/Nuake/Source/Nuake/Scene/Scene.h +++ b/Nuake/Source/Nuake/Scene/Scene.h @@ -36,10 +36,10 @@ namespace Nuake // The systems are what updates the components. // You can create a new system(see 'Systems/'.) and register it // In the scene constructor. - std::vector> m_Systems; static Ref m_Environment; public: + std::vector> m_Systems; Ref m_EditorCamera; entt::registry m_Registry; std::unordered_map m_EntitiesIDMap; diff --git a/Nuake/Source/Nuake/Scene/SceneSystems.h b/Nuake/Source/Nuake/Scene/SceneSystems.h new file mode 100644 index 00000000..1401c953 --- /dev/null +++ b/Nuake/Source/Nuake/Scene/SceneSystems.h @@ -0,0 +1,51 @@ +#pragma once + +#include "Nuake/Core/Core.h" + +#include "Nuake/Scene/Systems/System.h" +#include "Nuake/Scene/Scene.h" + +#include +#include + +namespace Nuake +{ + class Scene; + class System; + + using SystemInitializerFunc = std::function(Scene*)>; + + template + concept InheritsFromSystem = std::derived_from; + + class SceneSystemDB + { + private: + std::vector Systems; + + public: + static SceneSystemDB& Get() + { + static SceneSystemDB instance; + return instance; + }; + + SceneSystemDB() = default; + ~SceneSystemDB() = default; + + public: + template + void RegisterSceneSystem() + { + Systems.push_back(&System::Instantiate); + } + + void InstantiateSystems(Scene* scene) + { + for (auto& system : Systems) + { + scene->m_Systems.push_back(system(scene)); + } + } + }; +} \ No newline at end of file diff --git a/Nuake/Source/Nuake/Scene/Systems/AudioSystem.h b/Nuake/Source/Nuake/Scene/Systems/AudioSystem.h index 01dc27e6..b5c9393e 100644 --- a/Nuake/Source/Nuake/Scene/Systems/AudioSystem.h +++ b/Nuake/Source/Nuake/Scene/Systems/AudioSystem.h @@ -1,6 +1,5 @@ #pragma once #include "Nuake/Scene/Systems/System.h" -#include "Nuake/Core/Maths.h" namespace Nuake { diff --git a/Nuake/Source/Nuake/Scene/Systems/System.h b/Nuake/Source/Nuake/Scene/Systems/System.h index 39e95977..47b3c787 100644 --- a/Nuake/Source/Nuake/Scene/Systems/System.h +++ b/Nuake/Source/Nuake/Scene/Systems/System.h @@ -4,13 +4,25 @@ #include "Nuake/Core/Core.h" #include "Nuake/Core/MulticastDelegate.h" +#include + namespace Nuake { + class System; + + template + concept IsSceneSystem = std::derived_from; + class Scene; class System { public: Scene* m_Scene; + template + static Ref Instantiate(Scene* scene) + { + return std::static_pointer_cast(CreateRef(scene)); + } virtual bool Init() = 0;