+ /// 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
+ ) noexcept;
+ /// check if the scheduled decision is due already
+ bool DecisionDue() const noexcept;
+ /// random choice of 0 to num_choices - 1
+ unsigned int Decide(unsigned int num_choices) noexcept;