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 15 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;
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<Sprite>(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<Sprite>(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>(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<Text>("result_text");
$gui.close<Sprite>("result_image");
}

@ -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>();
}
};
}
}

Loading…
Cancel
Save