From 6392f6360449d8f5b67adde6b4687e83844fb5f6 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 17 Nov 2023 14:26:54 +0300 Subject: [PATCH] Refactor, GUI::storage (map for direct access to panels) --- src/files/WorldFiles.cpp | 8 ---- src/frontend/gui/GUI.cpp | 19 ++++++++- src/frontend/gui/GUI.h | 6 +++ src/frontend/gui/controls.cpp | 3 +- src/frontend/gui/controls.h | 2 +- src/frontend/gui/panels.cpp | 4 ++ src/frontend/gui/panels.h | 1 + src/frontend/hud.cpp | 14 ++++--- src/frontend/screens.cpp | 70 +++++++++++++++------------------ src/graphics/BlocksRenderer.cpp | 2 + 10 files changed, 75 insertions(+), 54 deletions(-) diff --git a/src/files/WorldFiles.cpp b/src/files/WorldFiles.cpp index e08ddb18..92ea421f 100644 --- a/src/files/WorldFiles.cpp +++ b/src/files/WorldFiles.cpp @@ -43,14 +43,6 @@ void int2Bytes(int value, ubyte* dest, size_t offset){ dest[offset+3] = (char) (value >> 0 & 255); } -float bytes2Float(ubyte* src, uint offset){ - uint32_t value = ((src[offset] << 24) | - (src[offset+1] << 16) | - (src[offset+2] << 8) | - (src[offset+3])); - return *(float*)(&value); -} - WorldFiles::WorldFiles(path directory, bool generatorTestMode) : directory(directory), generatorTestMode(generatorTestMode) { compressionBuffer = new ubyte[CHUNK_DATA_LEN * 2]; diff --git a/src/frontend/gui/GUI.cpp b/src/frontend/gui/GUI.cpp index b3011356..546b47c2 100644 --- a/src/frontend/gui/GUI.cpp +++ b/src/frontend/gui/GUI.cpp @@ -12,6 +12,7 @@ #include "../../window/input.h" #include "../../window/Camera.h" +using std::string; using std::shared_ptr; using namespace gui; @@ -101,6 +102,22 @@ void GUI::add(shared_ptr panel) { container->add(panel); } -void GUI::remove(std::shared_ptr panel) { +void GUI::remove(shared_ptr panel) { container->remove(panel); } + +void GUI::store(string name, shared_ptr node) { + storage[name] = node; +} + +shared_ptr GUI::get(string name) { + auto found = storage.find(name); + if (found == storage.end()) { + return nullptr; + } + return found->second; +} + +void GUI::remove(string name) { + storage.erase(name); +} \ No newline at end of file diff --git a/src/frontend/gui/GUI.h b/src/frontend/gui/GUI.h index b261c630..c8be27ff 100644 --- a/src/frontend/gui/GUI.h +++ b/src/frontend/gui/GUI.h @@ -5,6 +5,7 @@ #include #include #include +#include class Batch2D; class Assets; @@ -50,6 +51,8 @@ namespace gui { std::shared_ptr hover = nullptr; std::shared_ptr pressed = nullptr; std::shared_ptr focus = nullptr; + std::unordered_map> storage; + Camera* uicamera; public: GUI(); @@ -62,6 +65,9 @@ namespace gui { void draw(Batch2D* batch, Assets* assets); void add(std::shared_ptr panel); void remove(std::shared_ptr panel); + void store(std::string name, std::shared_ptr node); + std::shared_ptr get(std::string name); + void remove(std::string name); }; } diff --git a/src/frontend/gui/controls.cpp b/src/frontend/gui/controls.cpp index 57a7599d..3c4ddf64 100644 --- a/src/frontend/gui/controls.cpp +++ b/src/frontend/gui/controls.cpp @@ -80,8 +80,9 @@ void Button::mouseRelease(GUI* gui, int x, int y) { } } -void Button::listenAction(onaction action) { +Button* Button::listenAction(onaction action) { actions.push_back(action); + return this; } TextBox::TextBox(wstring placeholder, vec4 padding) diff --git a/src/frontend/gui/controls.h b/src/frontend/gui/controls.h index f5da872c..51303134 100644 --- a/src/frontend/gui/controls.h +++ b/src/frontend/gui/controls.h @@ -45,7 +45,7 @@ namespace gui { virtual std::shared_ptr getAt(glm::vec2 pos, std::shared_ptr self) override; virtual void mouseRelease(GUI*, int x, int y) override; - virtual void listenAction(onaction action); + virtual Button* listenAction(onaction action); }; class TextBox : public Panel { diff --git a/src/frontend/gui/panels.cpp b/src/frontend/gui/panels.cpp index 2a0c9320..85bedbbb 100644 --- a/src/frontend/gui/panels.cpp +++ b/src/frontend/gui/panels.cpp @@ -75,6 +75,10 @@ void Container::add(shared_ptr node) { refresh(); } +void Container::add(UINode* node) { + add(shared_ptr(node)); +} + void Container::remove(shared_ptr selected) { selected->setParent(nullptr); nodes.erase(std::remove_if(nodes.begin(), nodes.end(), diff --git a/src/frontend/gui/panels.h b/src/frontend/gui/panels.h index 168ca1e4..7441f211 100644 --- a/src/frontend/gui/panels.h +++ b/src/frontend/gui/panels.h @@ -33,6 +33,7 @@ namespace gui { virtual void draw(Batch2D* batch, Assets* assets) override; virtual std::shared_ptr getAt(glm::vec2 pos, std::shared_ptr self) override; virtual void add(std::shared_ptr node); + virtual void add(UINode* node); virtual void remove(std::shared_ptr node); void listenInterval(float interval, ontimeout callback, int repeat=-1); }; diff --git a/src/frontend/hud.cpp b/src/frontend/hud.cpp index d6fef300..5d041f30 100644 --- a/src/frontend/hud.cpp +++ b/src/frontend/hud.cpp @@ -67,12 +67,16 @@ HudRenderer::HudRenderer(Engine* engine, Level* level) : level(level), assets(en return L"occlusion: "+wstring(this->occlusion ? L"on" : L"off"); }))); panel->add(shared_ptr