- glm::vec3 ControlForce(const Entity &, 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;
-
- /// start wandering randomly at given speed
- /// 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 StartWandering(
- float speed,
- float distance = 2.0f,
- float radius = 1.0f,
- float displacement = 1.0f
+ /// get the closest player that given entity can see
+ /// returns nullptr if none are in sight
+ Player *ClosestVisiblePlayer(const Entity &) noexcept;
+ /// true if to entity is in visible range of from entity
+ bool LineOfSight(const Entity &from, const Entity &to) const noexcept;
+
+ /// true if the controller may do expensive calculations
+ bool MayThink() const noexcept;
+ void SetThinkInterval(float) noexcept;
+
+ /// schedule a decision in the next minimum ± variance seconds
+ void CueDecision(
+ float minimum,
+ float variance