Now overlay UI can show some text pretty easily and is showing the debug stats.

master
Zed A. Shaw 10 months ago
parent d8e1fc7aa3
commit 30a7e1b2cc
  1. 13
      guecs.hpp
  2. 35
      gui.cpp
  3. 1
      gui.hpp
  4. 20
      overlay_ui.cpp
  5. 3
      overlay_ui.hpp

@ -158,10 +158,15 @@ namespace guecs {
return $world.get<lel::Cell>(entity); return $world.get<lel::Cell>(entity);
} }
template <typename Comp> template <typename Comp>
void remove(DinkyECS::Entity ent) { Comp& get(DinkyECS::Entity entity) {
$world.remove<Comp>(ent); return $world.get<Comp>(entity);
} }
template <typename Comp>
void remove(DinkyECS::Entity ent) {
$world.remove<Comp>(ent);
}
}; };
Clickable make_action(DinkyECS::World& target, Events::GUI event); Clickable make_action(DinkyECS::World& target, Events::GUI event);

@ -20,14 +20,10 @@ namespace gui {
$status_view($level), $status_view($level),
$overlay_view($level, $textures), $overlay_view($level, $textures),
$font{FONT_FILE_NAME}, $font{FONT_FILE_NAME},
$text{$font},
$rayview($textures, RAY_VIEW_WIDTH, RAY_VIEW_HEIGHT) $rayview($textures, RAY_VIEW_WIDTH, RAY_VIEW_HEIGHT)
{ {
$window.setVerticalSyncEnabled(VSYNC); $window.setVerticalSyncEnabled(VSYNC);
$window.setFramerateLimit(FRAME_LIMIT); $window.setFramerateLimit(FRAME_LIMIT);
$text.setPosition({RAY_VIEW_X,RAY_VIEW_Y});
$text.setCharacterSize(20);
$text.setFillColor(ColorValue::LIGHT_DARK);
$textures.load_tiles(); $textures.load_tiles();
$textures.load_sprites(); $textures.load_sprites();
} }
@ -258,6 +254,7 @@ namespace gui {
break; break;
case KEY::P: case KEY::P:
debug(); debug();
break;
default: default:
break; // ignored break; // ignored
} }
@ -266,21 +263,27 @@ namespace gui {
} }
void FSM::debug() { void FSM::debug() {
auto& debug = $level.world->get_the<Debug>(); auto& dbg = $level.world->get_the<Debug>();
debug.FPS = !debug.FPS; dbg.FPS = !dbg.FPS;
debug.PATHS = !debug.PATHS; dbg.PATHS = !dbg.PATHS;
auto player = $level.world->get_the<Player>();
auto& player_combat = $level.world->get<Combat>(player.entity); if(dbg.FPS) {
player_combat.hp = player_combat.max_hp; // it's on now, enable things
$combat_view.set_damage(float(player_combat.hp) / float(player_combat.max_hp)); auto player = $level.world->get_the<Player>();
auto& player_combat = $level.world->get<Combat>(player.entity);
player_combat.hp = player_combat.max_hp;
$combat_view.set_damage(float(player_combat.hp) / float(player_combat.max_hp));
$overlay_view.init_stats();
} else {
// it's off now, close it
$overlay_view.close_stats();
}
} }
void FSM::draw_stats() { void FSM::draw_stats() {
auto player = $level.world->get_the<Player>(); auto player = $level.world->get_the<Player>();
auto player_combat = $level.world->get<Combat>(player.entity); auto player_combat = $level.world->get<Combat>(player.entity);
std::string stats = fmt::format("STATS\n"
$text.setString(
fmt::format("FPS\n"
"HP: {}\n" "HP: {}\n"
"mean:{:>8.5}\n" "mean:{:>8.5}\n"
"sdev: {:>8.5}\n" "sdev: {:>8.5}\n"
@ -292,9 +295,9 @@ namespace gui {
"Debug? {}\n\n", "Debug? {}\n\n",
player_combat.hp, $stats.mean(), $stats.stddev(), $stats.min, player_combat.hp, $stats.mean(), $stats.stddev(), $stats.min,
$stats.max, $stats.n, VSYNC, $stats.max, $stats.n, VSYNC,
FRAME_LIMIT, DEBUG_BUILD)); FRAME_LIMIT, DEBUG_BUILD);
$window.draw($text); $overlay_view.draw_stats(stats);
} }
void FSM::draw_blood() { void FSM::draw_blood() {

@ -56,7 +56,6 @@ namespace gui {
OverlayUI $overlay_view; OverlayUI $overlay_view;
CameraLOL $camera; CameraLOL $camera;
sf::Font $font; sf::Font $font;
sf::Text $text;
Stats $stats; Stats $stats;
TexturePack $textures; TexturePack $textures;
Raycaster $rayview; Raycaster $rayview;

@ -45,4 +45,24 @@ namespace gui {
$gui.remove<guecs::Sprite>(middle); $gui.remove<guecs::Sprite>(middle);
} }
} }
void OverlayUI::init_stats() {
auto top_left = $gui.entity("top_left");
auto &cell = $gui.cell_for(top_left);
Textual text{"", 20};
text.init(cell, $gui.$font);
text.text->setFillColor(ColorValue::LIGHT_MID);
$gui.set<Textual>(top_left, text);
}
void OverlayUI::draw_stats(std::string stats) {
auto top_left = $gui.entity("top_left");
auto& text = $gui.get<Textual>(top_left);
text.text->setString(stats);
}
void OverlayUI::close_stats() {
auto top_left = $gui.entity("top_left");
$gui.remove<Textual>(top_left);
}
} }

@ -17,5 +17,8 @@ namespace gui {
void draw(sf::RenderWindow& window); void draw(sf::RenderWindow& window);
void click(int x, int y); void click(int x, int y);
void show_damage(bool show); void show_damage(bool show);
void init_stats();
void draw_stats(std::string stats);
void close_stats();
}; };
} }