diff --git a/gui.cpp b/gui_fsm.cpp similarity index 79% rename from gui.cpp rename to gui_fsm.cpp index 888b76c..439d98c 100644 --- a/gui.cpp +++ b/gui_fsm.cpp @@ -1,4 +1,4 @@ -#include "gui.hpp" +#include "gui_fsm.hpp" #include #include #include @@ -12,18 +12,16 @@ namespace gui { using namespace components; FSM::FSM() : - $window(sf::VideoMode({SCREEN_WIDTH, SCREEN_HEIGHT}), "Zed's Raycaster Thing"), - $renderer($window), + $main_ui($levels.current()), + $renderer($main_ui.$window), $level($levels.current()), - $map_view($level), - $combat_view($level), - $status_view($level), - $overlay_view($level, $textures), + $map_ui($level), + $combat_ui($level), + $status_ui($level), + $overlay_ui($level, $textures), $font{FONT_FILE_NAME}, $rayview($textures, RAY_VIEW_WIDTH, RAY_VIEW_HEIGHT) { - $window.setVerticalSyncEnabled(VSYNC); - $window.setFramerateLimit(FRAME_LIMIT); $textures.load_tiles(); $textures.load_sprites(); } @@ -49,15 +47,15 @@ namespace gui { $rayview.set_position(RAY_VIEW_X, RAY_VIEW_Y); $rayview.position_camera($player.x + 0.5, $player.y + 0.5); - $combat_view.render($textures); - $overlay_view.render(); - $status_view.render($textures); - $status_view.log("Welcome to the game!"); + $combat_ui.render($textures); + $overlay_ui.render(); + $status_ui.render($textures); + $status_ui.log("Welcome to the game!"); $renderer.init_terminal(); - $map_view.create_render(); - $map_view.resize_canvas(); - $renderer.resize_grid(MAX_FONT_SIZE, $map_view); + $map_ui.create_render(); + $map_ui.resize_canvas(); + $renderer.resize_grid(MAX_FONT_SIZE, $map_ui); run_systems(); state(State::IDLE); @@ -125,7 +123,7 @@ namespace gui { switch(ev) { case QUIT: - $window.close(); + $main_ui.$window.close(); state(State::END); return; // done case MOVE_FORWARD: @@ -149,15 +147,15 @@ namespace gui { state(State::ROTATING); break; case MAP_OPEN: - $renderer.resize_grid(MAX_FONT_SIZE, $map_view); - $map_view.resize_canvas(); + $renderer.resize_grid(MAX_FONT_SIZE, $map_ui); + $map_ui.resize_canvas(); state(State::MAPPING); break; case ATTACK: state(State::ATTACKING); break; case START_COMBAT: - $overlay_view.show_sprite("top_right", "cinqueda"); + $overlay_ui.show_sprite("top_right", "cinqueda"); state(State::IN_COMBAT); break; case CLOSE: @@ -177,7 +175,7 @@ namespace gui { switch(ev) { case ATTACK: - $status_view.log("You attack!"); + $status_ui.log("You attack!"); state(State::ATTACKING); break; case ROTATE_LEFT: @@ -189,11 +187,11 @@ namespace gui { state(State::COMBAT_ROTATE); break; case STOP_COMBAT: - $overlay_view.close_sprite("top_right"); + $overlay_ui.close_sprite("top_right"); state(State::IDLE); break; case QUIT: - $window.close(); + $main_ui.$window.close(); state(State::END); return; default: @@ -219,7 +217,7 @@ namespace gui { } void FSM::keyboard() { - while(const auto keyev = $window.pollEvent()) { + while(const auto keyev = $main_ui.$window.pollEvent()) { if(keyev->is()) { event(Event::QUIT); } @@ -274,11 +272,11 @@ namespace gui { auto player = $level.world->get_the(); auto& player_combat = $level.world->get(player.entity); player_combat.hp = player_combat.max_hp; - $combat_view.set_damage(float(player_combat.hp) / float(player_combat.max_hp)); - $overlay_view.show_text("top_left", "STATS"); + $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_view.close_text("top_left"); + $overlay_ui.close_text("top_left"); } } @@ -299,23 +297,23 @@ namespace gui { $stats.max, $stats.n, VSYNC, FRAME_LIMIT, DEBUG_BUILD); - $overlay_view.update_text("top_left", stats); + $overlay_ui.update_text("top_left", stats); } void FSM::draw_blood() { auto player = $level.world->get_the(); auto player_combat = $level.world->get(player.entity); if(float(player_combat.hp) / float(player_combat.max_hp) < 0.5) { - $overlay_view.show_sprite("middle", "blood_splatter"); + $overlay_ui.show_sprite("middle", "blood_splatter"); } else { - $overlay_view.close_sprite("middle"); + $overlay_ui.close_sprite("middle"); } } void FSM::draw_gui() { - $status_view.draw($window); - $combat_view.draw($window); - $overlay_view.draw($window); + $status_ui.draw($main_ui.$window); + $combat_ui.draw($main_ui.$window); + $overlay_ui.draw($main_ui.$window); auto debug = $level.world->get_the(); if(debug.FPS) draw_stats(); @@ -323,12 +321,12 @@ namespace gui { void FSM::render() { if(in_state(State::MAPPING)) { - $window.clear(); - $map_view.render(); - $renderer.draw($map_view); + $main_ui.$window.clear(); + $map_ui.render(); + $renderer.draw($map_ui); } else { auto start = std::chrono::high_resolution_clock::now(); - $rayview.draw($window); + $rayview.draw($main_ui.$window); auto end = std::chrono::high_resolution_clock::now(); auto elapsed = std::chrono::duration(end - start); $stats.sample(1/elapsed.count()); @@ -337,14 +335,14 @@ namespace gui { draw_blood(); } - $window.display(); + $main_ui.$window.display(); } void FSM::mouse() { if(sf::Mouse::isButtonPressed(sf::Mouse::Button::Left)) { - sf::Vector2f pos = $window.mapPixelToCoords(sf::Mouse::getPosition($window)); - $combat_view.$gui.mouse(pos.x, pos.y); - $status_view.$gui.mouse(pos.x, pos.y); + sf::Vector2f pos = $main_ui.$window.mapPixelToCoords(sf::Mouse::getPosition($main_ui.$window)); + $combat_ui.$gui.mouse(pos.x, pos.y); + $status_ui.$gui.mouse(pos.x, pos.y); } } @@ -381,17 +379,17 @@ namespace gui { auto &damage = std::any_cast(data); if(damage.enemy_did > 0) { - $status_view.log(fmt::format("Enemy HIT YOU for {} damage!", damage.enemy_did)); + $status_ui.log(fmt::format("Enemy HIT YOU for {} damage!", damage.enemy_did)); auto player_combat = world.get(player.entity); - $combat_view.set_damage(float(player_combat.hp) / float(player_combat.max_hp)); + $combat_ui.set_damage(float(player_combat.hp) / float(player_combat.max_hp)); } else { - $status_view.log("Enemy MISSED YOU."); + $status_ui.log("Enemy MISSED YOU."); } if(damage.player_did > 0) { - $status_view.log(fmt::format("You HIT enemy for {} damage!", damage.player_did)); + $status_ui.log(fmt::format("You HIT enemy for {} damage!", damage.player_did)); } else { - $status_view.log("You MISSED the enemy."); + $status_ui.log("You MISSED the enemy."); } } break; @@ -403,9 +401,9 @@ namespace gui { break; case eGUI::LOOT: { // auto &item = std::any_cast(data); - // $status_view.log(fmt::format("You picked up a {}.", + // $status_ui.log(fmt::format("You picked up a {}.", // std::string(item.data["name"]))); - $status_view.log("You picked up an item."); + $status_ui.log("You picked up an item."); } break; case eGUI::ATTACK: @@ -418,10 +416,10 @@ namespace gui { } } break; case eGUI::NOOP: - $status_view.log(fmt::format("NOOP EVENT! {},{}", evt, entity)); + $status_ui.log(fmt::format("NOOP EVENT! {},{}", evt, entity)); break; default: - $status_view.log(fmt::format("INVALID EVENT! {},{}", evt, entity)); + $status_ui.log(fmt::format("INVALID EVENT! {},{}", evt, entity)); } } } diff --git a/gui.hpp b/gui_fsm.hpp similarity index 89% rename from gui.hpp rename to gui_fsm.hpp index 261408d..011d6f1 100644 --- a/gui.hpp +++ b/gui_fsm.hpp @@ -7,6 +7,7 @@ #include "fsm.hpp" #include "render.hpp" #include "map_view.hpp" +#include "main_ui.hpp" #include "combat_ui.hpp" #include "status_ui.hpp" #include "overlay_ui.hpp" @@ -43,17 +44,16 @@ namespace gui { class FSM : public DeadSimpleFSM { public: - // ZED: these two will go away soon bool $draw_stats = false; Point $player{0,0}; LevelManager $levels; - sf::RenderWindow $window; + MainUI $main_ui; SFMLRender $renderer; GameLevel $level; - MapViewUI $map_view; - CombatUI $combat_view; - StatusUI $status_view; - OverlayUI $overlay_view; + MapViewUI $map_ui; + CombatUI $combat_ui; + StatusUI $status_ui; + OverlayUI $overlay_ui; CameraLOL $camera; sf::Font $font; Stats $stats; diff --git a/main.cpp b/main.cpp index cf80bb6..f36019c 100644 --- a/main.cpp +++ b/main.cpp @@ -1,4 +1,4 @@ -#include "gui.hpp" +#include "gui_fsm.hpp" int main() { gui::FSM main; diff --git a/main_ui.cpp b/main_ui.cpp new file mode 100644 index 0000000..b42b273 --- /dev/null +++ b/main_ui.cpp @@ -0,0 +1 @@ +#include "main_ui.hpp" diff --git a/main_ui.hpp b/main_ui.hpp new file mode 100644 index 0000000..92adaf0 --- /dev/null +++ b/main_ui.hpp @@ -0,0 +1,20 @@ +#pragma once +#include "levelmanager.hpp" +#include + +namespace gui { + + class MainUI { + public: + GameLevel $level; + sf::RenderWindow $window; + + MainUI(GameLevel level) : + $level(level), + $window(sf::VideoMode({SCREEN_WIDTH, SCREEN_HEIGHT}), "Zed's Raycaster Thing") + { + $window.setVerticalSyncEnabled(VSYNC); + $window.setFramerateLimit(FRAME_LIMIT); + } + }; +} diff --git a/meson.build b/meson.build index 6f21845..2e7d592 100644 --- a/meson.build +++ b/meson.build @@ -62,11 +62,12 @@ sources = [ 'dbc.cpp', 'devices.cpp', 'guecs.cpp', - 'gui.cpp', + 'gui_fsm.cpp', 'inventory.cpp', 'lel.cpp', 'levelmanager.cpp', 'lights.cpp', + 'main_ui.cpp', 'map.cpp', 'map_view.cpp', 'matrix.cpp',