More refactoring of the FSM to MainUI. Move the overlay out and some more.
This commit is contained in:
parent
a7a60ad35c
commit
23ed1594f2
4 changed files with 106 additions and 82 deletions
90
gui_fsm.cpp
90
gui_fsm.cpp
|
@ -12,13 +12,13 @@ namespace gui {
|
||||||
using namespace components;
|
using namespace components;
|
||||||
|
|
||||||
FSM::FSM() :
|
FSM::FSM() :
|
||||||
$main_ui($levels.current()),
|
$window(sf::VideoMode({SCREEN_WIDTH, SCREEN_HEIGHT}), "Zed's Raycaster Thing"),
|
||||||
$renderer($main_ui.$window),
|
$main_ui($window, $levels.current(), $textures),
|
||||||
|
$renderer($window),
|
||||||
$level($levels.current()),
|
$level($levels.current()),
|
||||||
$map_ui($level),
|
$map_ui($level),
|
||||||
$combat_ui($level),
|
$combat_ui($level),
|
||||||
$status_ui($level),
|
$status_ui($level),
|
||||||
$overlay_ui($level, $textures),
|
|
||||||
$font{FONT_FILE_NAME},
|
$font{FONT_FILE_NAME},
|
||||||
$rayview($textures, RAY_VIEW_WIDTH, RAY_VIEW_HEIGHT)
|
$rayview($textures, RAY_VIEW_WIDTH, RAY_VIEW_HEIGHT)
|
||||||
{
|
{
|
||||||
|
@ -47,8 +47,8 @@ namespace gui {
|
||||||
$rayview.set_position(RAY_VIEW_X, RAY_VIEW_Y);
|
$rayview.set_position(RAY_VIEW_X, RAY_VIEW_Y);
|
||||||
$rayview.position_camera($player.x + 0.5, $player.y + 0.5);
|
$rayview.position_camera($player.x + 0.5, $player.y + 0.5);
|
||||||
|
|
||||||
|
$main_ui.render();
|
||||||
$combat_ui.render($textures);
|
$combat_ui.render($textures);
|
||||||
$overlay_ui.render();
|
|
||||||
$status_ui.render($textures);
|
$status_ui.render($textures);
|
||||||
$status_ui.log("Welcome to the game!");
|
$status_ui.log("Welcome to the game!");
|
||||||
|
|
||||||
|
@ -123,7 +123,7 @@ namespace gui {
|
||||||
|
|
||||||
switch(ev) {
|
switch(ev) {
|
||||||
case QUIT:
|
case QUIT:
|
||||||
$main_ui.$window.close();
|
$window.close();
|
||||||
state(State::END);
|
state(State::END);
|
||||||
return; // done
|
return; // done
|
||||||
case MOVE_FORWARD:
|
case MOVE_FORWARD:
|
||||||
|
@ -155,7 +155,7 @@ namespace gui {
|
||||||
state(State::ATTACKING);
|
state(State::ATTACKING);
|
||||||
break;
|
break;
|
||||||
case START_COMBAT:
|
case START_COMBAT:
|
||||||
$overlay_ui.show_sprite("top_right", "cinqueda");
|
$main_ui.$overlay_ui.show_sprite("top_right", "cinqueda");
|
||||||
state(State::IN_COMBAT);
|
state(State::IN_COMBAT);
|
||||||
break;
|
break;
|
||||||
case CLOSE:
|
case CLOSE:
|
||||||
|
@ -187,11 +187,11 @@ namespace gui {
|
||||||
state(State::COMBAT_ROTATE);
|
state(State::COMBAT_ROTATE);
|
||||||
break;
|
break;
|
||||||
case STOP_COMBAT:
|
case STOP_COMBAT:
|
||||||
$overlay_ui.close_sprite("top_right");
|
$main_ui.$overlay_ui.close_sprite("top_right");
|
||||||
state(State::IDLE);
|
state(State::IDLE);
|
||||||
break;
|
break;
|
||||||
case QUIT:
|
case QUIT:
|
||||||
$main_ui.$window.close();
|
$window.close();
|
||||||
state(State::END);
|
state(State::END);
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
|
@ -217,7 +217,7 @@ namespace gui {
|
||||||
}
|
}
|
||||||
|
|
||||||
void FSM::keyboard() {
|
void FSM::keyboard() {
|
||||||
while(const auto keyev = $main_ui.$window.pollEvent()) {
|
while(const auto keyev = $window.pollEvent()) {
|
||||||
if(keyev->is<sf::Event::Closed>()) {
|
if(keyev->is<sf::Event::Closed>()) {
|
||||||
event(Event::QUIT);
|
event(Event::QUIT);
|
||||||
}
|
}
|
||||||
|
@ -244,7 +244,7 @@ namespace gui {
|
||||||
event(Event::MOVE_LEFT);
|
event(Event::MOVE_LEFT);
|
||||||
break;
|
break;
|
||||||
case KEY::R:
|
case KEY::R:
|
||||||
$stats.reset();
|
$main_ui.$stats.reset();
|
||||||
break;
|
break;
|
||||||
case KEY::M:
|
case KEY::M:
|
||||||
event(Event::MAP_OPEN);
|
event(Event::MAP_OPEN);
|
||||||
|
@ -253,7 +253,7 @@ namespace gui {
|
||||||
event(Event::CLOSE);
|
event(Event::CLOSE);
|
||||||
break;
|
break;
|
||||||
case KEY::P:
|
case KEY::P:
|
||||||
debug();
|
$main_ui.debug();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break; // ignored
|
break; // ignored
|
||||||
|
@ -262,85 +262,35 @@ namespace gui {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FSM::debug() {
|
|
||||||
auto& dbg = $level.world->get_the<Debug>();
|
|
||||||
dbg.FPS = !dbg.FPS;
|
|
||||||
dbg.PATHS = !dbg.PATHS;
|
|
||||||
|
|
||||||
if(dbg.FPS) {
|
|
||||||
// it's on now, enable things
|
|
||||||
auto player = $level.world->get_the<Player>();
|
|
||||||
auto& player_combat = $level.world->get<Combat>(player.entity);
|
|
||||||
player_combat.hp = player_combat.max_hp;
|
|
||||||
$combat_ui.set_damage(float(player_combat.hp) / float(player_combat.max_hp));
|
|
||||||
$overlay_ui.show_text("top_left", "STATS");
|
|
||||||
} else {
|
|
||||||
// it's off now, close it
|
|
||||||
$overlay_ui.close_text("top_left");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void FSM::draw_stats() {
|
|
||||||
auto player = $level.world->get_the<Player>();
|
|
||||||
auto player_combat = $level.world->get<Combat>(player.entity);
|
|
||||||
std::string stats = fmt::format("STATS\n"
|
|
||||||
"HP: {}\n"
|
|
||||||
"mean:{:>8.5}\n"
|
|
||||||
"sdev: {:>8.5}\n"
|
|
||||||
"min: {:>8.5}\n"
|
|
||||||
"max: {:>8.5}\n"
|
|
||||||
"count:{:<10}\n\n"
|
|
||||||
"VSync? {}\n"
|
|
||||||
"FR Limit: {}\n"
|
|
||||||
"Debug? {}\n\n",
|
|
||||||
player_combat.hp, $stats.mean(), $stats.stddev(), $stats.min,
|
|
||||||
$stats.max, $stats.n, VSYNC,
|
|
||||||
FRAME_LIMIT, DEBUG_BUILD);
|
|
||||||
|
|
||||||
$overlay_ui.update_text("top_left", stats);
|
|
||||||
}
|
|
||||||
|
|
||||||
void FSM::draw_blood() {
|
|
||||||
auto player = $level.world->get_the<Player>();
|
|
||||||
auto player_combat = $level.world->get<Combat>(player.entity);
|
|
||||||
if(float(player_combat.hp) / float(player_combat.max_hp) < 0.5) {
|
|
||||||
$overlay_ui.show_sprite("middle", "blood_splatter");
|
|
||||||
} else {
|
|
||||||
$overlay_ui.close_sprite("middle");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void FSM::draw_gui() {
|
void FSM::draw_gui() {
|
||||||
$status_ui.draw($main_ui.$window);
|
$status_ui.draw($window);
|
||||||
$combat_ui.draw($main_ui.$window);
|
$combat_ui.draw($window);
|
||||||
$overlay_ui.draw($main_ui.$window);
|
$main_ui.draw();
|
||||||
|
|
||||||
auto debug = $level.world->get_the<Debug>();
|
|
||||||
if(debug.FPS) draw_stats();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FSM::render() {
|
void FSM::render() {
|
||||||
if(in_state(State::MAPPING)) {
|
if(in_state(State::MAPPING)) {
|
||||||
$main_ui.$window.clear();
|
$window.clear();
|
||||||
$map_ui.render();
|
$map_ui.render();
|
||||||
$renderer.draw($map_ui);
|
$renderer.draw($map_ui);
|
||||||
} else {
|
} else {
|
||||||
auto start = std::chrono::high_resolution_clock::now();
|
auto start = std::chrono::high_resolution_clock::now();
|
||||||
$rayview.draw($main_ui.$window);
|
$rayview.draw($window);
|
||||||
auto end = std::chrono::high_resolution_clock::now();
|
auto end = std::chrono::high_resolution_clock::now();
|
||||||
auto elapsed = std::chrono::duration<double>(end - start);
|
auto elapsed = std::chrono::duration<double>(end - start);
|
||||||
$stats.sample(1/elapsed.count());
|
$main_ui.$stats.sample(1/elapsed.count());
|
||||||
|
|
||||||
draw_gui();
|
draw_gui();
|
||||||
draw_blood();
|
$main_ui.draw_blood();
|
||||||
}
|
}
|
||||||
|
|
||||||
$main_ui.$window.display();
|
$window.display();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FSM::mouse() {
|
void FSM::mouse() {
|
||||||
if(sf::Mouse::isButtonPressed(sf::Mouse::Button::Left)) {
|
if(sf::Mouse::isButtonPressed(sf::Mouse::Button::Left)) {
|
||||||
sf::Vector2f pos = $main_ui.$window.mapPixelToCoords(sf::Mouse::getPosition($main_ui.$window));
|
sf::Vector2f pos = $window.mapPixelToCoords(sf::Mouse::getPosition($window));
|
||||||
$combat_ui.$gui.mouse(pos.x, pos.y);
|
$combat_ui.$gui.mouse(pos.x, pos.y);
|
||||||
$status_ui.$gui.mouse(pos.x, pos.y);
|
$status_ui.$gui.mouse(pos.x, pos.y);
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,7 @@ namespace gui {
|
||||||
|
|
||||||
class FSM : public DeadSimpleFSM<State, Event> {
|
class FSM : public DeadSimpleFSM<State, Event> {
|
||||||
public:
|
public:
|
||||||
|
sf::RenderWindow $window;
|
||||||
bool $draw_stats = false;
|
bool $draw_stats = false;
|
||||||
Point $player{0,0};
|
Point $player{0,0};
|
||||||
LevelManager $levels;
|
LevelManager $levels;
|
||||||
|
@ -53,10 +54,8 @@ namespace gui {
|
||||||
MapViewUI $map_ui;
|
MapViewUI $map_ui;
|
||||||
CombatUI $combat_ui;
|
CombatUI $combat_ui;
|
||||||
StatusUI $status_ui;
|
StatusUI $status_ui;
|
||||||
OverlayUI $overlay_ui;
|
|
||||||
CameraLOL $camera;
|
CameraLOL $camera;
|
||||||
sf::Font $font;
|
sf::Font $font;
|
||||||
Stats $stats;
|
|
||||||
TexturePack $textures;
|
TexturePack $textures;
|
||||||
Raycaster $rayview;
|
Raycaster $rayview;
|
||||||
|
|
||||||
|
@ -76,10 +75,8 @@ namespace gui {
|
||||||
|
|
||||||
void try_move(int dir, bool strafe);
|
void try_move(int dir, bool strafe);
|
||||||
void keyboard();
|
void keyboard();
|
||||||
void draw_stats();
|
|
||||||
void draw_gui();
|
void draw_gui();
|
||||||
void draw_blood();
|
void draw_blood();
|
||||||
void debug();
|
|
||||||
void render();
|
void render();
|
||||||
void mouse();
|
void mouse();
|
||||||
void generate_map();
|
void generate_map();
|
||||||
|
|
73
main_ui.cpp
73
main_ui.cpp
|
@ -1 +1,74 @@
|
||||||
#include "main_ui.hpp"
|
#include "main_ui.hpp"
|
||||||
|
#include "components.hpp"
|
||||||
|
|
||||||
|
namespace gui {
|
||||||
|
using namespace components;
|
||||||
|
|
||||||
|
MainUI::MainUI(sf::RenderWindow& window, GameLevel level, TexturePack& textures) :
|
||||||
|
$window(window),
|
||||||
|
$level(level),
|
||||||
|
$textures(textures),
|
||||||
|
$overlay_ui($level, $textures)
|
||||||
|
{
|
||||||
|
$window.setVerticalSyncEnabled(VSYNC);
|
||||||
|
$window.setFramerateLimit(FRAME_LIMIT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainUI::debug() {
|
||||||
|
auto& dbg = $level.world->get_the<Debug>();
|
||||||
|
dbg.FPS = !dbg.FPS;
|
||||||
|
dbg.PATHS = !dbg.PATHS;
|
||||||
|
|
||||||
|
if(dbg.FPS) {
|
||||||
|
// it's on now, enable things
|
||||||
|
auto player = $level.world->get_the<Player>();
|
||||||
|
auto& player_combat = $level.world->get<Combat>(player.entity);
|
||||||
|
player_combat.hp = player_combat.max_hp;
|
||||||
|
$overlay_ui.show_text("top_left", "STATS");
|
||||||
|
} else {
|
||||||
|
// it's off now, close it
|
||||||
|
$overlay_ui.close_text("top_left");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainUI::draw_stats() {
|
||||||
|
auto player = $level.world->get_the<Player>();
|
||||||
|
auto player_combat = $level.world->get<Combat>(player.entity);
|
||||||
|
std::string stats = fmt::format("STATS\n"
|
||||||
|
"HP: {}\n"
|
||||||
|
"mean:{:>8.5}\n"
|
||||||
|
"sdev: {:>8.5}\n"
|
||||||
|
"min: {:>8.5}\n"
|
||||||
|
"max: {:>8.5}\n"
|
||||||
|
"count:{:<10}\n\n"
|
||||||
|
"VSync? {}\n"
|
||||||
|
"FR Limit: {}\n"
|
||||||
|
"Debug? {}\n\n",
|
||||||
|
player_combat.hp, $stats.mean(), $stats.stddev(), $stats.min,
|
||||||
|
$stats.max, $stats.n, VSYNC,
|
||||||
|
FRAME_LIMIT, DEBUG_BUILD);
|
||||||
|
|
||||||
|
$overlay_ui.update_text("top_left", stats);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainUI::draw_blood() {
|
||||||
|
auto player = $level.world->get_the<Player>();
|
||||||
|
auto player_combat = $level.world->get<Combat>(player.entity);
|
||||||
|
if(float(player_combat.hp) / float(player_combat.max_hp) < 0.5) {
|
||||||
|
$overlay_ui.show_sprite("middle", "blood_splatter");
|
||||||
|
} else {
|
||||||
|
$overlay_ui.close_sprite("middle");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainUI::render() {
|
||||||
|
$overlay_ui.render();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainUI::draw() {
|
||||||
|
$overlay_ui.draw($window);
|
||||||
|
|
||||||
|
auto debug = $level.world->get_the<Debug>();
|
||||||
|
if(debug.FPS) draw_stats();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
20
main_ui.hpp
20
main_ui.hpp
|
@ -1,20 +1,24 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "levelmanager.hpp"
|
#include "levelmanager.hpp"
|
||||||
#include <SFML/Graphics/RenderWindow.hpp>
|
#include <SFML/Graphics/RenderWindow.hpp>
|
||||||
|
#include "stats.hpp"
|
||||||
|
#include "overlay_ui.hpp"
|
||||||
|
|
||||||
namespace gui {
|
namespace gui {
|
||||||
|
|
||||||
class MainUI {
|
class MainUI {
|
||||||
public:
|
public:
|
||||||
|
Stats $stats;
|
||||||
|
sf::RenderWindow& $window;
|
||||||
GameLevel $level;
|
GameLevel $level;
|
||||||
sf::RenderWindow $window;
|
TexturePack& $textures;
|
||||||
|
OverlayUI $overlay_ui;
|
||||||
|
|
||||||
MainUI(GameLevel level) :
|
MainUI(sf::RenderWindow& window, GameLevel level, TexturePack &textures);
|
||||||
$level(level),
|
void debug();
|
||||||
$window(sf::VideoMode({SCREEN_WIDTH, SCREEN_HEIGHT}), "Zed's Raycaster Thing")
|
void draw_stats();
|
||||||
{
|
void draw_blood();
|
||||||
$window.setVerticalSyncEnabled(VSYNC);
|
void render();
|
||||||
$window.setFramerateLimit(FRAME_LIMIT);
|
void draw();
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue