X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fai%2FAIController.hpp;h=0eca2b78335b3bbf9094bd3cd03024de8cc7ff65;hb=d122d3e445d64f7d710c1cfaf285ff01bbe955b9;hp=53bdc827a5b3bc8df5b99b4c88553e6dfd5a5361;hpb=150d065f431d665326fd8028748c48a74ad956bb;p=blank.git diff --git a/src/ai/AIController.hpp b/src/ai/AIController.hpp index 53bdc82..0eca2b7 100644 --- a/src/ai/AIController.hpp +++ b/src/ai/AIController.hpp @@ -8,6 +8,7 @@ namespace blank { +class AIState; class GaloisLFSR; class AIController @@ -17,20 +18,38 @@ public: explicit AIController(GaloisLFSR &); ~AIController(); + void SetState(const AIState &); + void Update(Entity &, float dt) override; glm::vec3 ControlForce(const EntityState &) const override; static glm::vec3 Heading(const EntityState &) noexcept; + void StartFleeing(const Entity &, float speed) noexcept; + void StopFleeing() noexcept; + bool IsFleeing() const noexcept; + const Entity &GetFleeTarget() const noexcept; + + void StartSeeking(const Entity &, float speed) noexcept; + void StopSeeking() noexcept; + bool IsSeeking() const noexcept; + const Entity &GetSeekTarget() const noexcept; + + void StartWandering() noexcept; + void StopWandering() noexcept; + private: GaloisLFSR &random; + const AIState *state; - float chase_speed; + const Entity *flee_target; float flee_speed; - float stop_dist; - float flee_dist; + const Entity *seek_target; + float seek_speed; + + bool wandering; glm::vec3 wander_pos; float wander_dist; float wander_radius;