diff --git a/gui.cpp b/gui.cpp index 6490d87..030fff0 100644 --- a/gui.cpp +++ b/gui.cpp @@ -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(); auto& player_position = level.world->get(player.entity); auto& motion = level.world->get(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(); auto& player_position = level.world->get(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); diff --git a/gui.hpp b/gui.hpp index 679bc12..a57a8bb 100644 --- a/gui.hpp +++ b/gui.hpp @@ -29,6 +29,7 @@ namespace gui { class FSM : public DeadSimpleFSM { public: + GameLevel level; float $rotation = -30.0f; Point $player{0,0}; LevelManager $levels;