+void AIController::StartFleeing(const Entity &e, float speed) noexcept {
+ flee_target = &e;
+ flee_speed = speed;
+}
+
+void AIController::StopFleeing() noexcept {
+ flee_target = nullptr;
+}
+
+bool AIController::IsFleeing() const noexcept {
+ return flee_target;
+}
+
+const Entity &AIController::GetFleeTarget() const noexcept {
+ return *flee_target;
+}
+
+void AIController::StartSeeking(const Entity &e, float speed) noexcept {
+ seek_target = &e;
+ seek_speed = speed;
+}
+
+void AIController::StopSeeking() noexcept {
+ seek_target = nullptr;
+}
+
+bool AIController::IsSeeking() const noexcept {
+ return seek_target;
+}
+
+const Entity &AIController::GetSeekTarget() const noexcept {
+ return *seek_target;
+}
+
+void AIController::StartWandering() noexcept {
+ wandering = true;
+}
+void AIController::StopWandering() noexcept {
+ wandering = false;
+}
+
+
+void IdleState::Enter(AIController &ctrl) const {
+ ctrl.StartWandering();
+}
+
+void IdleState::Update(AIController &ctrl, Entity &e, float dt) const {
+}
+
+void IdleState::Exit(AIController &ctrl) const {
+ ctrl.StopWandering();
+}
+