From 841631eb9597ddbb1668acff3a9a82fb50bd9745 Mon Sep 17 00:00:00 2001 From: Ben Kyd Date: Sat, 28 Jun 2025 19:11:10 +0100 Subject: [PATCH] restructure around entt --- Aeon/Aeon.hpp | 53 +++++++++---------- Aeon/Core/Display.hpp | 21 ++++---- Aeon/Core/GameLayer.hpp | 14 +++-- Aeon/Entity/CoreComponents/Mesh.hpp | 0 .../CoreComponents/SimpleComponents.hpp | 19 ------- Aeon/Entity/CoreComponents/Transform.hpp | 25 +++++++++ Aeon/Entity/Entity.hpp | 14 +++++ Aeon/Handle.hpp | 11 ++++ Aeon/Rendering/Mesh.hpp | 15 ++++++ Aeon/Rendering/RenderMaster.cpp | 13 ----- Aeon/Rendering/RenderMaster.hpp | 23 -------- Aeon/Rendering/RenderPipeline.hpp | 0 Aeon/Rendering/RenderSystem.cpp | 0 Aeon/Rendering/RenderSystem.hpp | 0 Aeon/Rendering/Texture.cpp | 0 Aeon/Rendering/Texture.hpp | 28 ++++++++++ Aeon/Rendering/Textures.cpp | 0 Aeon/Rendering/Textures.hpp | 0 Aeon/ResoucePool.hpp | 0 Game/ExampleGame.cpp | 33 +++--------- 20 files changed, 140 insertions(+), 129 deletions(-) create mode 100644 Aeon/Entity/CoreComponents/Mesh.hpp delete mode 100644 Aeon/Entity/CoreComponents/SimpleComponents.hpp create mode 100644 Aeon/Entity/CoreComponents/Transform.hpp create mode 100644 Aeon/Handle.hpp delete mode 100644 Aeon/Rendering/RenderMaster.cpp delete mode 100644 Aeon/Rendering/RenderMaster.hpp create mode 100644 Aeon/Rendering/RenderPipeline.hpp create mode 100644 Aeon/Rendering/RenderSystem.cpp create mode 100644 Aeon/Rendering/RenderSystem.hpp create mode 100644 Aeon/Rendering/Texture.cpp create mode 100644 Aeon/Rendering/Texture.hpp create mode 100644 Aeon/Rendering/Textures.cpp create mode 100644 Aeon/Rendering/Textures.hpp create mode 100644 Aeon/ResoucePool.hpp diff --git a/Aeon/Aeon.hpp b/Aeon/Aeon.hpp index 52b628d..39150d9 100644 --- a/Aeon/Aeon.hpp +++ b/Aeon/Aeon.hpp @@ -1,15 +1,14 @@ #ifndef AEON_AEON_H_ #define AEON_AEON_H_ -#include - #include #include #include +#include +#include #include -#include -namespace Core +namespace Core { // NOTE: Derivations / children of "App" cannot attatch @@ -17,46 +16,46 @@ namespace Core // first add a gamelayer to handle events // App stores the GLOBAL gamestate -// It is OK to store this globally +// It is OK to store this globally // every component needs to use state class App : public EventListener { public: - App( const AppProperties& props, const DisplayProperties& dispProps ); + App(const AppProperties& props, const DisplayProperties& dispProps); - void Run(); + void Run(); - const Display& GetDisplay(); + const Display& GetDisplay(); + const EC:: - // Layers, once assigned, until poped are assumed to - // never change their spot in the layer hierarchy - void PushLayer( GameLayer* layer ); - void PushTopLayer( GameLayer* layer ); - void PushDebugLayer( GameLayer* layer ); + // Layers, once assigned, until poped are assumed to + // never change their spot in the layer hierarchy + void PushLayer(GameLayer* layer); + void PushTopLayer(GameLayer* layer); + void PushDebugLayer(GameLayer* layer); - bool EventRecieved( GenericEvent& e ) override; + bool EventRecieved(GenericEvent& e) override; public: - void PopLayer(); - void PopTopLayer(); - void PopDebugLayer(); + void PopLayer(); + void PopTopLayer(); + void PopDebugLayer(); private: - Display mDisplay; + Display mDisplay; - EC::EntityRegistry mEntityController; - Input::InputController& mInput; + EC::registry mEntityRegistry; + Input::InputController& mInput; - // Game layers from z order - std::vector mGameLayers; - std::vector mTopLayers; - std::vector mDebugLayers; + // Game layers from z order + std::vector mGameLayers; + std::vector mTopLayers; + std::vector mDebugLayers; private: - bool mSIGTERM = false; - + bool mSIGTERM = false; }; -} +} // namespace Core #endif diff --git a/Aeon/Core/Display.hpp b/Aeon/Core/Display.hpp index a420ff1..dcc037f 100644 --- a/Aeon/Core/Display.hpp +++ b/Aeon/Core/Display.hpp @@ -1,15 +1,12 @@ #ifndef AEON_CORE_DISPLAY_H_ #define AEON_CORE_DISPLAY_H_ -#include - -#include #include #include +#include -using namespace Rendering; - -namespace Core { +namespace Core +{ class Display : public EventListener { @@ -17,7 +14,7 @@ public: Display(); ~Display(); - bool Create( const DisplayProperties& properties ); + bool Create(const DisplayProperties& properties); const unsigned int GetWidth(); const unsigned int GetHeight(); @@ -25,13 +22,13 @@ public: const SDL_Window* GetWindow(); const SDL_GLContext& GetContext(); - void SetClearColour( float r, float g, float b, float a = 1.0f ); + void SetClearColour(float r, float g, float b, float a = 1.0f); void EndFrame(); void Destroy(); - bool EventRecieved( GenericEvent& e ) override; + bool EventRecieved(GenericEvent& e) override; private: SDL_Window* mWindow; @@ -42,10 +39,10 @@ private: float mClearColour[4]; private: - Display( Display const& ) = delete; - void operator=( Display const& ) = delete; + Display(Display const&) = delete; + void operator=(Display const&) = delete; }; -} +} // namespace Core #endif diff --git a/Aeon/Core/GameLayer.hpp b/Aeon/Core/GameLayer.hpp index 3c52811..a6588ad 100644 --- a/Aeon/Core/GameLayer.hpp +++ b/Aeon/Core/GameLayer.hpp @@ -2,6 +2,7 @@ #define AEON_CORE_GAMELAYER_H_ #include +#include namespace Core { @@ -9,15 +10,12 @@ namespace Core class GameLayer : public EventListener { public: - virtual void Attach() = 0; - virtual void FrameTick() = 0; - virtual void TimeTick() = 0; - virtual void Detach() = 0; - -protected: - + virtual void Attach() = 0; + virtual void FrameTick() = 0; + virtual void TimeTick() = 0; + virtual void Detach() = 0; }; -} +} // namespace Core #endif diff --git a/Aeon/Entity/CoreComponents/Mesh.hpp b/Aeon/Entity/CoreComponents/Mesh.hpp new file mode 100644 index 0000000..e69de29 diff --git a/Aeon/Entity/CoreComponents/SimpleComponents.hpp b/Aeon/Entity/CoreComponents/SimpleComponents.hpp deleted file mode 100644 index e9ece4c..0000000 --- a/Aeon/Entity/CoreComponents/SimpleComponents.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef AEON_ENTITY_CORECOMPONENTS_SIMPLECOMPONENTS_H_ -#define AEON_ENTITY_CORECOMPONENTS_SIMPLECOMPONENTS_H_ - -namespace EC -{ - -struct Position -{ - float x, y, z; -}; - -struct Velocity -{ - float dx, dy, dz; -}; - -} // namespace EC - -#endif diff --git a/Aeon/Entity/CoreComponents/Transform.hpp b/Aeon/Entity/CoreComponents/Transform.hpp new file mode 100644 index 0000000..434a56c --- /dev/null +++ b/Aeon/Entity/CoreComponents/Transform.hpp @@ -0,0 +1,25 @@ +#ifndef AEON_ENTITY_CORECOMPONENTS_TRANSFORM_H_ +#define AEON_ENTITY_CORECOMPONENTS_TRANSFORM_H_ + +#include +#include + +namespace EC +{ + +struct Transform +{ + Transform(glm::vec3 position) : position(position) + { + } + + glm::vec3 position; + glm::quat rotation = glm::quat(1.0f, 0.0f, 0.0f, 0.0f); + float scale = 1.0f; + + glm::mat4 model; +}; + +} // namespace EC + +#endif diff --git a/Aeon/Entity/Entity.hpp b/Aeon/Entity/Entity.hpp index de6b1ea..08ef8a8 100644 --- a/Aeon/Entity/Entity.hpp +++ b/Aeon/Entity/Entity.hpp @@ -1,11 +1,25 @@ #ifndef AEON_ENTITY_ENTITY_H_ #define AEON_ENTITY_ENTITY_H_ +#include #include #include namespace EC { +using Entity = entt::entity; +using Registry = entt::registry; +using Handle = entt::handle; + +template +using View = entt::basic_view, Components...>; + +template +using View = entt::basic_view, Include...>; + +using Dispatcher = entt::dispatcher; + +static constexpr auto null = entt::null; } // namespace EC diff --git a/Aeon/Handle.hpp b/Aeon/Handle.hpp new file mode 100644 index 0000000..c8abc4a --- /dev/null +++ b/Aeon/Handle.hpp @@ -0,0 +1,11 @@ +#ifndef AEON_RENDERING_HANDLE_H_ +#define AEON_RENDERING_HANDLE_H_ + +#include + +constexpr uint32_t InvalidID = UINT32_MAX; + +typedef uint32_t Handle; + + +#endif diff --git a/Aeon/Rendering/Mesh.hpp b/Aeon/Rendering/Mesh.hpp index e69de29..e3a299c 100644 --- a/Aeon/Rendering/Mesh.hpp +++ b/Aeon/Rendering/Mesh.hpp @@ -0,0 +1,15 @@ +#ifndef AEON_RENDERING_MESH_H_ +#define AEON_RENDERING_MESH_H_ + +#include +#include + +struct Mesh +{ + +}; + +typedef Handle MeshHandle; + +#endif + diff --git a/Aeon/Rendering/RenderMaster.cpp b/Aeon/Rendering/RenderMaster.cpp deleted file mode 100644 index aa6da79..0000000 --- a/Aeon/Rendering/RenderMaster.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "RenderMaster.hpp" - -using namespace Rendering; - -RenderMaster::RenderMaster() -{ - -} - -void RenderMaster::QueueRenderable( Renderable* renderable ) -{ - -} diff --git a/Aeon/Rendering/RenderMaster.hpp b/Aeon/Rendering/RenderMaster.hpp deleted file mode 100644 index 30bce07..0000000 --- a/Aeon/Rendering/RenderMaster.hpp +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef AEON_RENDERING_RENDERMASTER_H_ -#define AEON_RENDERING_RENDERMASTER_H_ - -#include - -class Renderable; - -namespace Rendering -{ - -class RenderMaster : public Helpers::Singleton -{ -public: - RenderMaster(); - - void QueueRenderable(Renderable* renderable); - - -}; - -} // namespace Rendering - -#endif diff --git a/Aeon/Rendering/RenderPipeline.hpp b/Aeon/Rendering/RenderPipeline.hpp new file mode 100644 index 0000000..e69de29 diff --git a/Aeon/Rendering/RenderSystem.cpp b/Aeon/Rendering/RenderSystem.cpp new file mode 100644 index 0000000..e69de29 diff --git a/Aeon/Rendering/RenderSystem.hpp b/Aeon/Rendering/RenderSystem.hpp new file mode 100644 index 0000000..e69de29 diff --git a/Aeon/Rendering/Texture.cpp b/Aeon/Rendering/Texture.cpp new file mode 100644 index 0000000..e69de29 diff --git a/Aeon/Rendering/Texture.hpp b/Aeon/Rendering/Texture.hpp new file mode 100644 index 0000000..93f1cfc --- /dev/null +++ b/Aeon/Rendering/Texture.hpp @@ -0,0 +1,28 @@ +#ifndef AEON_RENDERING_TEXTURE_H_ +#define AEON_RENDERING_TEXTURE_H_ + +#include +#include + +enum class TextureType { + Albedo, + Normal, + Metallic, + Roughness, + AO, + Emissive, + Custom +}; + +struct TextureDesc +{ + +}; + +struct Texture +{ + Handle handle; +}; + +#endif + diff --git a/Aeon/Rendering/Textures.cpp b/Aeon/Rendering/Textures.cpp new file mode 100644 index 0000000..e69de29 diff --git a/Aeon/Rendering/Textures.hpp b/Aeon/Rendering/Textures.hpp new file mode 100644 index 0000000..e69de29 diff --git a/Aeon/ResoucePool.hpp b/Aeon/ResoucePool.hpp new file mode 100644 index 0000000..e69de29 diff --git a/Game/ExampleGame.cpp b/Game/ExampleGame.cpp index f49e943..f884f89 100644 --- a/Game/ExampleGame.cpp +++ b/Game/ExampleGame.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include @@ -51,7 +51,6 @@ public: void FrameTick() override { - ImGui::Begin("Debug"); ImGui::End(); @@ -77,34 +76,14 @@ public: ExampleGame() : App({"Example"}, {"Game with AEON!"}) { - // EC::EntityRegistry registry; - // - // EC::Entity entity1 = registry.Create(); - // - // std::cout << "1: " << entity1 << std::endl; - // - // std::vector entities; - // - // for (int i = 0; i < 100; i++) - // { - // entities.push_back(registry.Create()); - // } - // - // std::cout << entities[entities.size()] << std::endl; - // - // for (int i = 0; i < 100; i++) - // { - // std::cout << "ENtity in vector pos " << i << " " << entities[i] << std::endl; - // registry.Destroy(entities[i]); - // } - // - // EC::Entity entity2 = registry.Create(); - // std::cout << "2: " << entity2 << std::endl; + const auto entity = this->mEntityRegistry.create(); + entity.emplace(); Level* level = new Level; + PushLayer((Core::GameLayer*)level); - DebugLayer* debug = new DebugLayer; - PushDebugLayer(debug); + PushDebugLayer(&debug); + DebugLayer debug; Run(); delete level; }