From bca7d02df87e37cb6397b714b35bda5541b4cb1a Mon Sep 17 00:00:00 2001 From: Nanako <469449812@qq.com> Date: Fri, 8 Mar 2024 17:54:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E5=87=8Fapplication=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/application/application.cpp | 15 ++++----------- core/application/application.h | 18 +----------------- core/export.cpp | 22 ++++++++++++++++++++++ core/export.h | 15 +++++++++++++++ 4 files changed, 42 insertions(+), 28 deletions(-) create mode 100644 core/export.cpp create mode 100644 core/export.h diff --git a/core/application/application.cpp b/core/application/application.cpp index ccee672..4a05392 100644 --- a/core/application/application.cpp +++ b/core/application/application.cpp @@ -2,32 +2,25 @@ #include -#include "command_line.h" +#include "misc/singleton/singleton_manager.h" #include "spdlog/async.h" -#include "spdlog/spdlog.h" #include "spdlog/sinks/basic_file_sink.h" -#include "thread_message/thread_message_hubs.h" -bool g_is_running = true; -bool g_exit_requested = false; application* g_app_instance = nullptr; -void application::init(const window_params& in_window_params, int argc, char** argv) { +void application::init(const char* runtime_dir) { try { async_spdlog_ = spdlog::basic_logger_mt("async_file_logger", "logs/log.txt"); } catch (const spdlog::spdlog_ex& ex) { std::cout << "Log init failed: " << ex.what() << std::endl; } - command_line::instance().init(argc, argv); - - g_is_running = true; + singleton_manager::get()->init(); } void application::shutdown() { - g_is_running = false; + singleton_manager::get()->release(); } void application::request_exit() { - g_exit_requested = true; } diff --git a/core/application/application.h b/core/application/application.h index 66fcc7c..ce00b5b 100644 --- a/core/application/application.h +++ b/core/application/application.h @@ -6,23 +6,8 @@ class render_target; class texture; class application; -extern bool g_is_running; -extern bool g_exit_requested; extern application* g_app_instance; -struct window_params { - std::string title; - int width; - int height; - bool fullscreen; - bool borderless; - bool resizable; - bool minimized; - bool maximized; - bool hi_dpi; - bool always_on_top; -}; - class CORE_API application { public: application() { @@ -39,13 +24,12 @@ public: return g_app_instance; } - virtual void init(const window_params& in_window_params, int argc, char** argv); + virtual void init(const char* runtime_dir); virtual void shutdown(); void request_exit(); - virtual void draw_gui() = 0; virtual void tick(float delta_time) {} protected: std::shared_ptr async_spdlog_; diff --git a/core/export.cpp b/core/export.cpp new file mode 100644 index 0000000..7c074ab --- /dev/null +++ b/core/export.cpp @@ -0,0 +1,22 @@ +#include "export.h" + +#include "application/application.h" + +core_handle::core_handle() : app_(nullptr) { + +} + +void core_handle::init_core(const char* runtime_dir) { + delete app_; + + app_ = new application(); + app_->init(runtime_dir); +} + +void core_handle::release_core() { + if (app_) { + app_->shutdown(); + delete app_; + app_ = nullptr; + } +} diff --git a/core/export.h b/core/export.h new file mode 100644 index 0000000..2e36136 --- /dev/null +++ b/core/export.h @@ -0,0 +1,15 @@ +#pragma once +#include "extern.h" + + +class application; + +class CORE_API core_handle { +public: + core_handle(); + + void init_core(const char* runtime_dir); + void release_core(); +private: + application* app_; +};