refactor: add GUI instance reference to UI nodes

This commit is contained in:
MihailRis
2025-04-02 14:55:53 +03:00
parent 74a94f869c
commit 4c48afbb90
70 changed files with 1133 additions and 832 deletions
+15 -28
View File
@@ -50,8 +50,6 @@
static debug::Logger logger("engine");
namespace fs = std::filesystem;
static std::unique_ptr<ImageData> load_icon() {
try {
auto file = "res:textures/misc/icon.png";
@@ -65,20 +63,21 @@ static std::unique_ptr<ImageData> load_icon() {
}
Engine::Engine() = default;
Engine::~Engine() = default;
static std::unique_ptr<Engine> engine;
static std::unique_ptr<Engine> instance = nullptr;
Engine& Engine::getInstance() {
if (!engine) {
engine = std::make_unique<Engine>();
if (!instance) {
instance = std::make_unique<Engine>();
}
return *engine;
return *instance;
}
void Engine::initialize(CoreParameters coreParameters) {
params = std::move(coreParameters);
settingsHandler = std::make_unique<SettingsHandler>(settings);
interpreter = std::make_unique<cmd::CommandsInterpreter>();
cmd = std::make_unique<cmd::CommandsInterpreter>();
network = network::Network::create(settings.network);
logger.info() << "engine version: " << ENGINE_VERSION_STRING;
@@ -97,7 +96,7 @@ void Engine::initialize(CoreParameters coreParameters) {
controller = std::make_unique<EngineController>(*this);
if (!params.headless) {
if (Window::initialize(&settings.display)){
if (!(input = Window::initialize(&settings.display))){
throw initialize_error("could not initialize window");
}
time.set(Window::time());
@@ -107,9 +106,9 @@ void Engine::initialize(CoreParameters coreParameters) {
}
loadControls();
gui = std::make_unique<gui::GUI>();
gui = std::make_unique<gui::GUI>(*this);
if (ENGINE_DEBUG_BUILD) {
menus::create_version_label(*this);
menus::create_version_label(*gui);
}
}
audio::initialize(!params.headless, settings.audio);
@@ -209,7 +208,7 @@ void Engine::nextFrame() {
: settings.display.framerate.get()
);
Window::swapBuffers();
Events::pollEvents();
input->pollEvents();
}
void Engine::renderFrame() {
@@ -229,7 +228,7 @@ void Engine::saveSettings() {
}
}
Engine::~Engine() {
void Engine::close() {
saveSettings();
logger.info() << "shutting down";
if (screen) {
@@ -238,7 +237,7 @@ Engine::~Engine() {
}
content.reset();
assets.reset();
interpreter.reset();
cmd.reset();
if (gui) {
gui.reset();
logger.info() << "gui finished";
@@ -256,17 +255,14 @@ Engine::~Engine() {
}
void Engine::terminate() {
engine.reset();
instance->close();
instance.reset();
}
EngineController* Engine::getController() {
return controller.get();
}
cmd::CommandsInterpreter* Engine::getCommandsInterpreter() {
return interpreter.get();
}
PacksManager Engine::createPacksManager(const io::path& worldFolder) {
PacksManager manager;
manager.setSources({
@@ -286,7 +282,7 @@ void Engine::loadAssets() {
Shader::preprocessor->setPaths(resPaths.get());
auto new_assets = std::make_unique<Assets>();
AssetsLoader loader(new_assets.get(), resPaths.get());
AssetsLoader loader(*this, *new_assets, resPaths.get());
AssetsLoader::addDefaults(loader, content.get());
// no need
@@ -376,7 +372,6 @@ void Engine::loadContent() {
load_configs(pack.folder);
}
content = contentBuilder.build();
interpreter->reset();
scripting::on_content_load(content.get());
ContentLoader::loadScripts(*content);
@@ -468,10 +463,6 @@ bool Engine::isQuitSignal() const {
return quitSignal;
}
gui::GUI* Engine::getGUI() {
return gui.get();
}
EngineSettings& Engine::getSettings() {
return settings;
}
@@ -518,10 +509,6 @@ SettingsHandler& Engine::getSettingsHandler() {
return *settingsHandler;
}
network::Network& Engine::getNetwork() {
return *network;
}
Time& Engine::getTime() {
return time;
}
+20 -7
View File
@@ -26,6 +26,7 @@ class ResPaths;
class EngineController;
class SettingsHandler;
struct EngineSettings;
class Input;
namespace gui {
class GUI;
@@ -66,8 +67,9 @@ class Engine : public util::ObjectsKeeper {
std::unique_ptr<Content> content;
std::unique_ptr<ResPaths> resPaths;
std::unique_ptr<EngineController> controller;
std::unique_ptr<cmd::CommandsInterpreter> interpreter;
std::unique_ptr<cmd::CommandsInterpreter> cmd;
std::unique_ptr<network::Network> network;
std::unique_ptr<Input> input;
std::vector<std::string> basePacks;
std::unique_ptr<gui::GUI> gui;
PostRunnables postRunnables;
@@ -87,6 +89,7 @@ public:
static Engine& getInstance();
void initialize(CoreParameters coreParameters);
void close();
static void terminate();
@@ -128,9 +131,6 @@ public:
/// @brief Get active assets storage instance
Assets* getAssets();
/// @brief Get main UI controller
gui::GUI* getGUI();
/// @brief Get writeable engine settings structure instance
EngineSettings& getSettings();
@@ -171,7 +171,6 @@ public:
void saveScreenshot();
EngineController* getController();
cmd::CommandsInterpreter* getCommandsInterpreter();
PacksManager createPacksManager(const io::path& worldFolder);
@@ -179,11 +178,25 @@ public:
SettingsHandler& getSettingsHandler();
network::Network& getNetwork();
Time& getTime();
const CoreParameters& getCoreParameters() const;
bool isHeadless() const;
gui::GUI& getGUI() {
return *gui;
}
Input& getInput() {
return *input;
}
network::Network& getNetwork() {
return *network;
}
cmd::CommandsInterpreter& getCmd() {
return *cmd;
}
};