]> git.localhorst.tv Git - blank.git/blobdiff - src/ai/AIController.hpp
move steering behaviours into entity
[blank.git] / src / ai / AIController.hpp
index 15645a256dd66aa604b70b491214da8e24e1e3c3..cfd49d94a218a12539c98050f45eea0c29416ab9 100644 (file)
@@ -12,23 +12,24 @@ namespace blank {
 
 class AIState;
 class Entity;
-class GaloisLFSR;
 class Player;
 class World;
 
+// TODO: AI and entities are tightly coupled, maybe AIcontroller should
+//       be part of Entity. In that case, players could either be separated
+//       from other entities use function as a degenerate AI which blindly
+//       executes whatever its human tell it to.
 class AIController
 : public EntityController {
 
 public:
-       AIController(World &, GaloisLFSR &);
+       AIController(World &, Entity &);
        ~AIController();
 
-       void SetState(const AIState &);
+       void SetState(const AIState &, Entity &);
 
        void Update(Entity &, float dt) override;
 
-       glm::vec3 ControlForce(const Entity &, const EntityState &) const override;
-
        /// get the closest player that given entity can see
        /// returns nullptr if none are in sight
        Player *ClosestVisiblePlayer(const Entity &) noexcept;
@@ -49,72 +50,8 @@ public:
        /// random choice of 0 to num_choices - 1
        unsigned int Decide(unsigned int num_choices) noexcept;
 
-       void EnterHalt() noexcept;
-       void ExitHalt() noexcept;
-       bool IsHalted() const noexcept;
-       void SetHaltSpeed(float) noexcept;
-       glm::vec3 GetHaltForce(const Entity &, const EntityState &) const noexcept;
-
-       void StartAvoidingObstacles() noexcept;
-       void StopAvoidingObstacles() noexcept;
-       bool IsAvoidingObstacles() const noexcept;
-       glm::vec3 GetObstacleAvoidanceForce(const Entity &, const EntityState &) const noexcept;
-
-       void StartFleeing() noexcept;
-       void StopFleeing() noexcept;
-       bool IsFleeing() const noexcept;
-       void SetFleeTarget(Entity &) noexcept;
-       void SetFleeSpeed(float) noexcept;
-       Entity &GetFleeTarget() noexcept;
-       const Entity &GetFleeTarget() const noexcept;
-       glm::vec3 GetFleeForce(const Entity &, const EntityState &) const noexcept;
-
-       void StartSeeking() noexcept;
-       void StopSeeking() noexcept;
-       bool IsSeeking() const noexcept;
-       void SetSeekTarget(Entity &) noexcept;
-       void SetSeekSpeed(float) noexcept;
-       Entity &GetSeekTarget() noexcept;
-       const Entity &GetSeekTarget() const noexcept;
-       glm::vec3 GetSeekForce(const Entity &, const EntityState &) const noexcept;
-
-       void StartEvading() noexcept;
-       void StopEvading() noexcept;
-       bool IsEvading() const noexcept;
-       void SetEvadeTarget(Entity &) noexcept;
-       void SetEvadeSpeed(float) noexcept;
-       Entity &GetEvadeTarget() noexcept;
-       const Entity &GetEvadeTarget() const noexcept;
-       glm::vec3 GetEvadeForce(const Entity &, const EntityState &) const noexcept;
-
-       void StartPursuing() noexcept;
-       void StopPursuing() noexcept;
-       bool IsPursuing() const noexcept;
-       void SetPursuitTarget(Entity &) noexcept;
-       void SetPursuitSpeed(float) noexcept;
-       Entity &GetPursuitTarget() noexcept;
-       const Entity &GetPursuitTarget() const noexcept;
-       glm::vec3 GetPursuitForce(const Entity &, const EntityState &) const noexcept;
-
-       /// start wandering randomly
-       void StartWandering() noexcept;
-       void StopWandering() noexcept;
-       bool IsWandering() const noexcept;
-       /// change how wandering is performed
-       /// the trajectory is modified by targetting a blip on a sphere
-       /// in front of the entity which moves randomly
-       /// the displacement is given (roughly) in units per second
-       void SetWanderParams(
-               float speed,
-               float distance = 2.0f,
-               float radius = 1.0f,
-               float displacement = 1.0f
-       ) noexcept;
-       glm::vec3 GetWanderForce(const Entity &, const EntityState &) const noexcept;
-
 private:
        World &world;
-       GaloisLFSR &random;
        const AIState *state;
 
        /// how far controlled entities can see
@@ -125,36 +62,6 @@ private:
        FineTimer think_timer;
        FineTimer decision_timer;
 
-       bool halted;
-       float halt_speed;
-
-       bool avoid_obstacles;
-       AABB obstacle_box;
-       glm::mat4 obstacle_transform;
-
-       bool fleeing;
-       Entity *flee_target;
-       float flee_speed;
-
-       bool seeking;
-       Entity *seek_target;
-       float seek_speed;
-
-       bool evading;
-       Entity *evade_target;
-       float evade_speed;
-
-       bool pursuing;
-       Entity *pursuit_target;
-       float pursuit_speed;
-
-       bool wandering;
-       glm::vec3 wander_pos;
-       float wander_speed;
-       float wander_dist;
-       float wander_radius;
-       float wander_disp;
-
 };
 
 }