Engine Interface

This commit is contained in:
Isuru Samarathunga
2025-10-04 02:21:36 +05:30
parent ff73221cae
commit 5408f07e97
8 changed files with 230 additions and 23 deletions

View File

@ -17,36 +17,87 @@
#include <Engine.hpp>
#include <IAEngine/Engine.hpp>
GameFunctionTable g_gameFunctions{};
//SDL_SetAppMetadata("SDL Hello World Example", "1.0", "com.example.sdl-hello-world");
namespace ia::iae
{
}
#include <SDL3/SDL.h>
#include <IAEngine/EngineInterface.hpp>
GameFunctionTable g_gameFunctions{};
namespace ia::iae
{
String GetStringVersion(IN UINT64 version)
{
return "";
}
VOID __Internal_Engine::Initialize()
{
IAE_LOG_INFO("Booting IAEngine for ", g_gameFunctions.GetName());
SDL_SetAppMetadata(g_gameFunctions.GetName(), GetStringVersion(g_gameFunctions.GetVersion()).c_str(),
g_gameFunctions.GetPackageName());
g_gameFunctions.OnInitialize();
}
VOID __Internal_Engine::Terminate()
{
g_gameFunctions.OnTerminate();
IAE_LOG_INFO("Shutting down IAEngine");
}
VOID __Internal_Engine::Iterate()
{
}
VOID __Internal_Engine::ProcessEvent(IN SDL_Event *event)
{
switch (event->type)
{
case SDL_EVENT_WINDOW_RESIZED:
break;
}
}
} // namespace ia::iae
namespace ia::iae
{
}
BOOL ValidateGameFunctionTable(IN GameFunctionTable gameFunctionTable)
{
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;
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;
}
C_DECL(IAE_DLL_API ia::BOOL IAEngine_OnInitialize(IN GameFunctionTable gameFunctionTable))
{
if(!ValidateGameFunctionTable(gameFunctionTable))
if (!ValidateGameFunctionTable(gameFunctionTable))
{
IAE_LOG_ERROR("Invalid game function table was passed to the engine. Exiting..");
return false;
@ -54,21 +105,23 @@ C_DECL(IAE_DLL_API ia::BOOL IAEngine_OnInitialize(IN GameFunctionTable gameFunct
g_gameFunctions = gameFunctionTable;
IAE_LOG_INFO("Booting IAEngine for ", gameFunctionTable.GetName());
__Internal_Engine::Initialize();
return true;
}
C_DECL(IAE_DLL_API ia::VOID IAEngine_OnTerminate())
{
IAE_LOG_INFO("Shutting down IAEngine");
__Internal_Engine::Terminate();
}
C_DECL(IAE_DLL_API ia::BOOL IAEngine_OnIterate())
{
__Internal_Engine::Iterate();
return true;
}
C_DECL(IAE_DLL_API ia::VOID IAEngine_OnEvent(IN PVOID event))
{
__Internal_Engine::ProcessEvent((SDL_Event *) event);
}