Nuke taught me the other way to make class enums not suck so I guess no FU?
This commit is contained in:
parent
9b3b81683a
commit
1c8f542c21
3 changed files with 26 additions and 49 deletions
|
@ -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; }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
41
gui.cpp
41
gui.cpp
|
@ -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…
Add table
Add a link
Reference in a new issue