From b839fb646389033d8ea7e7ba1129f865dfd5cc77 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Mon, 18 Aug 2025 01:13:31 -0400 Subject: [PATCH] The problem was keeping a reference in a class/object means that it will not get updated copies when levelmanager makes a new level. Honestly that whole constelation of bullshit needs to die. Closes #62. --- gui/ritual_ui.cpp | 23 +++++++++++------------ gui/ritual_ui.hpp | 5 ++++- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/gui/ritual_ui.cpp b/gui/ritual_ui.cpp index 469ccc6..cd731fc 100644 --- a/gui/ritual_ui.cpp +++ b/gui/ritual_ui.cpp @@ -13,8 +13,7 @@ namespace gui { using std::any, std::any_cast, std::string, std::make_any; UI::UI(GameLevel level) : - $level(level), - $blanket($level.world->get_the<::ritual::Blanket>()) + $level(level) { $gui.position(STATUS_UI_X, STATUS_UI_Y, STATUS_UI_WIDTH, STATUS_UI_HEIGHT); $gui.layout( @@ -139,23 +138,23 @@ namespace gui { } } - $blanket.reset(); + blanket().reset(); } void UI::select_item(SelectedItem pair) { auto& sprite = $gui.get(pair.slot_id); - if($blanket.is_selected(pair.item_id)) { - $blanket.deselect(pair.item_id); + if(blanket().is_selected(pair.item_id)) { + blanket().deselect(pair.item_id); sprite.sprite->setColor({255, 255, 255, 255}); } else { - $blanket.select(pair.item_id); + blanket().select(pair.item_id); sprite.sprite->setColor({255, 200, 200, 200}); } } void UI::update_selection_state() { - if($blanket.no_selections()) { + if(blanket().no_selections()) { clear_craft_result(); state(State::OPENED); } else { @@ -167,7 +166,7 @@ namespace gui { void UI::load_blanket() { // update the list of available items int i = 0; - for(auto& [item_id, item] : $blanket.contents) { + for(auto& [item_id, item] : blanket().contents) { auto slot_id = $gui.entity("inv_slot", i++); $gui.set_init(slot_id, {item}); @@ -192,7 +191,7 @@ namespace gui { auto& belt = $level.world->get_the<::ritual::Belt>(); belt.equip(belt.next(), ritual); $level.world->send(Events::GUI::NEW_RITUAL, $level.player, {}); - $blanket.consume_crafting(); + blanket().consume_crafting(); clear_craft_result(); load_blanket(); @@ -203,8 +202,8 @@ namespace gui { void UI::run_crafting_engine() { $craft_state.reset(); - for(auto [item_id, setting] : $blanket.selected) { - auto& item = $blanket.get(item_id); + for(auto [item_id, setting] : blanket().selected) { + auto& item = blanket().get(item_id); $ritual_engine.load_junk($craft_state, item); } @@ -246,7 +245,7 @@ namespace gui { } void UI::clear_craft_result() { - $blanket.reset(); + blanket().reset(); $gui.close("result_text"); $gui.close("result_image"); } diff --git a/gui/ritual_ui.hpp b/gui/ritual_ui.hpp index 9423d23..7737ae2 100644 --- a/gui/ritual_ui.hpp +++ b/gui/ritual_ui.hpp @@ -39,7 +39,6 @@ namespace gui { guecs::UI $gui; GameLevel $level; textures::SpriteTexture $ritual_ui; - ::ritual::Blanket& $blanket; ::ritual::Engine $ritual_engine; ::ritual::CraftingState $craft_state; @@ -65,6 +64,10 @@ namespace gui { void complete_combine(); void update_selection_state(); void update_level(GameLevel &level); + + ::ritual::Blanket& blanket() { + return $level.world->get_the<::ritual::Blanket>(); + } }; } }