From c47e869bdd06a5f764515c6da27b6d46c7374248 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 21 Apr 2024 01:30:35 +0300 Subject: [PATCH] EngineController draft --- src/engine.cpp | 12 +- src/engine.h | 4 + src/frontend/hud.cpp | 2 +- src/frontend/menu/menu.cpp | 221 +----------------- src/frontend/menu/menu.h | 55 ----- src/frontend/menu/menu.hpp | 12 + src/frontend/menu/menu_pause.cpp | 160 ------------- src/frontend/screens.cpp | 2 +- src/logic/EngineController.cpp | 342 ++++++++++++++++++++++++++++ src/logic/EngineController.hpp | 44 ++++ src/logic/scripting/lua/libcore.cpp | 20 +- 11 files changed, 438 insertions(+), 436 deletions(-) delete mode 100644 src/frontend/menu/menu.h create mode 100644 src/frontend/menu/menu.hpp delete mode 100644 src/frontend/menu/menu_pause.cpp create mode 100644 src/logic/EngineController.cpp create mode 100644 src/logic/EngineController.hpp diff --git a/src/engine.cpp b/src/engine.cpp index 49a5ba27..aa2dc929 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -5,19 +5,20 @@ #include "assets/AssetsLoader.h" #include "audio/audio.h" #include "coders/GLSLExtension.h" -#include "coders/json.h" #include "coders/imageio.h" +#include "coders/json.h" #include "content/ContentLoader.h" #include "core_defs.h" #include "files/files.h" #include "frontend/locale/langs.h" -#include "frontend/menu/menu.h" +#include "frontend/menu/menu.hpp" #include "frontend/screens.h" #include "graphics/core/Batch2D.h" #include "graphics/core/GfxContext.h" #include "graphics/core/ImageData.h" #include "graphics/core/Shader.h" #include "graphics/ui/GUI.h" +#include "logic/EngineController.hpp" #include "logic/scripting/scripting.h" #include "util/listutil.h" #include "util/platform.h" @@ -57,7 +58,8 @@ inline void create_channel(std::string name, NumberSetting& setting) { Engine::Engine(EngineSettings& settings, EnginePaths* paths) : settings(settings), settingsHandler(settings), paths(paths) -{ +{ + controller = std::make_unique(this); if (Window::initialize(settings.display)){ throw initialize_error("could not initialize window"); } @@ -189,6 +191,10 @@ Engine::~Engine() { logger.info() << "engine finished"; } +EngineController* Engine::getController() { + return controller.get(); +} + PacksManager Engine::createPacksManager(const fs::path& worldFolder) { PacksManager manager; manager.setSources({ diff --git a/src/engine.h b/src/engine.h index 84eb7715..f4ba4878 100644 --- a/src/engine.h +++ b/src/engine.h @@ -25,6 +25,7 @@ class Screen; class EnginePaths; class ResPaths; class Batch2D; +class EngineController; namespace fs = std::filesystem; @@ -49,6 +50,7 @@ class Engine { std::unique_ptr resPaths = nullptr; std::queue postRunnables; std::recursive_mutex postRunnablesMutex; + std::unique_ptr controller; uint64_t frame = 0; double lastTime = 0.0; @@ -125,6 +127,8 @@ public: void saveScreenshot(); + EngineController* getController(); + PacksManager createPacksManager(const fs::path& worldFolder); SettingsHandler& getSettingsHandler(); diff --git a/src/frontend/hud.cpp b/src/frontend/hud.cpp index aa2550d5..1c7508d2 100644 --- a/src/frontend/hud.cpp +++ b/src/frontend/hud.cpp @@ -42,7 +42,7 @@ #include "ContentGfxCache.h" #include "InventoryView.h" #include "LevelFrontend.h" -#include "menu/menu.h" +#include "menu/menu.hpp" #include "screens.h" #include "UiDocument.h" diff --git a/src/frontend/menu/menu.cpp b/src/frontend/menu/menu.cpp index 0d05df91..f3fd08fa 100644 --- a/src/frontend/menu/menu.cpp +++ b/src/frontend/menu/menu.cpp @@ -1,60 +1,26 @@ -#include "menu.h" +#include "menu.hpp" #include #include -#include -#include -#include #include #include -#include "../../interfaces/Task.h" -#include "../../graphics/ui/GUI.h" -#include "../../graphics/ui/gui_util.h" -#include "../../graphics/ui/elements/layout/Menu.hpp" -#include "../../graphics/ui/elements/display/Label.hpp" -#include "../../graphics/ui/elements/control/Button.hpp" -#include "../screens.h" -#include "../UiDocument.h" -#include "../../logic/scripting/scripting.h" - -#include "../../coders/png.h" -#include "../../util/stringutil.h" -#include "../../files/engine_paths.h" -#include "../../files/WorldConverter.h" -#include "../../files/WorldFiles.h" -#include "../../world/World.h" -#include "../../world/WorldGenerators.h" -#include "../../world/Level.h" -#include "../../window/Events.h" -#include "../../window/Window.h" -#include "../../engine.h" -#include "../../settings.h" #include "../../delegates.h" -#include "../../content/Content.h" -#include "../../content/ContentLUT.h" -#include "../../content/ContentPack.h" -#include "../locale/langs.h" +#include "../../engine.h" +#include "../../files/engine_paths.h" +#include "../../graphics/ui/elements/display/Label.hpp" +#include "../../graphics/ui/elements/layout/Menu.hpp" +#include "../../graphics/ui/gui_util.h" +#include "../../graphics/ui/GUI.h" +#include "../../logic/scripting/scripting.h" +#include "../../settings.h" +#include "../../util/stringutil.h" +#include "../../window/Window.h" +#include "../UiDocument.h" namespace fs = std::filesystem; using namespace gui; -std::shared_ptr create_page( - Engine* engine, - std::string name, - int width, - float opacity, - int interval -) { - auto menu = engine->getGUI()->getMenu(); - auto panel = std::make_shared( - glm::vec2(width, 200), glm::vec4(8.0f), interval - ); - panel->setColor(glm::vec4(0.0f, 0.0f, 0.0f, opacity)); - menu->addPage(name, panel); - return panel; -} - void menus::create_version_label(Engine* engine) { auto gui = engine->getGUI(); auto vlabel = std::make_shared( @@ -68,170 +34,7 @@ void menus::create_version_label(Engine* engine) { gui->add(vlabel); } -static void show_content_missing( - Engine* engine, - const Content* content, - std::shared_ptr lut -) { - auto* gui = engine->getGUI(); - auto menu = gui->getMenu(); - auto panel = create_page(engine, "missing-content", 500, 0.5f, 8); - - panel->add(std::make_shared