/* Starshatter: The Open Source Project Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors Copyright (c) 1997-2006, Destroyer Studios LLC. AUTHOR: John DiCamillo OVERVIEW ======== Automatic Navigator */ #ifndef NavAI_h #define NavAI_h #include "Types.h" #include "Geometry.h" #include "System.h" #include "ShipAI.h" #include "Text.h" // +--------------------------------------------------------------------+ class Farcaster; // +--------------------------------------------------------------------+ class NavAI : public ShipAI { public: NavAI(Ship* s); virtual ~NavAI(); enum { DIR_TYPE = 2000 }; virtual int Type() const { return DIR_TYPE; } virtual void ExecFrame(double seconds); virtual int Subframe() const { return true; } void Disengage(); bool Complete() const { return complete; } protected: // behaviors: virtual Steer SeekTarget(); // steering functions: virtual Point Transform(const Point& pt); virtual Steer Seek(const Point& point); virtual Steer Flee(const Point& point); virtual Steer Avoid(const Point& point, float radius); virtual Steer AvoidTerrain(); // accumulate behaviors: virtual void Navigator(); virtual void FindObjective(); virtual void HelmControl(); virtual void ThrottleControl(); bool complete; int drop_state; int quantum_state; int terrain_warning; double brakes; Farcaster* farcaster; }; // +--------------------------------------------------------------------+ #endif // NavAI_h