diff --git a/color.hpp b/color.hpp deleted file mode 100644 index 7815893..0000000 --- a/color.hpp +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once -#include - -namespace ColorValue { - constexpr const sf::Color BLACK{0, 0, 0}; - constexpr const sf::Color DARK_DARK{10, 10, 10}; - constexpr const sf::Color DARK_MID{30, 30, 30}; - constexpr const sf::Color DARK_LIGHT{60, 60, 60}; - constexpr const sf::Color MID{100, 100, 100}; - constexpr const sf::Color LIGHT_DARK{150, 150, 150}; - constexpr const sf::Color LIGHT_MID{200, 200, 200}; - constexpr const sf::Color LIGHT_LIGHT{230, 230, 230}; - constexpr const sf::Color WHITE{255, 255, 255}; - constexpr const sf::Color TRANSPARENT = sf::Color::Transparent; -} diff --git a/constants.hpp b/constants.hpp index bc162f4..8861339 100644 --- a/constants.hpp +++ b/constants.hpp @@ -1,7 +1,6 @@ #pragma once #include -#include "color.hpp" #include constexpr const int INV_SLOTS=20; diff --git a/events.hpp b/events.hpp index b7e8e8b..f0bd2e0 100644 --- a/events.hpp +++ b/events.hpp @@ -5,7 +5,7 @@ namespace Events { START, COMBAT, LOOT, DEATH, STAIRS_UP, STAIRS_DOWN, TRAP, COMBAT_START, NO_NEIGHBORS, HP_STATUS, ATTACK, BLOCK, EVADE, NEW_RITUAL, - UPDATE_SPRITE, ENEMY_SPAWN, NOOP + UPDATE_SPRITE, ENEMY_SPAWN, NOOP, LOOT_CLOSE }; struct Combat { diff --git a/gui/combat_ui.cpp b/gui/combat_ui.cpp index a6cf956..3a95dde 100644 --- a/gui/combat_ui.cpp +++ b/gui/combat_ui.cpp @@ -1,6 +1,5 @@ #include "gui/combat_ui.hpp" #include "constants.hpp" -#include "color.hpp" #include "rituals.hpp" #include #include "guecstra.hpp" @@ -37,7 +36,8 @@ namespace gui { } void CombatUI::init() { - $gui.set($gui.MAIN, {$gui.$parser, ColorValue::DARK_MID}); + using guecs::THEME; + $gui.set($gui.MAIN, {$gui.$parser, THEME.DARK_MID}); auto& the_belt = $level.world->get_the(); for(int slot = 0; slot < the_belt.max_slots; slot++) { diff --git a/gui/debug_ui.cpp b/gui/debug_ui.cpp index dbe0570..e8a06d6 100644 --- a/gui/debug_ui.cpp +++ b/gui/debug_ui.cpp @@ -1,6 +1,5 @@ #include "gui/debug_ui.hpp" #include "constants.hpp" -#include "color.hpp" #include "events.hpp" #include #include diff --git a/gui/gui_fsm.cpp b/gui/gui_fsm.cpp index c3a9167..3c33938 100644 --- a/gui/gui_fsm.cpp +++ b/gui/gui_fsm.cpp @@ -420,6 +420,10 @@ namespace gui { case eGUI::NO_NEIGHBORS: event(Event::STOP_COMBAT); break; + case eGUI::LOOT_CLOSE: + // BUG: need to resolve GUI events vs. FSM events better + event(Event::LOOT_OPEN); + break; case eGUI::LOOT: { // auto &item = std::any_cast(data); // $status_ui.log(fmt::format("You picked up a {}.", diff --git a/gui/loot_ui.cpp b/gui/loot_ui.cpp index 558c5f4..bba8ff7 100644 --- a/gui/loot_ui.cpp +++ b/gui/loot_ui.cpp @@ -1,6 +1,5 @@ #include "gui/loot_ui.hpp" #include "constants.hpp" -#include "color.hpp" #include #include "guecstra.hpp" @@ -14,25 +13,40 @@ namespace gui { 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]" + "[item_0 | item_1|item_2 | item_3]" + "[item_4 | item_5|item_6 | item_7]" + "[item_8 | item_9|item_10 | item_11]" + "[button_12|button_13|button_14|button_15]" + "[_ | *%(200)close|_ | _]" ); } 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"}); - } + using guecs::THEME; + auto bg_color = THEME.DARK_LIGHT; + bg_color.a = 140; + $gui.set($gui.MAIN, {$gui.$parser, bg_color}); + + // fill in 4 slots for prototype + for(int i = 0; i < 4; i++) { + auto id = $gui.entity("item_", i); + + $gui.set(id, {THEME.PADDING, + THEME.TRANSPARENT, THEME.LIGHT_MID }); + + $gui.set(id, {0.4f, "ui_shader"}); + $gui.set(id, { + [=](auto, auto) { fmt::println("clicked button_{}", i); } + }); + $gui.set(id, {"broken_yoyo-64"}); } + + auto close = $gui.entity("close"); + $gui.set(close, {}); + $gui.set(close, {L"CLOSE"}); + $gui.set(close, + guecs::make_action(*$level.world, Events::GUI::LOOT_CLOSE)); + $gui.init(); } diff --git a/gui/overlay_ui.cpp b/gui/overlay_ui.cpp index c97cbca..3a305e5 100644 --- a/gui/overlay_ui.cpp +++ b/gui/overlay_ui.cpp @@ -1,6 +1,5 @@ #include "gui/overlay_ui.hpp" #include "constants.hpp" -#include "color.hpp" #include "events.hpp" #include diff --git a/gui/status_ui.cpp b/gui/status_ui.cpp index 98101cb..abd9f9f 100644 --- a/gui/status_ui.cpp +++ b/gui/status_ui.cpp @@ -1,7 +1,6 @@ #include "gui/status_ui.hpp" #include "components.hpp" #include "inventory.hpp" -#include "color.hpp" #include #include "rand.hpp" #include diff --git a/lel.hpp b/lel.hpp deleted file mode 100644 index 74ee59f..0000000 --- a/lel.hpp +++ /dev/null @@ -1,55 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include - -namespace lel { - - struct Cell { - int x = 0; - int y = 0; - int w = 0; - int h = 0; - int mid_x = 0; - int mid_y = 0; - int max_w = 0; - int max_h = 0; - int col = 0; - int row = 0; - bool right = false; - bool bottom = false; - bool expand = false; - bool center = false; - bool percent = false; - - Cell(int col, int row) : col(col), row(row) {} - Cell() {} - }; - - using Row = std::vector; - using CellMap = std::unordered_map; - - struct Parser { - int grid_x = 0; - int grid_y = 0; - int grid_w = 0; - int grid_h = 0; - Cell cur; - std::vector grid; - CellMap cells; - - Parser(int x, int y, int width, int height); - Parser(); - - void position(int x, int y, int width, int height); - void id(std::string name); - void reset(); - bool parse(std::string input); - void finalize(); - std::optional hit(int x, int y); - }; - - Cell center(int width, int height, Cell &parent); -} diff --git a/meson.build b/meson.build index 20a643c..50bb256 100644 --- a/meson.build +++ b/meson.build @@ -139,7 +139,6 @@ executable('runtests', sources + [ 'tests/easings.cpp', 'tests/fsm.cpp', 'tests/inventory.cpp', - 'tests/lel.cpp', 'tests/levelmanager.cpp', 'tests/lighting.cpp', 'tests/map.cpp', @@ -167,7 +166,8 @@ executable('zedcaster', dependencies: dependencies) executable('fragviewer', - sources + [ 'tools/fragviewer.cpp' ], + [ 'textures.cpp', 'config.cpp', + 'dbc.cpp', 'tools/fragviewer.cpp' ], cpp_args: cpp_args, link_args: link_args, override_options: exe_defaults, diff --git a/tests/lel.cpp b/tests/lel.cpp deleted file mode 100644 index 8898a23..0000000 --- a/tests/lel.cpp +++ /dev/null @@ -1,52 +0,0 @@ -#include "lel.hpp" -#include -#include -#include - -TEST_CASE("test basic ops", "[lel]") { - lel::Parser parser(0, 0, 500, 500); - - bool good = parser.parse( - "[ label_1 | label3 | test1]" - "[ *(300,300)text1 | %(150)people | ^test2]" - "[ >label2 | _ | .test3]" - "[ =message | buttons | test4]"); - - REQUIRE(good); - - for(size_t rowcount = 0; rowcount < parser.grid.size(); rowcount++) { - auto& row = parser.grid[rowcount]; - - for(size_t colcount = 0; colcount < row.size(); colcount++) { - auto &name = row[colcount]; - if(name == "_") { - REQUIRE(!parser.cells.contains(name)); - } else { - auto &cell = parser.cells.at(name); - REQUIRE(cell.row == int(rowcount)); - REQUIRE(cell.col == int(colcount)); - } - } - } - - REQUIRE(parser.cells.size() == 11); - REQUIRE(parser.cells.at("label2").right == true); - REQUIRE(parser.cells.at("text1").expand == true); - REQUIRE(parser.cells.at("text1").w == 300); - REQUIRE(parser.cells.at("text1").h == 300); - REQUIRE(parser.cells.at("people").expand == false); - REQUIRE(parser.cells.at("message").expand == false); - REQUIRE(parser.cells.at("message").center == true); - - for(auto& [name, cell] : parser.cells) { - REQUIRE(cell.w > 0); - REQUIRE(cell.h > 0); - } - - auto hit = parser.hit(10, 10); - REQUIRE(*hit == "label_1"); - - auto nohit = parser.hit(1000, 1000); - REQUIRE(!nohit); - REQUIRE(nohit == std::nullopt); -}