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.

master
Zed A. Shaw 17 hours ago
parent ae1a48deed
commit b839fb6463
  1. 23
      gui/ritual_ui.cpp
  2. 5
      gui/ritual_ui.hpp

@ -13,8 +13,7 @@ namespace gui {
using std::any, std::any_cast, std::string, std::make_any; using std::any, std::any_cast, std::string, std::make_any;
UI::UI(GameLevel level) : UI::UI(GameLevel level) :
$level(level), $level(level)
$blanket($level.world->get_the<::ritual::Blanket>())
{ {
$gui.position(STATUS_UI_X, STATUS_UI_Y, STATUS_UI_WIDTH, STATUS_UI_HEIGHT); $gui.position(STATUS_UI_X, STATUS_UI_Y, STATUS_UI_WIDTH, STATUS_UI_HEIGHT);
$gui.layout( $gui.layout(
@ -139,23 +138,23 @@ namespace gui {
} }
} }
$blanket.reset(); blanket().reset();
} }
void UI::select_item(SelectedItem pair) { void UI::select_item(SelectedItem pair) {
auto& sprite = $gui.get<Sprite>(pair.slot_id); auto& sprite = $gui.get<Sprite>(pair.slot_id);
if($blanket.is_selected(pair.item_id)) { if(blanket().is_selected(pair.item_id)) {
$blanket.deselect(pair.item_id); blanket().deselect(pair.item_id);
sprite.sprite->setColor({255, 255, 255, 255}); sprite.sprite->setColor({255, 255, 255, 255});
} else { } else {
$blanket.select(pair.item_id); blanket().select(pair.item_id);
sprite.sprite->setColor({255, 200, 200, 200}); sprite.sprite->setColor({255, 200, 200, 200});
} }
} }
void UI::update_selection_state() { void UI::update_selection_state() {
if($blanket.no_selections()) { if(blanket().no_selections()) {
clear_craft_result(); clear_craft_result();
state(State::OPENED); state(State::OPENED);
} else { } else {
@ -167,7 +166,7 @@ namespace gui {
void UI::load_blanket() { void UI::load_blanket() {
// update the list of available items // update the list of available items
int i = 0; 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++); auto slot_id = $gui.entity("inv_slot", i++);
$gui.set_init<Sprite>(slot_id, {item}); $gui.set_init<Sprite>(slot_id, {item});
@ -192,7 +191,7 @@ namespace gui {
auto& belt = $level.world->get_the<::ritual::Belt>(); auto& belt = $level.world->get_the<::ritual::Belt>();
belt.equip(belt.next(), ritual); belt.equip(belt.next(), ritual);
$level.world->send<Events::GUI>(Events::GUI::NEW_RITUAL, $level.player, {}); $level.world->send<Events::GUI>(Events::GUI::NEW_RITUAL, $level.player, {});
$blanket.consume_crafting(); blanket().consume_crafting();
clear_craft_result(); clear_craft_result();
load_blanket(); load_blanket();
@ -203,8 +202,8 @@ namespace gui {
void UI::run_crafting_engine() { void UI::run_crafting_engine() {
$craft_state.reset(); $craft_state.reset();
for(auto [item_id, setting] : $blanket.selected) { for(auto [item_id, setting] : blanket().selected) {
auto& item = $blanket.get(item_id); auto& item = blanket().get(item_id);
$ritual_engine.load_junk($craft_state, item); $ritual_engine.load_junk($craft_state, item);
} }
@ -246,7 +245,7 @@ namespace gui {
} }
void UI::clear_craft_result() { void UI::clear_craft_result() {
$blanket.reset(); blanket().reset();
$gui.close<Text>("result_text"); $gui.close<Text>("result_text");
$gui.close<Sprite>("result_image"); $gui.close<Sprite>("result_image");
} }

@ -39,7 +39,6 @@ namespace gui {
guecs::UI $gui; guecs::UI $gui;
GameLevel $level; GameLevel $level;
textures::SpriteTexture $ritual_ui; textures::SpriteTexture $ritual_ui;
::ritual::Blanket& $blanket;
::ritual::Engine $ritual_engine; ::ritual::Engine $ritual_engine;
::ritual::CraftingState $craft_state; ::ritual::CraftingState $craft_state;
@ -65,6 +64,10 @@ namespace gui {
void complete_combine(); void complete_combine();
void update_selection_state(); void update_selection_state();
void update_level(GameLevel &level); void update_level(GameLevel &level);
::ritual::Blanket& blanket() {
return $level.world->get_the<::ritual::Blanket>();
}
}; };
} }
} }

Loading…
Cancel
Save