|
|
|
@ -7,15 +7,71 @@ |
|
|
|
|
#include <numbers> |
|
|
|
|
#include "systems.hpp" |
|
|
|
|
#include "map_view.hpp" |
|
|
|
|
#include <ftxui/dom/elements.hpp> // for hflow, paragraph, separator, hbox, vbox, filler, operator|, border, Element |
|
|
|
|
#include <ftxui/dom/node.hpp> // for Render |
|
|
|
|
#include <ftxui/screen/box.hpp> // for ftxui |
|
|
|
|
#include <ftxui/component/loop.hpp> |
|
|
|
|
#include <ftxui/screen/color.hpp> |
|
|
|
|
#include <ftxui/dom/table.hpp> |
|
|
|
|
|
|
|
|
|
using namespace components; |
|
|
|
|
using namespace ftxui; |
|
|
|
|
|
|
|
|
|
namespace gui { |
|
|
|
|
|
|
|
|
|
void StatusUI::create_render() { |
|
|
|
|
auto player = $level.world->get_the<Player>(); |
|
|
|
|
|
|
|
|
|
auto status_rend = Renderer([&, player]{ |
|
|
|
|
const auto& player_combat = $level.world->get<Combat>(player.entity); |
|
|
|
|
const auto& combat = $level.world->get<Combat>(player.entity); |
|
|
|
|
|
|
|
|
|
std::vector<Element> log_list; |
|
|
|
|
log_list.push_back(text("Log messages here.")); |
|
|
|
|
|
|
|
|
|
auto log_box = vbox(log_list) | yflex_grow; |
|
|
|
|
|
|
|
|
|
return hbox({ |
|
|
|
|
hflow( |
|
|
|
|
vbox( |
|
|
|
|
text(fmt::format("HP: {: >3} DMG: {: >3}", |
|
|
|
|
player_combat.hp, |
|
|
|
|
combat.damage)), |
|
|
|
|
separator(), |
|
|
|
|
log_box |
|
|
|
|
) | flex_grow |
|
|
|
|
) |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
set_renderer(status_rend); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void CombatUI::create_render() { |
|
|
|
|
auto player = $level.world->get_the<Player>(); |
|
|
|
|
|
|
|
|
|
auto combat_rend = Renderer([&, player]{ |
|
|
|
|
const auto& player_combat = $level.world->get<Combat>(player.entity); |
|
|
|
|
const auto& combat = $level.world->get<Combat>(player.entity); |
|
|
|
|
|
|
|
|
|
return hbox({ |
|
|
|
|
text(fmt::format("HP: {: >3} DMG: {: >3}", |
|
|
|
|
player_combat.hp, |
|
|
|
|
combat.damage)) | flex_grow |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
set_renderer(combat_rend); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FSM::FSM() : |
|
|
|
|
$window(sf::VideoMode({SCREEN_WIDTH, SCREEN_HEIGHT}), "Zed's Raycaster Thing"), |
|
|
|
|
$renderer($window), |
|
|
|
|
$level($levels.current()), |
|
|
|
|
$map_view($level), |
|
|
|
|
$combat_view($level), |
|
|
|
|
$status_view($level), |
|
|
|
|
$font{FONT_FILE_NAME}, |
|
|
|
|
$text{$font}, |
|
|
|
|
$rayview($textures, RAY_VIEW_WIDTH, RAY_VIEW_HEIGHT) |
|
|
|
@ -47,10 +103,14 @@ namespace gui { |
|
|
|
|
$rayview.set_position(RAY_VIEW_X, RAY_VIEW_Y); |
|
|
|
|
$rayview.position_camera($player.x + 0.5, $player.y + 0.5); |
|
|
|
|
|
|
|
|
|
$status_view.create_render(); |
|
|
|
|
$combat_view.create_render(); |
|
|
|
|
|
|
|
|
|
$renderer.init_terminal(); |
|
|
|
|
$map_view.create_render(); |
|
|
|
|
$map_view.resize_canvas(); |
|
|
|
|
$renderer.resize_grid(MAX_FONT_SIZE, $map_view); |
|
|
|
|
|
|
|
|
|
run_systems(); |
|
|
|
|
state(State::IDLE); |
|
|
|
|
} |
|
|
|
@ -87,7 +147,6 @@ namespace gui { |
|
|
|
|
// just do 10 ticks
|
|
|
|
|
if($rotation_count % 10 == 0) { |
|
|
|
|
run_systems(); |
|
|
|
|
$rayview.$anim.play(false); |
|
|
|
|
$rotation = -10.0f; |
|
|
|
|
state(State::IDLE); |
|
|
|
|
} |
|
|
|
@ -219,21 +278,7 @@ namespace gui { |
|
|
|
|
$window.draw(*weapon); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void FSM::draw_gui() { |
|
|
|
|
sf::RectangleShape rect({SCREEN_WIDTH - RAY_VIEW_WIDTH, SCREEN_HEIGHT}); |
|
|
|
|
rect.setPosition({0,0}); |
|
|
|
|
rect.setFillColor({30, 30, 30}); |
|
|
|
|
$window.draw(rect); |
|
|
|
|
|
|
|
|
|
auto left_gui = $textures.sprite_textures.at("left_gui").sprite; |
|
|
|
|
left_gui->setPosition({0,0}); |
|
|
|
|
$window.draw(*left_gui); |
|
|
|
|
|
|
|
|
|
sf::RectangleShape lower({RAY_VIEW_WIDTH, SCREEN_HEIGHT - RAY_VIEW_HEIGHT}); |
|
|
|
|
lower.setPosition({RAY_VIEW_X,RAY_VIEW_HEIGHT}); |
|
|
|
|
lower.setFillColor({40, 40, 40}); |
|
|
|
|
$window.draw(lower); |
|
|
|
|
|
|
|
|
|
void FSM::draw_stats() { |
|
|
|
|
auto player = $level.world->get_the<Player>(); |
|
|
|
|
auto player_combat = $level.world->get<Combat>(player.entity); |
|
|
|
|
|
|
|
|
@ -255,7 +300,29 @@ namespace gui { |
|
|
|
|
FRAME_LIMIT, DEBUG_BUILD, $rayview.$dir_x, |
|
|
|
|
$rayview.$dir_y, $rayview.$pos_x, $rayview.$pos_y)); |
|
|
|
|
|
|
|
|
|
// $window.draw($text);
|
|
|
|
|
$window.draw($text); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void FSM::draw_gui() { |
|
|
|
|
sf::RectangleShape rect({SCREEN_WIDTH - RAY_VIEW_WIDTH, SCREEN_HEIGHT}); |
|
|
|
|
rect.setPosition({0,0}); |
|
|
|
|
rect.setFillColor({30, 30, 30}); |
|
|
|
|
$window.draw(rect); |
|
|
|
|
|
|
|
|
|
auto left_gui = $textures.sprite_textures.at("left_gui").sprite; |
|
|
|
|
left_gui->setPosition({0,0}); |
|
|
|
|
$window.draw(*left_gui); |
|
|
|
|
|
|
|
|
|
sf::RectangleShape lower({RAY_VIEW_WIDTH, SCREEN_HEIGHT - RAY_VIEW_HEIGHT}); |
|
|
|
|
lower.setPosition({RAY_VIEW_X,RAY_VIEW_HEIGHT}); |
|
|
|
|
lower.setFillColor({30, 30, 30}); |
|
|
|
|
$window.draw(lower); |
|
|
|
|
|
|
|
|
|
$status_view.render(); |
|
|
|
|
$renderer.draw($status_view); |
|
|
|
|
|
|
|
|
|
$combat_view.render(); |
|
|
|
|
$renderer.draw($combat_view); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void FSM::render() { |
|
|
|
|