#include "gui/status_ui.hpp" #include "components.hpp" #include #include "rand.hpp" #include namespace gui { using namespace guecs; using std::any, std::any_cast, std::string, std::make_any; StatusUI::StatusUI(GameLevel level) : $level(level), $ritual_ui(level) { $gui.position(STATUS_UI_X, STATUS_UI_Y, STATUS_UI_WIDTH, STATUS_UI_HEIGHT); $gui.layout( "[ritual_ui]" "[earing|armor_head|amulet]" "[back|*%(200,300)character_view|_|armor_bdy]" "[hand_r|_|_ |hand_l]" "[ring_r|_|_ |ring_l]" "[pocket_r|armor_leg|pocket_l]"); size_t inv_id = 0; for(auto [name, entity] : $gui.$name_ents) { if(name.starts_with("inv_")) { $slots[name] = inv_id++; } } } void StatusUI::init() { $gui.set($gui.MAIN, {$gui.$parser}); for(auto& [name, cell] : $gui.cells()) { if(name == "character_view") { auto char_view = $gui.entity(name); $gui.set(char_view, {}); $gui.set(char_view, {"armored_knight"}); } else { auto button = $gui.entity(name); $gui.set(button, {}); $gui.set(button, {make_any(name)}); if(name == "ritual_ui") { $gui.set(button, { [this](auto, auto){ select_ritual(); } }); $gui.set(button, {"pickup"}); } else { $gui.set(button, {guecs::to_wstring(name)}); $gui.set(button, { [this](auto ent, auto data){ select_slot(ent, data); } }); } } } $ritual_ui.event(ritual::Event::STARTED); $gui.init(); } bool StatusUI::mouse(float x, float y, bool hover) { if($ritual_ui.is_open()) { return $ritual_ui.mouse(x, y, hover); } else { return $gui.mouse(x, y, hover); } } void StatusUI::select_ritual() { $ritual_ui.event(ritual::Event::TOGGLE); } void StatusUI::select_slot(DinkyECS::Entity ent, any slot_name) { (void)ent; (void)slot_name; dbc::log("REWRITE!"); } /* WARNING: This is really not the greatest way to do this. */ void StatusUI::update() { dbc::log("REWRITE ME!"); } void StatusUI::render(sf::RenderWindow &window) { $gui.render(window); // $gui.debug_layout(window); $ritual_ui.render(window); } void StatusUI::update_level(GameLevel &level) { $level = level; init(); } }