Fixes
This commit is contained in:
@ -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,
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -18,32 +18,30 @@
|
||||
|
||||
#include <IAEngine/Engine.hpp>
|
||||
|
||||
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
|
||||
#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
|
||||
|
||||
Reference in New Issue
Block a user