Now have enemies chasing us around and implemented diagonal movement as a test but I kind of like it.
This commit is contained in:
parent
d5301acab5
commit
14128ab10f
5 changed files with 37 additions and 14 deletions
27
gui.cpp
27
gui.cpp
|
@ -5,6 +5,7 @@
|
|||
#include <functional>
|
||||
#include "components.hpp"
|
||||
#include <numbers>
|
||||
#include "systems.hpp"
|
||||
|
||||
using namespace components;
|
||||
|
||||
|
@ -43,6 +44,15 @@ namespace gui {
|
|||
|
||||
void FSM::MOVING(Event ) {
|
||||
if($camera.play_move($rayview)) {
|
||||
|
||||
auto &level = $levels.current();
|
||||
auto player = level.world->get_the<Player>();
|
||||
auto& player_position = level.world->get<Position>(player.entity);
|
||||
player_position.location.x = size_t($camera.targetX);
|
||||
player_position.location.y = size_t($camera.targetY);
|
||||
|
||||
run_systems();
|
||||
|
||||
state(State::IDLE);
|
||||
}
|
||||
}
|
||||
|
@ -54,8 +64,6 @@ namespace gui {
|
|||
}
|
||||
|
||||
void FSM::IDLE(Event ev) {
|
||||
auto& level = $levels.current();
|
||||
|
||||
using FU = Event;
|
||||
|
||||
switch(ev) {
|
||||
|
@ -91,12 +99,17 @@ namespace gui {
|
|||
dbc::sentinel("unhandled event in IDLE");
|
||||
}
|
||||
|
||||
if(!level.map->can_move({size_t($camera.targetX), size_t($camera.targetY)})) {
|
||||
if(!can_move({size_t($camera.targetX), size_t($camera.targetY)})) {
|
||||
state(State::IDLE);
|
||||
$camera.abort_plan($rayview);
|
||||
}
|
||||
}
|
||||
|
||||
bool FSM::can_move(Point move_to) {
|
||||
auto& level = $levels.current();
|
||||
return level.map->can_move(move_to) && !level.collision->occupied(move_to);
|
||||
}
|
||||
|
||||
void FSM::END(Event ev) {
|
||||
fmt::println("END: received event after done: {}", int(ev));
|
||||
}
|
||||
|
@ -200,6 +213,14 @@ namespace gui {
|
|||
$rayview.set_level(level);
|
||||
}
|
||||
|
||||
void FSM::run_systems() {
|
||||
auto& level = $levels.current();
|
||||
System::motion(level);
|
||||
System::enemy_pathing(level);
|
||||
System::collision(level);
|
||||
System::death(level);
|
||||
}
|
||||
|
||||
bool FSM::active() {
|
||||
return !in_state(State::END);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue