Nuke taught me the other way to make class enums not suck so I guess no FU?

master
Zed A. Shaw 4 weeks ago
parent 9b3b81683a
commit 1c8f542c21
  1. 25
      combat_ui.cpp
  2. 9
      combat_ui.hpp
  3. 41
      gui.cpp

@ -1,35 +1,14 @@
#include "combat_ui.hpp" #include "combat_ui.hpp"
#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>
#include "constants.hpp" #include "constants.hpp"
#include "color.hpp" #include "color.hpp"
namespace gui { namespace gui {
using namespace ftxui;
CombatUI::CombatUI(GameLevel level) : CombatUI::CombatUI(GameLevel level) :
Panel(COMBAT_UI_X, COMBAT_UI_Y, COMBAT_UI_WIDTH, COMBAT_UI_HEIGHT, false),
$level(level) $level(level)
{ {
default_bg = {0,0,0};
} }
void CombatUI::create_render() { void CombatUI::draw(sf::RenderWindow& window) {
$attack1_button = Button("ATTACK1", []{ fmt::println("ATTACK1 clicked"); }); (void)window;
$attack2_button = Button("ATTACK2", []{ fmt::println("ATTACK2 clicked"); });
auto combat_rend = Renderer([&]{
return hbox({
$attack1_button->Render(),
$attack2_button->Render()
});
});
set_renderer(combat_rend);
add($attack1_button);
add($attack2_button);
} }
} }

@ -1,18 +1,15 @@
#pragma once #pragma once
#include "panel.hpp" #include "panel.hpp"
#include "levelmanager.hpp" #include "levelmanager.hpp"
#include <ftxui/component/component.hpp> #include <SFML/Graphics/RenderWindow.hpp>
namespace gui { namespace gui {
class CombatUI : public Panel { class CombatUI {
public: public:
GameLevel $level; GameLevel $level;
Component $attack1_button;
Component $attack2_button;
CombatUI(GameLevel level); CombatUI(GameLevel level);
void create_render(); void draw(sf::RenderWindow& window);
void update_level(GameLevel &level) { $level = level; } void update_level(GameLevel &level) { $level = level; }
}; };
} }

@ -50,7 +50,6 @@ namespace gui {
$rayview.position_camera($player.x + 0.5, $player.y + 0.5); $rayview.position_camera($player.x + 0.5, $player.y + 0.5);
$status_view.create_render(); $status_view.create_render();
$combat_view.create_render();
$renderer.init_terminal(); $renderer.init_terminal();
$map_view.create_render(); $map_view.create_render();
@ -62,15 +61,16 @@ namespace gui {
} }
void FSM::MAPPING(Event ev) { void FSM::MAPPING(Event ev) {
using enum Event;
// BUG: can't close window when in mapping // BUG: can't close window when in mapping
switch(ev) { switch(ev) {
case Event::MAP_OPEN: case MAP_OPEN:
state(State::IDLE); state(State::IDLE);
break; break;
case Event::CLOSE: case CLOSE:
state(State::IDLE); state(State::IDLE);
break; break;
case Event::TICK: case TICK:
break; break;
default: default:
dbc::log("invalid event sent to MAPPING"); dbc::log("invalid event sent to MAPPING");
@ -86,8 +86,9 @@ namespace gui {
} }
void FSM::ATTACKING(Event ev) { void FSM::ATTACKING(Event ev) {
using enum Event;
switch(ev) { switch(ev) {
case Event::TICK: case TICK:
$rotation_count++; $rotation_count++;
// just do 10 ticks // just do 10 ticks
@ -109,43 +110,43 @@ namespace gui {
} }
void FSM::IDLE(Event ev) { void FSM::IDLE(Event ev) {
using FU = Event; using enum Event;
switch(ev) { switch(ev) {
case FU::QUIT: case QUIT:
$window.close(); $window.close();
state(State::END); state(State::END);
return; // done return; // done
case FU::MOVE_FORWARD: case MOVE_FORWARD:
try_move(1, false); try_move(1, false);
break; break;
case FU::MOVE_BACK: case MOVE_BACK:
try_move(-1, false); try_move(-1, false);
break; break;
case FU::MOVE_LEFT: case MOVE_LEFT:
try_move(1, true); try_move(1, true);
break; break;
case FU::MOVE_RIGHT: case MOVE_RIGHT:
try_move(-1, true); try_move(-1, true);
break; break;
case FU::ROTATE_LEFT: case ROTATE_LEFT:
$camera.plan_rotate($rayview, 1); $camera.plan_rotate($rayview, 1);
state(State::ROTATING); state(State::ROTATING);
break; break;
case FU::ROTATE_RIGHT: case ROTATE_RIGHT:
$camera.plan_rotate($rayview, -1); $camera.plan_rotate($rayview, -1);
state(State::ROTATING); state(State::ROTATING);
break; break;
case FU::MAP_OPEN: case MAP_OPEN:
$renderer.resize_grid(MAX_FONT_SIZE, $map_view); $renderer.resize_grid(MAX_FONT_SIZE, $map_view);
$map_view.resize_canvas(); $map_view.resize_canvas();
state(State::MAPPING); state(State::MAPPING);
break; break;
case FU::ATTACK: case ATTACK:
$rotation = -30.0f; $rotation = -30.0f;
state(State::ATTACKING); state(State::ATTACKING);
break; break;
case FU::CLOSE: case CLOSE:
dbc::log("Nothing to close."); dbc::log("Nothing to close.");
break; break;
default: default:
@ -154,13 +155,14 @@ namespace gui {
} }
void FSM::try_move(int dir, bool strafe) { void FSM::try_move(int dir, bool strafe) {
using enum State;
// prevent moving into occupied space // prevent moving into occupied space
Point move_to = $camera.plan_move($rayview, dir, strafe); Point move_to = $camera.plan_move($rayview, dir, strafe);
if($level.map->can_move(move_to) && !$level.collision->occupied(move_to)) { if($level.map->can_move(move_to) && !$level.collision->occupied(move_to)) {
state(State::MOVING); state(MOVING);
} else { } else {
state(State::IDLE); state(IDLE);
$camera.abort_plan($rayview); $camera.abort_plan($rayview);
} }
} }
@ -269,8 +271,7 @@ namespace gui {
$status_view.render(); $status_view.render();
$renderer.draw($status_view); $renderer.draw($status_view);
$combat_view.render(); $combat_view.draw($window);
$renderer.draw($combat_view);
auto debug = $level.world->get_the<Debug>(); auto debug = $level.world->get_the<Debug>();
if(debug.FPS) draw_stats(); if(debug.FPS) draw_stats();

Loading…
Cancel
Save