diff --git a/Src/IAESandbox/CMakeLists.txt b/Src/IAESandbox/CMakeLists.txt index 05963f4..e51430d 100644 --- a/Src/IAESandbox/CMakeLists.txt +++ b/Src/IAESandbox/CMakeLists.txt @@ -2,9 +2,6 @@ set(IAESandbox_Sources imp/cpp/Main.cpp imp/cpp/Game.cpp - imp/cpp/Map.cpp - imp/cpp/Ground.cpp - imp/cpp/Player.cpp ) add_executable(IAESandbox ${IAESandbox_Sources}) diff --git a/Src/IAESandbox/imp/cpp/Game.cpp b/Src/IAESandbox/imp/cpp/Game.cpp index 1e50550..8a9e344 100644 --- a/Src/IAESandbox/imp/cpp/Game.cpp +++ b/Src/IAESandbox/imp/cpp/Game.cpp @@ -1,8 +1,5 @@ #include -#include -#include -#include #include #include @@ -11,33 +8,24 @@ namespace ia::iae::game { RefPtr scene; - ResourceManager* g_resourceManager{}; - - RefPtr g_tex; + Texture g_tex; VOID Game::Initialize() { - g_resourceManager = m_engine->RegisterResourceManager(); - - scene = m_engine->CreateScene(); - m_engine->ChangeScene(scene); - - iae::Renderer::AddDebugUIWindow("Debug Window", {100, 100}, {100, 200}, [](){}); + scene = Engine::CreateScene(); + Engine::ChangeScene(scene); const auto d = File::ReadToVector("Graphics/1.jpg"); - g_tex = g_resourceManager->CreateTexture(d.data(), d.size()); - - + g_tex = Engine::CreateTexture(d.data(), d.size()); } VOID Game::Terminate() { - g_tex.reset(); } VOID Game::Update() { - g_tex->Draw({200.0f, 150.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, 0.0f, false, false, {1.0f, 1.0f, 1.0f, 1.0f}); + g_tex.Draw({200.0f, 150.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, 0.0f, false, false, {1.0f, 1.0f, 1.0f, 1.0f}); iae::Renderer::GetCamera()->Position().x += 0.1f; } } \ No newline at end of file diff --git a/Src/IAESandbox/imp/cpp/Ground.cpp b/Src/IAESandbox/imp/cpp/Ground.cpp deleted file mode 100644 index 9e327bc..0000000 --- a/Src/IAESandbox/imp/cpp/Ground.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include - -#include - -#include - -namespace ia::iae::game -{ - extern ResourceManager* g_resourceManager; - - Handle m_id2; - - Ground::Ground(IN Engine *engine) : m_engine(engine) - { - m_spriteRenderer = AddComponent(); - } - - VOID Ground::OnAdded(IN Scene *scene) - { - Node::OnAdded(scene); - - iae::SpriteRendererComponent::AnimationKeyFrame keyFrame{}; - const auto d = File::ReadToVector("Graphics/red.png"); - keyFrame.Texture = g_resourceManager->CreateTexture(d.data(), d.size()); - keyFrame.Scale = {3.0f, 0.25f, 1.0f}; - - m_spriteRenderer->AddAnimation({.ShouldLoop = true, .Keys = {keyFrame}}); - m_spriteRenderer->BakeAnimations(); - - //m_id2 = Physics::CreateStaticBody({GetPosition().X + 300, GetPosition().Y + 25}); - //Physics::AddBoxCollider(m_id2, {600.0f, 50.0f}); - } - - VOID Ground::OnRemoved() - { - - Node::OnRemoved(); - } - - VOID Ground::Draw() - { - Node::Draw(); - } - - VOID Ground::Update() - { - Node::Update(); - } -} // namespace ia::iae::game \ No newline at end of file diff --git a/Src/IAESandbox/imp/cpp/Main.cpp b/Src/IAESandbox/imp/cpp/Main.cpp index d1d2c01..e80dbde 100644 --- a/Src/IAESandbox/imp/cpp/Main.cpp +++ b/Src/IAESandbox/imp/cpp/Main.cpp @@ -1,20 +1,18 @@ #include -ia::iae::Engine g_engine; - int main(int argc, char *argv[]) { - g_engine.Initialize({.GameName = "IAE Sandbox", .WindowWidth = 800, .WindowHeight = 600}); - const auto game = new ia::iae::game::Game(&g_engine); + ia::iae::Engine::Initialize({.GameName = "IAE Sandbox", .WindowWidth = 800, .WindowHeight = 600}); + const auto game = new ia::iae::game::Game(); game->Initialize(); - while (!g_engine.ShouldClose()) + while (!ia::iae::Engine::ShouldClose()) { - g_engine.BeginFrame(); + ia::iae::Engine::BeginFrame(); game->Update(); - g_engine.EndFrame(); + ia::iae::Engine::EndFrame(); } game->Terminate(); delete game; - g_engine.Terminate(); + ia::iae::Engine::Terminate(); return 0; } \ No newline at end of file diff --git a/Src/IAESandbox/imp/cpp/Map.cpp b/Src/IAESandbox/imp/cpp/Map.cpp deleted file mode 100644 index 824e868..0000000 --- a/Src/IAESandbox/imp/cpp/Map.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include - -namespace ia::iae::game -{ - TiledMap::TiledMap(IN Engine *engine) : m_engine(engine) - { - //m_musicEmitter = AddComponent(); - //m_atlasRenderer = AddComponent(); - } - - VOID TiledMap::OnAdded(IN Scene *scene) - { - Node::OnAdded(scene); - } - - VOID TiledMap::OnRemoved() - { - Node::OnRemoved(); - } - - VOID TiledMap::Draw() - { - Node::Draw(); - } - - VOID TiledMap::Update() - { - Node::Update(); - } -} // namespace ia::iae::game \ No newline at end of file diff --git a/Src/IAESandbox/imp/cpp/Player.cpp b/Src/IAESandbox/imp/cpp/Player.cpp deleted file mode 100644 index 42e1b4b..0000000 --- a/Src/IAESandbox/imp/cpp/Player.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#include - -#include -#include - -#include - -namespace ia::iae::game -{ - extern ResourceManager* g_resourceManager; - - Handle m_id; - - Player::Player(IN Engine *engine) : m_engine(engine) - { - m_spriteRenderer = AddComponent(); - } - - VOID Player::OnAdded(IN Scene *scene) - { - Node::OnAdded(scene); - - iae::SpriteRendererComponent::AnimationKeyFrame keyFrame{}; - const auto d = File::ReadToVector("Graphics/green.png"); - keyFrame.Texture = g_resourceManager->CreateTexture(d.data(), d.size()); - keyFrame.Scale = {0.2f, 0.2f, 1.0f}; - - m_spriteRenderer->AddAnimation({.ShouldLoop = true, .Keys = {keyFrame}}); - m_spriteRenderer->BakeAnimations(); - - //m_id = Physics::CreateDynamicBody({GetPosition().X + 20, GetPosition().Y + 20}); - //Physics::AddBoxCollider(m_id, {40.0f, 40.0f}); - } - - VOID Player::OnRemoved() - { - - Node::OnRemoved(); - } - - VOID Player::Draw() - { - Node::Draw(); - } - - VOID Player::Update() - { - Node::Update(); - SetLocalPosition(Physics::GetBodyPosition(m_id) - glm::vec3{20.0f, 20.0f, 0.0f}); - } -} // namespace ia::iae::game \ No newline at end of file diff --git a/Src/IAESandbox/imp/hpp/Game.hpp b/Src/IAESandbox/imp/hpp/Game.hpp index ab6afba..b00858a 100644 --- a/Src/IAESandbox/imp/hpp/Game.hpp +++ b/Src/IAESandbox/imp/hpp/Game.hpp @@ -7,13 +7,8 @@ namespace ia::iae::game class Game { public: - Game(IN Engine* engine): m_engine(engine) {} - VOID Initialize(); VOID Terminate(); VOID Update(); - - private: - Engine* CONST m_engine; }; } \ No newline at end of file diff --git a/Src/IAESandbox/imp/hpp/Ground.hpp b/Src/IAESandbox/imp/hpp/Ground.hpp deleted file mode 100644 index ab550fb..0000000 --- a/Src/IAESandbox/imp/hpp/Ground.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include -#include -#include - -namespace ia::iae::game -{ - class Ground : public Node - { - public: - Ground(IN Engine *engine); - - VIRTUAL VOID OnAdded(IN Scene *scene) OVERRIDE; - VIRTUAL VOID OnRemoved() OVERRIDE; - VIRTUAL VOID Draw() OVERRIDE; - VIRTUAL VOID Update() OVERRIDE; - - private: - INT32 m_speed{}; - UINT8 m_direction{}; - - private: - Engine *CONST m_engine; - SpriteRendererComponent* m_spriteRenderer; - }; -} // namespace ia::iae::game \ No newline at end of file diff --git a/Src/IAESandbox/imp/hpp/Map.hpp b/Src/IAESandbox/imp/hpp/Map.hpp deleted file mode 100644 index e8d0ea5..0000000 --- a/Src/IAESandbox/imp/hpp/Map.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once - -#include -#include -#include - -namespace ia::iae::game -{ - class TiledMap : public Node - { - public: - TiledMap(IN Engine* engine); - - VIRTUAL VOID OnAdded(IN Scene *scene) OVERRIDE; - VIRTUAL VOID OnRemoved() OVERRIDE; - VIRTUAL VOID Draw() OVERRIDE; - VIRTUAL VOID Update() OVERRIDE; - - private: - Engine* CONST m_engine; - RefPtr m_musicEmitter; - RefPtr m_atlasRenderer; - }; -} \ No newline at end of file diff --git a/Src/IAESandbox/imp/hpp/Player.hpp b/Src/IAESandbox/imp/hpp/Player.hpp deleted file mode 100644 index e916d9b..0000000 --- a/Src/IAESandbox/imp/hpp/Player.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include -#include -#include - -namespace ia::iae::game -{ - class Player : public Node - { - public: - Player(IN Engine *engine); - - VIRTUAL VOID OnAdded(IN Scene *scene) OVERRIDE; - VIRTUAL VOID OnRemoved() OVERRIDE; - VIRTUAL VOID Draw() OVERRIDE; - VIRTUAL VOID Update() OVERRIDE; - - private: - INT32 m_speed{}; - UINT8 m_direction{}; - - private: - Engine *CONST m_engine; - SpriteRendererComponent* m_spriteRenderer; - }; -} // namespace ia::iae::game \ No newline at end of file diff --git a/Src/IAEngine/CMakeLists.txt b/Src/IAEngine/CMakeLists.txt index b0faf4e..9b120a3 100644 --- a/Src/IAEngine/CMakeLists.txt +++ b/Src/IAEngine/CMakeLists.txt @@ -8,8 +8,6 @@ set(IAEngine_Sources imp/cpp/Random.cpp imp/cpp/Texture.cpp - imp/cpp/ResourceManager.cpp - imp/cpp/Rendering/Camera.cpp imp/cpp/Rendering/Renderer.cpp imp/cpp/Rendering/GPUBuffer.cpp diff --git a/Src/IAEngine/imp/cpp/IAEngine.cpp b/Src/IAEngine/imp/cpp/IAEngine.cpp index 5a62e12..f940bd9 100644 --- a/Src/IAEngine/imp/cpp/IAEngine.cpp +++ b/Src/IAEngine/imp/cpp/IAEngine.cpp @@ -14,6 +14,8 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +#include + #include #include #include @@ -23,31 +25,24 @@ #include -#include #include +#include -namespace ia::iae -{ - struct EngineContext - { - SDL_Window *Window{}; - SDL_Event Event{}; - - BOOL ShouldClose{false}; - }; -} // namespace ia::iae +#define STB_IMAGE_IMPLEMENTATION +#include namespace ia::iae { CONSTEXPR FLOAT32 GAME_UPDATE_INTERVAL = 1000.0f / 60.0f; - Engine::Engine() : m_context(MakeRefPtr()) - { - } + SDL_Event g_event{}; + FLOAT32 g_updateTimer{}; + BOOL g_shouldClose{false}; + SDL_Window *g_windowHandle{}; + Vector> g_gpuTextureRefs; + + RefPtr g_activeScene; - Engine::~Engine() - { - } BOOL Engine::Initialize(IN CONST InitConfig &config) { @@ -59,16 +54,17 @@ namespace ia::iae return false; } - if (!(m_context->Window = SDL_CreateWindow(config.GameName.c_str(), config.WindowWidth, config.WindowHeight, SDL_WINDOW_RESIZABLE))) + if (!(g_windowHandle = SDL_CreateWindow(config.GameName.c_str(), config.WindowWidth, config.WindowHeight, + SDL_WINDOW_RESIZABLE))) { IAE_LOG_ERROR("Couldn't create SDL3 window: ", SDL_GetError()); return false; } - SDL_SetWindowResizable(m_context->Window, false); + SDL_SetWindowResizable(g_windowHandle, false); Time::Initialize(); - if (!Renderer::Initialize(this)) + if (!Renderer::Initialize()) return false; Random::Initialize(); @@ -84,29 +80,30 @@ namespace ia::iae { IAE_LOG_INFO("Shutting down IAEngine"); - m_resourceManager.reset(); + for (auto &t : g_gpuTextureRefs) + t.reset(); - Physics::Terminate(); - Audio::Terminate(); Renderer::Terminate(); + Audio::Terminate(); + Physics::Terminate(); - SDL_DestroyWindow(m_context->Window); + SDL_DestroyWindow(g_windowHandle); SDL_Quit(); } VOID Engine::BeginFrame() { - SDL_PollEvent(&m_context->Event); - if (m_context->Event.type == SDL_EVENT_QUIT) - m_context->ShouldClose = true; + SDL_PollEvent(&g_event); + if (g_event.type == SDL_EVENT_QUIT) + g_shouldClose = true; ProcessEvents(); - m_updateTimer += Time::GetFrameDeltaTime(); - if (m_updateTimer >= GAME_UPDATE_INTERVAL) + g_updateTimer += Time::GetFrameDeltaTime(); + if (g_updateTimer >= GAME_UPDATE_INTERVAL) { UpdateGame(); - while (m_updateTimer >= GAME_UPDATE_INTERVAL) - m_updateTimer -= GAME_UPDATE_INTERVAL; + while (g_updateTimer >= GAME_UPDATE_INTERVAL) + g_updateTimer -= GAME_UPDATE_INTERVAL; } Renderer::BeginFrame(); RenderGame(); @@ -120,41 +117,72 @@ namespace ia::iae BOOL Engine::ShouldClose() { - return m_context->ShouldClose; + return g_shouldClose; } VOID Engine::ProcessEvents() { - ImGui_ImplSDL3_ProcessEvent(&m_context->Event); - Input::OnEvent(&m_context->Event); + ImGui_ImplSDL3_ProcessEvent(&g_event); + Input::OnEvent(&g_event); } VOID Engine::UpdateGame() { Physics::Update(); - if B_LIKELY (m_activeScene) - m_activeScene->Update(); + if B_LIKELY (g_activeScene) + g_activeScene->Update(); } VOID Engine::RenderGame() { - if B_LIKELY (m_activeScene) - m_activeScene->Draw(); + if B_LIKELY (g_activeScene) + g_activeScene->Draw(); } VOID Engine::ChangeScene(IN RefPtr scene) { - m_activeScene = scene; - } - - RefPtr Engine::CreateScene() - { - return MakeRefPtr(this); - } - - PVOID Engine::GetWindowHandle() CONST - { - return m_context->Window; + g_activeScene = scene; } } // namespace ia::iae + +namespace ia::iae +{ + RefPtr Engine::CreateScene() + { + return MakeRefPtr(); + } + + Texture Engine::CreateTexture(IN CONST Vector &encodedData) + { + return CreateTexture(encodedData.data(), encodedData.size()); + } + + Texture Engine::CreateTexture(IN PCUINT8 encodedData, IN SIZE_T encodedDataSize) + { + INT32 w, h, nrChannels; + const auto pixels = stbi_load_from_memory(encodedData, encodedDataSize, &w, &h, &nrChannels, STBI_rgb_alpha); + if (!pixels) + THROW_INVALID_DATA("Failed to decode the provided image data"); + const auto result = CreateTexture((PCUINT8) pixels, w, h); + STBI_FREE(pixels); + return result; + } + + Texture Engine::CreateTexture(IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height) + { + const auto t = GPUTexture::Create(rgbaData, width, height); + g_gpuTextureRefs.pushBack(t); + return Texture(t->GetHandle(), width, height); + } + + Sound Engine::CreateSound(IN PCUINT8 audioData, IN SIZE_T audioDataSize) + { + return Audio::CreateSound(audioData, audioDataSize); + } + + Sound Engine::CreateSound(IN CONST Vector &audioData) + { + return CreateSound(audioData.data(), audioData.size()); + } +} // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/imp/cpp/Nodes/Node.cpp b/Src/IAEngine/imp/cpp/Nodes/Node.cpp index 1850b0f..cab9647 100644 --- a/Src/IAEngine/imp/cpp/Nodes/Node.cpp +++ b/Src/IAEngine/imp/cpp/Nodes/Node.cpp @@ -36,47 +36,11 @@ namespace ia::iae VOID Node::Draw() { - BOOL drew = false; for (auto &n : m_children) - { - if (((INT32) n->GetPosition().z) >= 0) - continue; n->Draw(); - } - if(((INT32) GetPosition().z) < 0) - { - for (auto &c : m_components) - c->Draw(); - } - - for (INT32 i = 0; i < 8; i++) // [IATODO] - { - for (auto &n : m_children) - { - if (((INT32) n->GetPosition().z) != i) - continue; - n->Draw(); - } - if (((INT32) GetPosition().z) == i) - { - for (auto &c : m_components) - c->Draw(); - } - } - - for (auto &n : m_children) - { - if (((INT32) n->GetPosition().z) < 8) - continue; - n->Draw(); - } - - if(((INT32) GetPosition().z) > 8) - { - for (auto &c : m_components) - c->Draw(); - } + for (auto &c : m_components) + c->Draw(); } VOID Node::Update() diff --git a/Src/IAEngine/imp/cpp/Rendering/Renderer.cpp b/Src/IAEngine/imp/cpp/Rendering/Renderer.cpp index 5d2202b..fabde9f 100644 --- a/Src/IAEngine/imp/cpp/Rendering/Renderer.cpp +++ b/Src/IAEngine/imp/cpp/Rendering/Renderer.cpp @@ -29,11 +29,12 @@ namespace ia::iae { + EXTERN SDL_Window *g_windowHandle; + INT32 Renderer::s_width{}; INT32 Renderer::s_height{}; Vector Renderer::s_debugUIWindows; - SDL_Window *g_windowHandle{}; SDL_GPUDevice *g_gpuDevice{}; // Render State @@ -53,12 +54,11 @@ namespace ia::iae glm::mat4 matView{1.0f}; glm::mat4 matModel{1.0f}; - BOOL Renderer::Initialize(IN Engine *engine) + BOOL Renderer::Initialize() { - g_windowHandle = (SDL_Window *) engine->GetWindowHandle(); SDL_GetWindowSizeInPixels(g_windowHandle, &s_width, &s_height); - if (!(g_gpuDevice = SDL_CreateGPUDevice(SDL_GPU_SHADERFORMAT_SPIRV, engine->IsDebugMode, nullptr))) + if (!(g_gpuDevice = SDL_CreateGPUDevice(SDL_GPU_SHADERFORMAT_SPIRV, Engine::IsDebugMode, nullptr))) { IAE_LOG_ERROR("Couldn't create SDL3 GPU Device: ", SDL_GetError()); return false; diff --git a/Src/IAEngine/imp/cpp/ResourceManager.cpp b/Src/IAEngine/imp/cpp/ResourceManager.cpp deleted file mode 100644 index af4011f..0000000 --- a/Src/IAEngine/imp/cpp/ResourceManager.cpp +++ /dev/null @@ -1,60 +0,0 @@ -// IAEngine: 2D Game Engine by IA -// Copyright (C) 2025 IAS (ias@iasoft.dev) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#include -#include -#include - -#include - -#define STB_IMAGE_IMPLEMENTATION -#include - -namespace ia::iae -{ - ResourceManager::ResourceManager(IN Engine *engine) : m_engine(engine) - { - } - - ResourceManager::~ResourceManager() - { - for(auto& t: m_textures) - t.reset(); - } - - RefPtr ResourceManager::CreateTexture(IN CONST Span &encodedData) - { - return CreateTexture(encodedData.data(), encodedData.size()); - } - - RefPtr ResourceManager::CreateTexture(IN PCUINT8 encodedData, IN SIZE_T encodedDataSize) - { - INT32 w, h, nrChannels; - const auto pixels = stbi_load_from_memory(encodedData, encodedDataSize, &w, &h, &nrChannels, STBI_rgb_alpha); - if (!pixels) - THROW_INVALID_DATA("Failed to decode the provided image data"); - const auto result = CreateTexture((PCUINT8) pixels, w, h); - STBI_FREE(pixels); - return result; - } - - RefPtr ResourceManager::CreateTexture(IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height) - { - const auto t = GPUTexture::Create(rgbaData, width, height); - m_textures.pushBack(t); - return MakeRefPtr(t->GetHandle(), width, height); - } -} // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/imp/cpp/Scene.cpp b/Src/IAEngine/imp/cpp/Scene.cpp index e78fa4d..db81fde 100644 --- a/Src/IAEngine/imp/cpp/Scene.cpp +++ b/Src/IAEngine/imp/cpp/Scene.cpp @@ -18,39 +18,10 @@ namespace ia::iae { - Scene::Scene(IN Engine *engine) : m_engine(engine) - { - } - - Scene::~Scene() - { - } - VOID Scene::Draw() { for (auto &n : m_nodes) - { - if (((INT32) n->GetPosition().z) >= 0) - continue; n->Draw(); - } - - for (INT32 i = 0; i < 8; i++) // [IATODO] - { - for (auto &n : m_nodes) - { - if (((INT32) n->GetPosition().z) != i) - continue; - n->Draw(); - } - } - - for (auto &n : m_nodes) - { - if (((INT32) n->GetPosition().z) < 8) - continue; - n->Draw(); - } } VOID Scene::Update() diff --git a/Src/IAEngine/imp/cpp/Texture.cpp b/Src/IAEngine/imp/cpp/Texture.cpp index 31844da..c4ea8a9 100644 --- a/Src/IAEngine/imp/cpp/Texture.cpp +++ b/Src/IAEngine/imp/cpp/Texture.cpp @@ -17,13 +17,17 @@ #include #include -#include #include +#include namespace ia::iae { - Texture::Texture(IN Handle handle,IN INT32 width, IN INT32 height): - m_handle(handle), m_size({(FLOAT32)width, (FLOAT32)height, 1.0f}) + Texture::Texture() + { + } + + Texture::Texture(IN Handle handle, IN INT32 width, IN INT32 height) + : m_handle(handle), m_size({(FLOAT32) width, (FLOAT32) height, 1.0f}) { } diff --git a/Src/IAEngine/inc/IAEngine/IAEngine.hpp b/Src/IAEngine/inc/IAEngine/IAEngine.hpp index d27e441..c311f4b 100644 --- a/Src/IAEngine/inc/IAEngine/IAEngine.hpp +++ b/Src/IAEngine/inc/IAEngine/IAEngine.hpp @@ -16,16 +16,13 @@ #pragma once -#include +#include #include -#include -#include #include +#include namespace ia::iae { - struct EngineContext; - class Engine { public: @@ -43,41 +40,28 @@ namespace ia::iae #endif public: - Engine(); - ~Engine(); + STATIC BOOL Initialize(IN CONST InitConfig &config); + STATIC VOID Terminate(); - BOOL Initialize(IN CONST InitConfig &config); - VOID Terminate(); + STATIC VOID BeginFrame(); + STATIC VOID EndFrame(); + STATIC BOOL ShouldClose(); - VOID BeginFrame(); - VOID EndFrame(); - BOOL ShouldClose(); - - template _class_type *RegisterResourceManager(); + STATIC VOID ChangeScene(IN RefPtr scene); public: - RefPtr CreateScene(); + STATIC RefPtr CreateScene(); - VOID ChangeScene(IN RefPtr scene); - - public: - PVOID GetWindowHandle() CONST; + STATIC Texture CreateTexture(IN CONST Vector &encodedData); + STATIC Texture CreateTexture(IN PCUINT8 encodedData, IN SIZE_T encodedDataSize); + STATIC Texture CreateTexture(IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height); + STATIC Sound CreateSound(IN CONST Vector &audioData); + STATIC Sound CreateSound(IN PCUINT8 audioData, IN SIZE_T audioDataSize); + private: - VOID ProcessEvents(); - VOID UpdateGame(); - VOID RenderGame(); - - private: - FLOAT32 m_updateTimer{}; - RefPtr m_activeScene{}; - CONST RefPtr m_context; - RefPtr m_resourceManager; + STATIC VOID ProcessEvents(); + STATIC VOID UpdateGame(); + STATIC VOID RenderGame(); }; - - template _class_type *Engine::RegisterResourceManager() - { - m_resourceManager = MakeRefPtr<_class_type>(this); - return (_class_type *) m_resourceManager.get(); - } } // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/inc/IAEngine/Rendering/Renderer.hpp b/Src/IAEngine/inc/IAEngine/Rendering/Renderer.hpp index d15782b..f397488 100644 --- a/Src/IAEngine/inc/IAEngine/Rendering/Renderer.hpp +++ b/Src/IAEngine/inc/IAEngine/Rendering/Renderer.hpp @@ -20,7 +20,6 @@ namespace ia::iae { - class Engine; class Camera2D; class Renderer @@ -34,7 +33,7 @@ namespace ia::iae }; public: - STATIC BOOL Initialize(IN Engine *engine); + STATIC BOOL Initialize(); STATIC VOID Terminate(); public: diff --git a/Src/IAEngine/inc/IAEngine/ResourceManager.hpp b/Src/IAEngine/inc/IAEngine/ResourceManager.hpp deleted file mode 100644 index 0f1f590..0000000 --- a/Src/IAEngine/inc/IAEngine/ResourceManager.hpp +++ /dev/null @@ -1,53 +0,0 @@ -// IAEngine: 2D Game Engine by IA -// Copyright (C) 2025 IAS (ias@iasoft.dev) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#pragma once - -#include -#include - -namespace ia::iae -{ - class Engine; - - class ResourceManager - { - public: - ResourceManager(IN Engine *engine); - ~ResourceManager(); - - RefPtr CreateTexture(IN CONST Span &encodedData); - RefPtr CreateTexture(IN PCUINT8 encodedData, IN SIZE_T encodedDataSize); - RefPtr CreateTexture(IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height); - - public: - Sound CreateSound(IN PCUINT8 audioData, IN SIZE_T audioDataSize) - { - return Audio::CreateSound(audioData, audioDataSize); - } - - Sound CreateSound(IN CONST Vector &audioData) - { - return CreateSound(audioData.data(), audioData.size()); - } - - protected: - Engine *CONST m_engine; - Vector> m_textures; - - friend class Engine; - }; -} // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/inc/IAEngine/Scene.hpp b/Src/IAEngine/inc/IAEngine/Scene.hpp index 3aa2e1b..31574d5 100644 --- a/Src/IAEngine/inc/IAEngine/Scene.hpp +++ b/Src/IAEngine/inc/IAEngine/Scene.hpp @@ -20,14 +20,9 @@ namespace ia::iae { - class Engine; - class Scene { public: - Scene(IN Engine* engine); - ~Scene(); - VOID Draw(); VOID Update(); @@ -42,7 +37,6 @@ namespace ia::iae } private: - Engine* CONST m_engine; Vector> m_nodes; }; } // namespace ia::iae \ No newline at end of file diff --git a/Src/IAEngine/inc/IAEngine/Texture.hpp b/Src/IAEngine/inc/IAEngine/Texture.hpp index 0329ab2..56f7a05 100644 --- a/Src/IAEngine/inc/IAEngine/Texture.hpp +++ b/Src/IAEngine/inc/IAEngine/Texture.hpp @@ -24,6 +24,7 @@ namespace ia::iae { public: Texture(IN Handle handle, IN INT32 width, IN INT32 height); + Texture(); ~Texture(); public: @@ -42,7 +43,7 @@ namespace ia::iae } private: - CONST Handle m_handle{}; - CONST glm::vec3 m_size; + Handle m_handle{INVALID_HANDLE}; + glm::vec3 m_size{}; }; } // namespace ia::iae \ No newline at end of file