Start of V1 combat system where you get locked into combat when in range and have to work the turn system to get out.
This commit is contained in:
parent
d2700d2928
commit
8a6b38c1a4
5 changed files with 51 additions and 18 deletions
44
gui.cpp
44
gui.cpp
|
@ -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 {}.",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue