diff --git a/src/kekengine/cpp/common/defaults.cpp b/src/kekengine/cpp/common/defaults.cpp index 82906cd..844f59f 100644 --- a/src/kekengine/cpp/common/defaults.cpp +++ b/src/kekengine/cpp/common/defaults.cpp @@ -147,4 +147,8 @@ void init() { //UI::addElement(options); } +void destroy() { + +} + } diff --git a/src/kekengine/cpp/common/engine.cpp b/src/kekengine/cpp/common/engine.cpp index af30d62..79e8aae 100644 --- a/src/kekengine/cpp/common/engine.cpp +++ b/src/kekengine/cpp/common/engine.cpp @@ -23,6 +23,7 @@ #include "defaults.h" #include "ui.h" #include "uielements.h" +#include "physics.h" #include "internal.h" #include "internal/ui.h" @@ -120,11 +121,28 @@ int init() { glEnable(GL_CULL_FACE); glCullFace(GL_BACK); + glClearColor(0.1f, 0.3f, 0.1f, 0.0f); + glfwSwapInterval(0); + + stbi_set_flip_vertically_on_load(true); + if(Resource::init() != KEK_SUCCESS) { glfwTerminate(); return KEK_ERROR; } + FT_Error error = FT_Init_FreeType(&kekData.freetype); + if(error) { + ErrorDialog::showError("Failed to initialize FreeType: " + std::string(FT_Error_String(error))); + glfwTerminate(); + return KEK_ERROR; + } + + UI::init(); + Input::init(); + Physics::init(); + Defaults::init(); + MemoryBuffer *buf = Resource::loadResource("image/icon.png"); if(buf) { int width, height, nrChannels; @@ -147,21 +165,6 @@ int init() { glfwSetCharCallback(kekData.window, Input::onKeyCharCallback); glfwSetMouseButtonCallback(kekData.window, Input::onMouseButtonCallback); - glClearColor(0.1f, 0.3f, 0.1f, 0.0f); - glfwSwapInterval(0); - - stbi_set_flip_vertically_on_load(true); - - FT_Error error = FT_Init_FreeType(&kekData.freetype); - if(error) { - ErrorDialog::showError("Failed to initialize FreeType: " + std::string(FT_Error_String(error))); - glfwTerminate(); - return KEK_ERROR; - } - - UI::init(); - Defaults::init(); - fpsText = new TextElement(uiPx(0), uiPx(0)); UI::addElement(fpsText); @@ -292,6 +295,15 @@ int start() { return KEK_SUCCESS; } +void exit() { + FT_Done_FreeType(kekData.freetype); + Defaults::destroy(); + Physics::destroy(); + Input::destroy(); + UI::destroy(); + Resource::destroy(); +} + void setActiveScene(Scene *scene) { kekData.activeScene = scene; } diff --git a/src/kekengine/cpp/util/resource.cpp b/src/kekengine/cpp/util/resource.cpp index a69f5a4..3ed5420 100644 --- a/src/kekengine/cpp/util/resource.cpp +++ b/src/kekengine/cpp/util/resource.cpp @@ -19,7 +19,7 @@ int init() { return KEK_SUCCESS; } -void exit() { +void destroy() { mtar_close(&resources); } diff --git a/src/kekengine/include/defaults.h b/src/kekengine/include/defaults.h index 223fe53..4702189 100644 --- a/src/kekengine/include/defaults.h +++ b/src/kekengine/include/defaults.h @@ -3,5 +3,6 @@ namespace kek::Defaults { void init(); +void destroy(); } diff --git a/src/kekengine/include/engine.h b/src/kekengine/include/engine.h index 92f71ca..7b436c1 100644 --- a/src/kekengine/include/engine.h +++ b/src/kekengine/include/engine.h @@ -5,8 +5,8 @@ namespace kek::Engine { int init(); - int start(); +void exit(); void setActiveScene(Scene *scene); diff --git a/src/kekengine/include/kekengine.h b/src/kekengine/include/kekengine.h index 9e9ca21..e8c750c 100644 --- a/src/kekengine/include/kekengine.h +++ b/src/kekengine/include/kekengine.h @@ -12,6 +12,7 @@ #include "mesh.h" #include "object.h" #include "objparser.h" +#include "physics.h" #include "resource.h" #include "scene.h" #include "shader.h" diff --git a/src/kekengine/include/resource.h b/src/kekengine/include/resource.h index 4448fc2..a5c653e 100644 --- a/src/kekengine/include/resource.h +++ b/src/kekengine/include/resource.h @@ -8,6 +8,7 @@ namespace kek::Resource { int init(); +void destroy(); MemoryBuffer *loadResource(std::string path);