|
|
|
@ -8,7 +8,6 @@ |
|
|
|
|
#include "systems.hpp" |
|
|
|
|
#include "events.hpp" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace gui { |
|
|
|
|
using namespace components; |
|
|
|
|
|
|
|
|
@ -39,6 +38,8 @@ namespace gui { |
|
|
|
|
FSM_STATE(State, MAPPING, ev); |
|
|
|
|
FSM_STATE(State, ROTATING, ev); |
|
|
|
|
FSM_STATE(State, IDLE, ev); |
|
|
|
|
FSM_STATE(State, IN_COMBAT, ev); |
|
|
|
|
FSM_STATE(State, COMBAT_ROTATE, ev); |
|
|
|
|
FSM_STATE(State, END, ev); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -101,7 +102,7 @@ namespace gui { |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
state(State::IDLE); |
|
|
|
|
dbc::log(fmt::format("In ATTACKING state, unhandled event {}", (int)ev)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -111,6 +112,12 @@ namespace gui { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void FSM::COMBAT_ROTATE(Event ) { |
|
|
|
|
if($camera.play_rotate($rayview)) { |
|
|
|
|
state(State::IN_COMBAT); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void FSM::IDLE(Event ev) { |
|
|
|
|
using enum Event; |
|
|
|
|
|
|
|
|
@ -145,9 +152,10 @@ namespace gui { |
|
|
|
|
state(State::MAPPING); |
|
|
|
|
break; |
|
|
|
|
case ATTACK: |
|
|
|
|
$status_view.log("You attack!"); |
|
|
|
|
$rotation = -30.0f; |
|
|
|
|
state(State::ATTACKING); |
|
|
|
|
fmt::println("ATTACK IGNORED"); |
|
|
|
|
break; |
|
|
|
|
case START_COMBAT: |
|
|
|
|
state(State::IN_COMBAT); |
|
|
|
|
break; |
|
|
|
|
case CLOSE: |
|
|
|
|
dbc::log("Nothing to close."); |
|
|
|
@ -157,6 +165,28 @@ namespace gui { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void FSM::IN_COMBAT(Event ev) { |
|
|
|
|
using enum Event; |
|
|
|
|
|
|
|
|
|
switch(ev) { |
|
|
|
|
case ATTACK: |
|
|
|
|
$status_view.log("You attack!"); |
|
|
|
|
$rotation = -30.0f; |
|
|
|
|
state(State::ATTACKING); |
|
|
|
|
break; |
|
|
|
|
case ROTATE_LEFT: |
|
|
|
|
$camera.plan_rotate($rayview, 1); |
|
|
|
|
state(State::COMBAT_ROTATE); |
|
|
|
|
break; |
|
|
|
|
case ROTATE_RIGHT: |
|
|
|
|
$camera.plan_rotate($rayview, -1); |
|
|
|
|
state(State::COMBAT_ROTATE); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void FSM::try_move(int dir, bool strafe) { |
|
|
|
|
using enum State; |
|
|
|
|
// prevent moving into occupied space
|
|
|
|
@ -333,7 +363,6 @@ namespace gui { |
|
|
|
|
System::motion($level); |
|
|
|
|
System::lighting($level); |
|
|
|
|
System::death($level); |
|
|
|
|
handle_world_events(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool FSM::active() { |
|
|
|
@ -366,6 +395,9 @@ namespace gui { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case eGUI::COMBAT_START: { |
|
|
|
|
event(Event::START_COMBAT); |
|
|
|
|
} break; |
|
|
|
|
case eGUI::LOOT: { |
|
|
|
|
// auto &item = std::any_cast<InventoryItem&>(data);
|
|
|
|
|
// $status_view.log(fmt::format("You picked up a {}.",
|
|
|
|
|