From 8545b8cf1d3b98e251a915cf16c3a8295392ab69 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Wed, 14 May 2025 00:51:53 -0400 Subject: [PATCH] Simple Loot UI started. --- autowalker.cpp | 2 +- autowalker.hpp | 2 +- boss_fight_ui.cpp => gui/boss_fight_ui.cpp | 2 +- boss_fight_ui.hpp => gui/boss_fight_ui.hpp | 0 combat_ui.cpp => gui/combat_ui.cpp | 2 +- combat_ui.hpp => gui/combat_ui.hpp | 0 debug_ui.cpp => gui/debug_ui.cpp | 2 +- debug_ui.hpp => gui/debug_ui.hpp | 0 gui_fsm.cpp => gui/gui_fsm.cpp | 30 +++++++++++++ gui_fsm.hpp => gui/gui_fsm.hpp | 17 +++++--- gui/loot_ui.cpp | 51 ++++++++++++++++++++++ gui/loot_ui.hpp | 22 ++++++++++ main_ui.cpp => gui/main_ui.cpp | 2 +- main_ui.hpp => gui/main_ui.hpp | 6 +-- overlay_ui.cpp => gui/overlay_ui.cpp | 2 +- overlay_ui.hpp => gui/overlay_ui.hpp | 0 ritual_ui.cpp => gui/ritual_ui.cpp | 2 +- ritual_ui.hpp => gui/ritual_ui.hpp | 0 status_ui.cpp => gui/status_ui.cpp | 2 +- status_ui.hpp => gui/status_ui.hpp | 2 +- levelmanager.hpp | 2 +- main.cpp | 3 +- meson.build | 17 ++++---- 23 files changed, 139 insertions(+), 29 deletions(-) rename boss_fight_ui.cpp => gui/boss_fight_ui.cpp (99%) rename boss_fight_ui.hpp => gui/boss_fight_ui.hpp (100%) rename combat_ui.cpp => gui/combat_ui.cpp (98%) rename combat_ui.hpp => gui/combat_ui.hpp (100%) rename debug_ui.cpp => gui/debug_ui.cpp (99%) rename debug_ui.hpp => gui/debug_ui.hpp (100%) rename gui_fsm.cpp => gui/gui_fsm.cpp (94%) rename gui_fsm.hpp => gui/gui_fsm.hpp (86%) create mode 100644 gui/loot_ui.cpp create mode 100644 gui/loot_ui.hpp rename main_ui.cpp => gui/main_ui.cpp (99%) rename main_ui.hpp => gui/main_ui.hpp (94%) rename overlay_ui.cpp => gui/overlay_ui.cpp (97%) rename overlay_ui.hpp => gui/overlay_ui.hpp (100%) rename ritual_ui.cpp => gui/ritual_ui.cpp (99%) rename ritual_ui.hpp => gui/ritual_ui.hpp (100%) rename status_ui.cpp => gui/status_ui.cpp (99%) rename status_ui.hpp => gui/status_ui.hpp (96%) diff --git a/autowalker.cpp b/autowalker.cpp index 7fb1c86..f5de524 100644 --- a/autowalker.cpp +++ b/autowalker.cpp @@ -1,7 +1,7 @@ #include "autowalker.hpp" #include "inventory.hpp" #include "ai_debug.hpp" -#include "ritual_ui.hpp" +#include "gui/ritual_ui.hpp" template int number_left(gui::FSM& fsm) { diff --git a/autowalker.hpp b/autowalker.hpp index b9e851f..f41c620 100644 --- a/autowalker.hpp +++ b/autowalker.hpp @@ -1,7 +1,7 @@ #pragma once #include "ai.hpp" -#include "gui_fsm.hpp" +#include "gui/gui_fsm.hpp" struct InventoryStats; diff --git a/boss_fight_ui.cpp b/gui/boss_fight_ui.cpp similarity index 99% rename from boss_fight_ui.cpp rename to gui/boss_fight_ui.cpp index ad676ce..524f9c4 100644 --- a/boss_fight_ui.cpp +++ b/gui/boss_fight_ui.cpp @@ -1,4 +1,4 @@ -#include "boss_fight_ui.hpp" +#include "gui/boss_fight_ui.hpp" #include "easings.hpp" #include "sound.hpp" #include diff --git a/boss_fight_ui.hpp b/gui/boss_fight_ui.hpp similarity index 100% rename from boss_fight_ui.hpp rename to gui/boss_fight_ui.hpp diff --git a/combat_ui.cpp b/gui/combat_ui.cpp similarity index 98% rename from combat_ui.cpp rename to gui/combat_ui.cpp index c96bb0b..a6cf956 100644 --- a/combat_ui.cpp +++ b/gui/combat_ui.cpp @@ -1,4 +1,4 @@ -#include "combat_ui.hpp" +#include "gui/combat_ui.hpp" #include "constants.hpp" #include "color.hpp" #include "rituals.hpp" diff --git a/combat_ui.hpp b/gui/combat_ui.hpp similarity index 100% rename from combat_ui.hpp rename to gui/combat_ui.hpp diff --git a/debug_ui.cpp b/gui/debug_ui.cpp similarity index 99% rename from debug_ui.cpp rename to gui/debug_ui.cpp index f992bca..dbe0570 100644 --- a/debug_ui.cpp +++ b/gui/debug_ui.cpp @@ -1,4 +1,4 @@ -#include "debug_ui.hpp" +#include "gui/debug_ui.hpp" #include "constants.hpp" #include "color.hpp" #include "events.hpp" diff --git a/debug_ui.hpp b/gui/debug_ui.hpp similarity index 100% rename from debug_ui.hpp rename to gui/debug_ui.hpp diff --git a/gui_fsm.cpp b/gui/gui_fsm.cpp similarity index 94% rename from gui_fsm.cpp rename to gui/gui_fsm.cpp index 07318b7..c3a9167 100644 --- a/gui_fsm.cpp +++ b/gui/gui_fsm.cpp @@ -23,6 +23,7 @@ namespace gui { $status_ui($level), $map_ui($level), $mini_map($level), + $loot_ui($level), $font{FONT_FILE_NAME} { } @@ -37,6 +38,7 @@ namespace gui { FSM_STATE(State, IN_COMBAT, ev); FSM_STATE(State, COMBAT_ROTATE, ev); FSM_STATE(State, NEXT_LEVEL, ev); + FSM_STATE(State, LOOTING, ev); FSM_STATE(State, END, ev); } } @@ -46,6 +48,7 @@ namespace gui { $main_ui.update_level($level); $level.world->set_the({}); $main_ui.init(); + $loot_ui.init(); // BUG: maybe this is a function on main_ui? auto cell = $main_ui.$overlay_ui.$gui.cell_for("left"); @@ -110,6 +113,22 @@ namespace gui { } } + void FSM::LOOTING(Event ev) { + using enum Event; + + switch(ev) { + case LOOT_OPEN: + $loot_ui.active = false; + state(State::IDLE); + break; + case TICK: + // do nothing + break; + default: + state(State::LOOTING); + } + } + void FSM::IDLE(Event ev) { using enum Event; @@ -161,6 +180,10 @@ namespace gui { case TICK: // do nothing break; + case LOOT_OPEN: + $loot_ui.active = true; + state(State::LOOTING); + break; default: dbc::sentinel("unhandled event in IDLE"); } @@ -248,6 +271,7 @@ namespace gui { $combat_ui.mouse(pos.x, pos.y, false); $status_ui.mouse(pos.x, pos.y, false); $main_ui.mouse(pos.x, pos.y, false); + if($loot_ui.active) $loot_ui.mouse(pos.x, pos.y, false); } } } else if(const auto* mouse = ev->getIf()) { @@ -303,6 +327,9 @@ namespace gui { case KEY::L: event(Event::STAIRS_DOWN); break; + case KEY::X: + event(Event::LOOT_OPEN); + break; default: break; // ignored } @@ -322,6 +349,8 @@ namespace gui { $status_ui.render($window); $combat_ui.render($window); + if($loot_ui.active) $loot_ui.render($window); + if($map_open) { $map_ui.render($window, $main_ui.$compass_dir); } else { @@ -442,6 +471,7 @@ namespace gui { $mini_map.update_level($level); $combat_ui.update_level($level); $main_ui.update_level($level); + $loot_ui.update_level($level); $boss_fight_ui = $levels.create_bossfight($level.world); $boss_fight_ui->init(); diff --git a/gui_fsm.hpp b/gui/gui_fsm.hpp similarity index 86% rename from gui_fsm.hpp rename to gui/gui_fsm.hpp index 0da9a5a..89008dd 100644 --- a/gui_fsm.hpp +++ b/gui/gui_fsm.hpp @@ -3,11 +3,12 @@ #include "stats.hpp" #include "levelmanager.hpp" #include "fsm.hpp" -#include "debug_ui.hpp" -#include "main_ui.hpp" -#include "combat_ui.hpp" -#include "status_ui.hpp" -#include "boss_fight_ui.hpp" +#include "gui/debug_ui.hpp" +#include "gui/main_ui.hpp" +#include "gui/combat_ui.hpp" +#include "gui/status_ui.hpp" +#include "gui/loot_ui.hpp" +#include "gui/boss_fight_ui.hpp" #include "map_view.hpp" #include "mini_map.hpp" @@ -20,6 +21,7 @@ namespace gui { ATTACKING, ROTATING, NEXT_LEVEL, + LOOTING, IDLE, END }; @@ -39,7 +41,8 @@ namespace gui { START_COMBAT = 11, STOP_COMBAT = 12, STAIRS_DOWN = 13, - QUIT = 14 + LOOT_OPEN=14, + QUIT = 15 }; class FSM : public DeadSimpleFSM { @@ -58,6 +61,7 @@ namespace gui { StatusUI $status_ui; MapViewUI $map_ui; MiniMapUI $mini_map; + LootUI $loot_ui; sf::Font $font; FSM(); @@ -75,6 +79,7 @@ namespace gui { void IN_COMBAT(Event ev); void COMBAT_ROTATE(Event ev); void NEXT_LEVEL(Event ev); + void LOOTING(Event ev); void END(Event ev); void try_move(int dir, bool strafe); diff --git a/gui/loot_ui.cpp b/gui/loot_ui.cpp new file mode 100644 index 0000000..558c5f4 --- /dev/null +++ b/gui/loot_ui.cpp @@ -0,0 +1,51 @@ +#include "gui/loot_ui.hpp" +#include "constants.hpp" +#include "color.hpp" +#include +#include "guecstra.hpp" + +namespace gui { + using namespace guecs; + + LootUI::LootUI(GameLevel level) : + $level(level) + { + $gui.position(RAY_VIEW_X+RAY_VIEW_WIDTH/2-200, + RAY_VIEW_Y+RAY_VIEW_HEIGHT/2-200, 400, 400); + + $gui.layout( + "[button_0 | button_1|button_2 | button_3]" + "[button_4 | button_5|button_6 | button_7]" + "[button_8 | button_9|button_10 | button_11]" + "[button_12 | button_13|button_14 | button_15]" + ); + } + + void LootUI::init() { + $gui.set($gui.MAIN, {$gui.$parser, ColorValue::DARK_MID}); + for(auto [name, cell] : $gui.cells()) { + auto id = $gui.entity(name); + $gui.set(id, {}); + if(id < 4) { + $gui.set(id, { + [=](auto, auto) { fmt::println("clicked {}", name); } + }); + $gui.set(id, {"broken_yoyo-64"}); + } + } + $gui.init(); + } + + void LootUI::render(sf::RenderWindow& window) { + $gui.render(window); + } + + void LootUI::update_level(GameLevel &level) { + $level = level; + init(); + } + + bool LootUI::mouse(float x, float y, bool hover) { + return $gui.mouse(x, y, hover); + } +} diff --git a/gui/loot_ui.hpp b/gui/loot_ui.hpp new file mode 100644 index 0000000..a770082 --- /dev/null +++ b/gui/loot_ui.hpp @@ -0,0 +1,22 @@ +#pragma once +#include "levelmanager.hpp" +#include +#include +#include +#include "events.hpp" + +namespace gui { + class LootUI { + public: + bool active = false; + guecs::UI $gui; + GameLevel $level; + + LootUI(GameLevel level); + + void init(); + void render(sf::RenderWindow& window); + void update_level(GameLevel &level); + bool mouse(float x, float y, bool hover); + }; +} diff --git a/main_ui.cpp b/gui/main_ui.cpp similarity index 99% rename from main_ui.cpp rename to gui/main_ui.cpp index 913cb79..70d2ae0 100644 --- a/main_ui.cpp +++ b/gui/main_ui.cpp @@ -1,4 +1,4 @@ -#include "main_ui.hpp" +#include "gui/main_ui.hpp" #include "components.hpp" #include "easings.hpp" #include diff --git a/main_ui.hpp b/gui/main_ui.hpp similarity index 94% rename from main_ui.hpp rename to gui/main_ui.hpp index ada3019..75d4e7d 100644 --- a/main_ui.hpp +++ b/gui/main_ui.hpp @@ -3,12 +3,12 @@ #include #include #include "stats.hpp" -#include "overlay_ui.hpp" -#include "debug_ui.hpp" +#include +#include "gui/overlay_ui.hpp" +#include "gui/debug_ui.hpp" #include "raycaster.hpp" #include "camera.hpp" #include -#include namespace gui { diff --git a/overlay_ui.cpp b/gui/overlay_ui.cpp similarity index 97% rename from overlay_ui.cpp rename to gui/overlay_ui.cpp index 94977e2..c97cbca 100644 --- a/overlay_ui.cpp +++ b/gui/overlay_ui.cpp @@ -1,4 +1,4 @@ -#include "overlay_ui.hpp" +#include "gui/overlay_ui.hpp" #include "constants.hpp" #include "color.hpp" #include "events.hpp" diff --git a/overlay_ui.hpp b/gui/overlay_ui.hpp similarity index 100% rename from overlay_ui.hpp rename to gui/overlay_ui.hpp diff --git a/ritual_ui.cpp b/gui/ritual_ui.cpp similarity index 99% rename from ritual_ui.cpp rename to gui/ritual_ui.cpp index 9f07c98..6a9a548 100644 --- a/ritual_ui.cpp +++ b/gui/ritual_ui.cpp @@ -1,4 +1,4 @@ -#include "ritual_ui.hpp" +#include "gui/ritual_ui.hpp" #include "components.hpp" #include #include "rand.hpp" diff --git a/ritual_ui.hpp b/gui/ritual_ui.hpp similarity index 100% rename from ritual_ui.hpp rename to gui/ritual_ui.hpp diff --git a/status_ui.cpp b/gui/status_ui.cpp similarity index 99% rename from status_ui.cpp rename to gui/status_ui.cpp index 2a5a110..98101cb 100644 --- a/status_ui.cpp +++ b/gui/status_ui.cpp @@ -1,4 +1,4 @@ -#include "status_ui.hpp" +#include "gui/status_ui.hpp" #include "components.hpp" #include "inventory.hpp" #include "color.hpp" diff --git a/status_ui.hpp b/gui/status_ui.hpp similarity index 96% rename from status_ui.hpp rename to gui/status_ui.hpp index 7ab1b16..f9ec431 100644 --- a/status_ui.hpp +++ b/gui/status_ui.hpp @@ -4,7 +4,7 @@ #include #include "textures.hpp" #include -#include "ritual_ui.hpp" +#include "gui/ritual_ui.hpp" namespace gui { class StatusUI { diff --git a/levelmanager.hpp b/levelmanager.hpp index a51faff..98784bf 100644 --- a/levelmanager.hpp +++ b/levelmanager.hpp @@ -7,7 +7,7 @@ #include #include "spatialmap.hpp" #include "components.hpp" -#include "boss_fight_ui.hpp" +#include "gui/boss_fight_ui.hpp" using std::shared_ptr; diff --git a/main.cpp b/main.cpp index 0dcf591..a562ec4 100644 --- a/main.cpp +++ b/main.cpp @@ -1,4 +1,4 @@ -#include "gui_fsm.hpp" +#include "gui/gui_fsm.hpp" #include "textures.hpp" #include "sound.hpp" #include "autowalker.hpp" @@ -33,6 +33,7 @@ int main(int argc, char* argv[]) { // ZED: need to sort out how to deal with this in the FSM if(main.in_state(gui::State::IDLE) || main.in_state(gui::State::NEXT_LEVEL) + || main.in_state(gui::State::LOOTING) || main.in_state(gui::State::IN_COMBAT)) { if(main.autowalking) { diff --git a/meson.build b/meson.build index 5097b63..20a643c 100644 --- a/meson.build +++ b/meson.build @@ -86,32 +86,25 @@ sources = [ 'autowalker.cpp', 'backend.cpp', 'battle.cpp', - 'boss_fight_ui.cpp', 'camera.cpp', 'combat.cpp', - 'combat_ui.cpp', 'components.cpp', 'config.cpp', 'dbc.cpp', - 'debug_ui.cpp', 'devices.cpp', 'goap.cpp', 'guecstra.cpp', - 'gui_fsm.cpp', 'inventory.cpp', 'levelmanager.cpp', 'lights.cpp', - 'main_ui.cpp', 'map.cpp', 'map_view.cpp', 'matrix.cpp', 'matrix.cpp', 'mini_map.cpp', - 'overlay_ui.cpp', 'pathing.cpp', 'rand.cpp', 'raycaster.cpp', - 'ritual_ui.cpp', 'rituals.cpp', 'save.cpp', 'shaders.cpp', @@ -119,10 +112,18 @@ sources = [ 'sound.cpp', 'spatialmap.cpp', 'stats.cpp', - 'status_ui.cpp', 'systems.cpp', 'textures.cpp', 'tilemap.cpp', + 'gui/boss_fight_ui.cpp', + 'gui/loot_ui.cpp', + 'gui/combat_ui.cpp', + 'gui/debug_ui.cpp', + 'gui/gui_fsm.cpp', + 'gui/main_ui.cpp', + 'gui/overlay_ui.cpp', + 'gui/ritual_ui.cpp', + 'gui/status_ui.cpp', 'worldbuilder.cpp', ]