From d1bd6b7c45669a911e16432626cd8339d0f2e182 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Wed, 30 Apr 2025 11:39:42 -0400 Subject: [PATCH] Mostly does everything I need, minus the ritual description. That'll have to probably be a separate generator. Next, rewrite this crap. --- ritual_ui.cpp | 36 ++++++++++++++++++++++++++++++------ ritual_ui.hpp | 1 + 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/ritual_ui.cpp b/ritual_ui.cpp index fccafa6..7279a9b 100644 --- a/ritual_ui.cpp +++ b/ritual_ui.cpp @@ -78,6 +78,26 @@ namespace gui { auto& blanket = $level.world->get_the(); blanket.select(item_id); + attempt_combine(); + + // display the possible outcome here + if($craft_state.is_combined()) { + auto ritual = $engine.finalize($craft_state); + using enum ritual::Element; + switch(ritual.element) { + case FIRE: + $gui.show_sprite("result_image", "broken_yoyo-64"); + break; + case LIGHTNING: + $gui.show_sprite("result_image", "pocket_watch-64"); + break; + default: + $gui.show_sprite("result_image", "severed_finger-64"); + } + } else { + $gui.close("result_image"); + } + update_items(); } @@ -97,12 +117,8 @@ namespace gui { update_items(); } - void RitualUI::combine_clicked(DinkyECS::Entity ent) { - // auto cell = $gui.cell_for(ent); + void RitualUI::attempt_combine() { auto& blanket = $level.world->get_the(); - auto& bs = $gui.get(ent); - bs.sprite->setColor({200, 0, 0}); - $craft_state = $engine.start(); for(auto [ent, yes] : blanket.selected) { @@ -111,6 +127,14 @@ namespace gui { // finalize here ritual here $engine.plan($craft_state); + } + + void RitualUI::combine_clicked(DinkyECS::Entity ent) { + // auto cell = $gui.cell_for(ent); + auto& bs = $gui.get(ent); + bs.sprite->setColor({200, 0, 0}); + + attempt_combine(); if($craft_state.is_combined()) { // add it to the belt @@ -141,10 +165,10 @@ namespace gui { for(auto& [item_id, item] : blanket.contents) { auto button = $gui.entity("inv_slot", i++); - auto selector = $gui.entity("craft", j++); std::string sprite_name = fmt::format("{}-64", item); if(blanket.is_selected(item_id)) { + auto selector = $gui.entity("craft", j++); $gui.set_init(selector, {sprite_name}); } else if($gui.has(button)) { $gui.set_init(button, {sprite_name}); diff --git a/ritual_ui.hpp b/ritual_ui.hpp index 96354ef..d57d9dd 100644 --- a/ritual_ui.hpp +++ b/ritual_ui.hpp @@ -35,6 +35,7 @@ namespace gui { void render(sf::RenderWindow &window); void update(); + void attempt_combine(); void update_items(); void combine_clicked(DinkyECS::Entity ent); void inv_slot_clicked(DinkyECS::Entity ent, DinkyECS::Entity item_id);