diff --git a/src/game/systems.cpp b/src/game/systems.cpp index 75b9e12..5642b08 100644 --- a/src/game/systems.cpp +++ b/src/game/systems.cpp @@ -73,8 +73,15 @@ void System::enemy_ai_initialize() { if(world.has(ent)) { auto& enemy = world.get(ent); auto& personality = world.get(ent); + int dist_to_player = map.distance(pos.location); - enemy.set_state("detect_enemy", map.distance(pos.location) < personality.hearing_distance); + if(dist_to_player > 1) { + // not near the player so can't be in combat + enemy.set_state("enemy_found", false); + enemy.set_state("in_combat", false); + } + + enemy.set_state("detect_enemy", dist_to_player < personality.hearing_distance); enemy.update(); } else { auto ai_start = ai::load_state(config.ai_start_name); diff --git a/src/gui/fsm.cpp b/src/gui/fsm.cpp index fb420c4..0574b87 100644 --- a/src/gui/fsm.cpp +++ b/src/gui/fsm.cpp @@ -1,4 +1,3 @@ -#define FSM_DEBUG 1 #include "gui/fsm.hpp" #include #include @@ -175,6 +174,12 @@ namespace gui { case AIM_CLICK: $systems.runPickup(); break; + case COMBAT_START: + fmt::println("!!!!!!!!!!!!!! COMBAT START in IDLE"); + break; + case COMBAT_STOP: + fmt::println("!!!!!!!!!!!!!!!! COMBAT STOP in IDLE"); + break; default: break; // ignore everything else } @@ -335,6 +340,9 @@ namespace gui { auto &damage = std::any_cast(data); } break; + case eGUI::COMBAT_START: + event(Event::COMBAT_START); + break; case eGUI::ENTITY_SPAWN: { auto& sprite = world->get(entity); $main_ui.$rayview->update_sprite(entity, sprite);