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

This commit is contained in:
Zed A. Shaw 2025-02-13 11:14:32 -05:00
parent 9b3b81683a
commit 1c8f542c21
3 changed files with 26 additions and 49 deletions

41
gui.cpp
View file

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