It's actually better to just use FTXUI's Modal system than to invent my own.

main
Zed A. Shaw 2 weeks ago
parent 88d362d6a5
commit 958c8545a7
  1. 19
      gui.cpp
  2. 1
      gui.hpp
  3. 10
      render.cpp
  4. 1
      render.hpp

@ -34,7 +34,6 @@ GUI::GUI(DinkyECS::World &world, Map& game_map) :
$log({{"Welcome to the game!"}}), $log({{"Welcome to the game!"}}),
$status_ui(SCREEN_X, SCREEN_Y, 0, 0), $status_ui(SCREEN_X, SCREEN_Y, 0, 0),
$map_view(0, 0, GAME_MAP_POS, 0, false), $map_view(0, 0, GAME_MAP_POS, 0, false),
$modal_test(SCREEN_X/2, SCREEN_Y/4, 800, 200, false),
$view_port{0,0}, $view_port{0,0},
$world(world), $world(world),
$sounds("./assets"), $sounds("./assets"),
@ -72,25 +71,26 @@ void GUI::create_renderer() {
})); }));
auto modal_buttons = Container::Horizontal({ auto modal_buttons = Container::Horizontal({
Button("OK", [&]{ println("OK pressed"); }), Button("OK", [&]{ $show_modal = false; }),
Button("CANCEL", [&]{ println("CANCEL pressed"); }), Button("CANCEL", [&]{ $show_modal = false; }),
}); });
$modal_test.set_renderer(Renderer([&, modal_buttons] { auto modal_test = Renderer([&, modal_buttons] {
return hbox({ return hbox({
hflow( hflow(
vbox( vbox(
text("Hello!"), text("Hello!"),
modal_buttons->Render() modal_buttons->Render()
))}) | border; ))}) | border;
})); });
modal_test->Add(modal_buttons);
auto test_button = Container::Horizontal({ auto test_button = Container::Horizontal({
Button("Open Test Modal", [&]{ $show_modal = true; }), Button("Open Test Modal", [&]{ $show_modal = true; }),
Button("Close It", [&]{ $show_modal = false; }), Button("Close It", [&]{ $show_modal = false; }),
}); });
auto status_rend = Renderer(test_button, [&, test_button, player]{ auto status_rend = Renderer(test_button, [&, modal_test, test_button, player]{
const auto& player_combat = $world.get<Combat>(player.entity); const auto& player_combat = $world.get<Combat>(player.entity);
const auto& inventory = $world.get<Inventory>(player.entity); const auto& inventory = $world.get<Inventory>(player.entity);
$status_text = player_combat.hp > 0 ? "NOT DEAD" : "DEAD!!!!!!"; $status_text = player_combat.hp > 0 ? "NOT DEAD" : "DEAD!!!!!!";
@ -118,7 +118,10 @@ void GUI::create_renderer() {
}); });
}); });
status_rend |= Modal(modal_test, &$show_modal);
$status_ui.set_renderer(status_rend); $status_ui.set_renderer(status_rend);
$status_ui.add(modal_test);
} }
void GUI::handle_world_events() { void GUI::handle_world_events() {
@ -240,10 +243,6 @@ void GUI::render_scene() {
$renderer.draw_text($status_ui); $renderer.draw_text($status_ui);
$renderer.draw_grid($map_view); $renderer.draw_grid($map_view);
if($show_modal) {
$renderer.draw_text($modal_test);
}
$renderer.display(); $renderer.display();
} }

@ -43,7 +43,6 @@ class GUI {
ActionLog $log; ActionLog $log;
Panel $status_ui; Panel $status_ui;
Panel $map_view; Panel $map_view;
Panel $modal_test;
bool $show_modal = false; bool $show_modal = false;
Point $view_port; Point $view_port;
Component $test_button; Component $test_button;

@ -217,15 +217,17 @@ void SFMLRender::render_text(const std::wstring &text, float start_x, float star
} }
void SFMLRender::draw_text(Panel &panel, bool with_border) { void SFMLRender::draw_text(Panel &panel, bool with_border) {
int border_px = with_border ? UI_PANEL_BORDER_PX : 0;
sf::RectangleShape backing( sf::RectangleShape backing(
sf::Vector2f($ui_bounds.width * panel.width, sf::Vector2f($ui_bounds.width * panel.width + border_px,
$ui_bounds.height * panel.height)); $ui_bounds.height * panel.height + border_px));
backing.setFillColor(sf::Color(0, 0, 0)); backing.setFillColor(sf::Color(0, 0, 0));
if(with_border) { if(with_border) {
backing.setOutlineColor(color(Value::MID)); backing.setOutlineColor($default_fg);
backing.setOutlineThickness(5); backing.setOutlineThickness(border_px);
} }
backing.setPosition(panel.x, panel.y); backing.setPosition(panel.x, panel.y);

@ -23,6 +23,7 @@ const int BASE_MAP_FONT_SIZE=90;
const wchar_t BG_TILE = L''; const wchar_t BG_TILE = L'';
const wchar_t UI_BASE_CHAR = L''; const wchar_t UI_BASE_CHAR = L'';
const int BG_BOX_OFFSET=5; const int BG_BOX_OFFSET=5;
const int UI_PANEL_BORDER_PX=5;
enum class Value { enum class Value {
BLACK=0, DARK_DARK, DARK_MID, BLACK=0, DARK_DARK, DARK_MID,

Loading…
Cancel
Save