|
|
|
@ -45,7 +45,6 @@ namespace gui { |
|
|
|
|
void FSM::MOVING(Event ) { |
|
|
|
|
if($camera.play_move($rayview)) { |
|
|
|
|
// really annoying but we have to figure out the motion factor then run the systems
|
|
|
|
|
auto &level = $levels.current(); |
|
|
|
|
auto& player = level.world->get_the<Player>(); |
|
|
|
|
auto& player_position = level.world->get<Position>(player.entity); |
|
|
|
|
auto& motion = level.world->get<Motion>(player.entity); |
|
|
|
@ -72,7 +71,7 @@ namespace gui { |
|
|
|
|
case FU::QUIT: |
|
|
|
|
$window.close(); |
|
|
|
|
state(State::END); |
|
|
|
|
break; |
|
|
|
|
return; // done
|
|
|
|
|
case FU::MOVE_FORWARD: |
|
|
|
|
$camera.plan_run($rayview, 1); |
|
|
|
|
state(State::MOVING); |
|
|
|
@ -93,16 +92,15 @@ namespace gui { |
|
|
|
|
$camera.plan_rotate($rayview, 1); |
|
|
|
|
state(State::ROTATING); |
|
|
|
|
return; // get out early since can always rotate
|
|
|
|
|
break; // need this?
|
|
|
|
|
case FU::ROTATE_RIGHT: |
|
|
|
|
$camera.plan_rotate($rayview, -1); |
|
|
|
|
state(State::ROTATING); |
|
|
|
|
return; // get out early since can always rotate
|
|
|
|
|
break; // need this?
|
|
|
|
|
default: |
|
|
|
|
dbc::sentinel("unhandled event in IDLE"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// prevent moving into occupied space
|
|
|
|
|
if(!can_move({size_t($camera.targetX), size_t($camera.targetY)})) { |
|
|
|
|
state(State::IDLE); |
|
|
|
|
$camera.abort_plan($rayview); |
|
|
|
@ -110,7 +108,6 @@ namespace gui { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool FSM::can_move(Point move_to) { |
|
|
|
|
auto& level = $levels.current(); |
|
|
|
|
return level.map->can_move(move_to) && !level.collision->occupied(move_to); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -210,7 +207,7 @@ namespace gui { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void FSM::generate_map() { |
|
|
|
|
auto& level = $levels.current(); |
|
|
|
|
level = $levels.current(); |
|
|
|
|
auto& player = level.world->get_the<Player>(); |
|
|
|
|
auto& player_position = level.world->get<Position>(player.entity); |
|
|
|
|
$player = player_position.location; |
|
|
|
@ -218,7 +215,6 @@ namespace gui { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void FSM::run_systems() { |
|
|
|
|
auto& level = $levels.current(); |
|
|
|
|
System::motion(level); |
|
|
|
|
System::enemy_pathing(level); |
|
|
|
|
System::collision(level); |
|
|
|
|