From ce9ea1fd52bde11b632369c57d8e205beaece7fa Mon Sep 17 00:00:00 2001 From: Isuru Samarathunga Date: Sun, 12 Oct 2025 20:42:31 +0530 Subject: [PATCH] Fixes --- Engine/Src/Imp/CPP/Engine.cpp | 3 +- Engine/Src/Imp/CPP/InternalEngine.cpp | 68 ++++++------------- Engine/Src/Imp/CPP/Renderer/DebugDraw.cpp | 3 +- .../Inc/IAEngine/EngineLibraryInterface.hpp | 50 +++++++------- 4 files changed, 47 insertions(+), 77 deletions(-) diff --git a/Engine/Src/Imp/CPP/Engine.cpp b/Engine/Src/Imp/CPP/Engine.cpp index d5de7ae..5e62547 100644 --- a/Engine/Src/Imp/CPP/Engine.cpp +++ b/Engine/Src/Imp/CPP/Engine.cpp @@ -24,7 +24,6 @@ namespace ia::iae { - EXTERN GameFunctionTable g_gameFunctions; EXTERN SDL_Window *g_windowHandle; SIZE_T g_resourceNameCounter = 1; @@ -57,7 +56,7 @@ namespace ia::iae SDL_SetWindowSize(g_windowHandle, newWidth, newHeight); Renderer::OnScreenResize(newWidth, newHeight); UI::OnScreenResize(newWidth, newHeight); - g_gameFunctions.OnResize(newWidth, newHeight); + Game_OnResize(newWidth, newHeight); } Handle Engine::CreateImageFromFile(IN CONST String &name, IN CONST String &path, IN INT32 resizeToWidth, diff --git a/Engine/Src/Imp/CPP/InternalEngine.cpp b/Engine/Src/Imp/CPP/InternalEngine.cpp index 7fde88e..b11f2b9 100644 --- a/Engine/Src/Imp/CPP/InternalEngine.cpp +++ b/Engine/Src/Imp/CPP/InternalEngine.cpp @@ -33,28 +33,32 @@ namespace ia::iae { - GameFunctionTable g_gameFunctions{}; + String g_gameName; + String g_gamePackageName; + String g_gameDeveloperName; + String g_gamePublisherName; + IA_VERSION_TYPE g_gameVersion{}; SDL_Window *g_windowHandle; VOID __Internal_Engine::Initialize() { - const auto config = g_gameFunctions.GetConfigRequest(); + const auto config = Game_GetConfigRequest(); - IAE_LOG_INFO("Booting IAEngine for ", g_gameFunctions.GetName()); + IAE_LOG_INFO("Booting IAEngine for ", g_gameName); if (!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_GAMEPAD)) THROW_UNKNOWN("Failed to intialize SDL: ", SDL_GetError()); - if (!(g_windowHandle = SDL_CreateWindow(g_gameFunctions.GetName(), config.ScreenWidth, config.ScreenHeight, + if (!(g_windowHandle = SDL_CreateWindow(g_gameName.c_str(), config.ScreenWidth, config.ScreenHeight, SDL_WINDOW_RESIZABLE))) THROW_UNKNOWN("Failed to create the SDL window: ", SDL_GetError()); // SDL_SetWindowResizable(g_windowHandle, false); - const auto gameVersion = g_gameFunctions.GetVersion(); - SDL_SetAppMetadata(g_gameFunctions.GetName(), BuildString(gameVersion).c_str(), - g_gameFunctions.GetPackageName()); + const auto gameVersion = g_gameVersion; + SDL_SetAppMetadata(g_gameName.c_str(), IA_STRINGIFY_VERSION(gameVersion).c_str(), + g_gamePackageName.c_str()); Time::Initialize(); Random::Initialize(); @@ -67,12 +71,12 @@ namespace ia::iae UI::Initialize(); Physics::Initialize(); - g_gameFunctions.OnInitialize(); + Game_OnInitialize(); } VOID __Internal_Engine::Terminate() { - g_gameFunctions.OnTerminate(); + Game_OnTerminate(); Physics::Terminate(); UI::Terminate(); @@ -96,8 +100,8 @@ namespace ia::iae Physics::Update(); WorldManager::Update(); WorldManager::FixedUpdate(); - g_gameFunctions.OnUpdate(Time::GetFrameDeltaTime()); - g_gameFunctions.OnFixedUpdate(); + Game_OnUpdate(Time::GetFrameDeltaTime()); + Game_OnFixedUpdate(); Renderer::BeginFrame(); WorldManager::Draw(); @@ -124,43 +128,13 @@ namespace ia::iae return (FLOAT32) m_value + ((FLOAT32) m_value * (Random::Get() * m_randomAdjustment) / 100.0f); } - BOOL ValidateGameFunctionTable(IN GameFunctionTable gameFunctionTable) + INT32 Run(IN CONST String& name, IN CONST String& packageName, IN CONST String& developerName, IN CONST String& publisherName, IN IA_VERSION_TYPE version) { - if (!gameFunctionTable.GetConfigRequest) - return false; - if (!gameFunctionTable.OnInitialize) - return false; - if (!gameFunctionTable.OnTerminate) - return false; - if (!gameFunctionTable.OnDebugDraw) - return false; - if (!gameFunctionTable.OnFixedUpdate) - return false; - if (!gameFunctionTable.OnUpdate) - return false; - if (!gameFunctionTable.OnResize) - return false; - if (!gameFunctionTable.GetName) - return false; - if (!gameFunctionTable.GetVersion) - return false; - if (!gameFunctionTable.GetPackageName) - return false; - if (!gameFunctionTable.GetDeveloperName) - return false; - if (!gameFunctionTable.GetPublisherName) - return false; - return true; - } - - INT32 Run(IN GameFunctionTable gameFunctionTable) - { - if (!ValidateGameFunctionTable(gameFunctionTable)) - { - IAE_LOG_ERROR("Invalid game function table was passed to the engine. Exiting.."); - return -1; - } - g_gameFunctions = gameFunctionTable; + g_gameName = name; + g_gameVersion = version; + g_gamePackageName = packageName; + g_gameDeveloperName = developerName; + g_gamePublisherName = publisherName; __Internal_Engine::Initialize(); diff --git a/Engine/Src/Imp/CPP/Renderer/DebugDraw.cpp b/Engine/Src/Imp/CPP/Renderer/DebugDraw.cpp index e045deb..a920b48 100644 --- a/Engine/Src/Imp/CPP/Renderer/DebugDraw.cpp +++ b/Engine/Src/Imp/CPP/Renderer/DebugDraw.cpp @@ -28,7 +28,6 @@ namespace ia::iae { - EXTERN GameFunctionTable g_gameFunctions; EXTERN SDL_Window *g_windowHandle; ImGuiIO g_imGUIIO{}; @@ -72,7 +71,7 @@ namespace ia::iae Physics::DebugDraw(); WorldManager::DebugDraw(); - g_gameFunctions.OnDebugDraw(); + Game_OnDebugDraw(); ImGui::Render(); } diff --git a/Engine/Src/Inc/IAEngine/EngineLibraryInterface.hpp b/Engine/Src/Inc/IAEngine/EngineLibraryInterface.hpp index 62d0048..c621429 100644 --- a/Engine/Src/Inc/IAEngine/EngineLibraryInterface.hpp +++ b/Engine/Src/Inc/IAEngine/EngineLibraryInterface.hpp @@ -18,32 +18,30 @@ #include +using namespace ia; +using namespace ia::iae; + +struct GameRequestedConfig +{ + INT32 ScreenWidth{}; + INT32 ScreenHeight{}; +}; + +C_DECL(GameRequestedConfig Game_GetConfigRequest()); +C_DECL(VOID Game_OnInitialize()); +C_DECL(VOID Game_OnTerminate()); +C_DECL(VOID Game_OnDebugDraw()); +C_DECL(VOID Game_OnFixedUpdate()); +C_DECL(VOID Game_OnUpdate(IN FLOAT32 deltaTime)); +C_DECL(VOID Game_OnResize(IN INT32 newWidth, IN INT32 newHeight)); + namespace ia::iae { + INT32 Run(IN CONST String& name, IN CONST String& packageName, IN CONST String& developerName, IN CONST String& publisherName, IN IA_VERSION_TYPE version); +} // namespace ia::iae - struct GameRequestedConfig - { - INT32 ScreenWidth{}; - INT32 ScreenHeight{}; - }; - - struct GameFunctionTable - { - GameRequestedConfig (*GetConfigRequest)(){nullptr}; - - VOID (*OnInitialize)(){nullptr}; - VOID (*OnTerminate)(){nullptr}; - VOID (*OnDebugDraw)(){nullptr}; - VOID (*OnFixedUpdate)(){nullptr}; - VOID (*OnUpdate)(IN FLOAT32 deltaTime){nullptr}; - VOID (*OnResize)(IN INT32 newWidth, IN INT32 newHeight){nullptr}; - - PCCHAR (*GetName)(){nullptr}; - UINT64 (*GetVersion)(){nullptr}; - PCCHAR (*GetPackageName)(){nullptr}; - PCCHAR (*GetDeveloperName)(){nullptr}; - PCCHAR (*GetPublisherName)(){nullptr}; - }; - - INT32 Run(IN GameFunctionTable gameFunctionTable); -} // namespace ia::iae \ No newline at end of file +#if defined(__ANDROID__) +#define IAENGINE_RUN(name, packageName, developerName, publisherName, versionMajor, versionMinor, versionPatch) int SDL_main(int argc, char *argv[]) { return ia::iae::Run(name, packageName, developerName, publisherName, IA_MAKE_VERSION(versionMajor, versionMinor, versionPatch)); } +#else +#define IAENGINE_RUN(name, packageName, developerName, publisherName, versionMajor, versionMinor, versionPatch) int main(int argc, char *argv[]) { return ia::iae::Run(name, packageName, developerName, publisherName, IA_MAKE_VERSION(versionMajor, versionMinor, versionPatch)); } +#endif