/* =========================================================================== IceTech GPL Source Code Copyright (C) 2026 Justin Marshall =========================================================================== */ #ifndef __RECAST_NAVIGATION_H__ #define __RECAST_NAVIGATION_H__ typedef int recastNavHandle_t; typedef int recastObstacleHandle_t; static const recastNavHandle_t RECAST_NAV_HANDLE_INVALID = -1; static const int MAX_RECAST_PATH_AREAS = 256; typedef struct recastPath_s { idVec3 moveGoal; idVec3 secondaryGoal; int moveAreaNum; int travelTime; } recastPath_t; class idRecastNavigationManager { public: virtual ~idRecastNavigationManager( void ) {} virtual recastNavHandle_t Alloc( void ) = 0; virtual void Free( recastNavHandle_t handle ) = 0; virtual bool Load( recastNavHandle_t handle, const char *aasName, const char *fileName, unsigned int mapFileCRC ) = 0; virtual bool BuildMapFile( const char *mapName, const char *aasType ) = 0; virtual void Stats( recastNavHandle_t handle ) const = 0; virtual void DebugDraw( recastNavHandle_t handle, idRenderWorld *renderWorld, int drawMode, int lifetime ) const = 0; virtual bool IsLoaded( recastNavHandle_t handle ) const = 0; virtual const char * GetName( recastNavHandle_t handle ) const = 0; virtual int NumPolys( recastNavHandle_t handle ) const = 0; virtual const idAASSettings *GetSettings( recastNavHandle_t handle ) const = 0; virtual int PointAreaNum( recastNavHandle_t handle, const idVec3 &origin ) const = 0; virtual int PointReachableAreaNum( recastNavHandle_t handle, const idVec3 &origin, const idBounds &searchBounds, const int areaFlags ) const = 0; virtual int BoundsReachableAreaNum( recastNavHandle_t handle, const idBounds &bounds, const int areaFlags ) const = 0; virtual void PushPointIntoAreaNum( recastNavHandle_t handle, int areaNum, idVec3 &origin ) const = 0; virtual idVec3 AreaCenter( recastNavHandle_t handle, int areaNum ) const = 0; virtual int AreaFlags( recastNavHandle_t handle, int areaNum ) const = 0; virtual int AreaTravelFlags( recastNavHandle_t handle, int areaNum ) const = 0; virtual bool Trace( recastNavHandle_t handle, aasTrace_t &trace, const idVec3 &start, const idVec3 &end ) const = 0; virtual bool SetAreaState( recastNavHandle_t handle, const idBounds &bounds, const int areaContents, bool disabled ) = 0; virtual recastObstacleHandle_t AddObstacle( recastNavHandle_t handle, const idBounds &bounds ) = 0; virtual void RemoveObstacle( recastNavHandle_t handle, const recastObstacleHandle_t obstacleHandle ) = 0; virtual void RemoveAllObstacles( recastNavHandle_t handle ) = 0; virtual int TravelTimeToGoalArea( recastNavHandle_t handle, int areaNum, const idVec3 &origin, int goalAreaNum, int travelFlags ) const = 0; virtual bool RouteToGoalArea( recastNavHandle_t handle, int areaNum, const idVec3 origin, int goalAreaNum, int travelFlags, recastPath_t &route ) const = 0; virtual bool PathToGoal( recastNavHandle_t handle, recastPath_t &path, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags ) const = 0; virtual bool PathValid( recastNavHandle_t handle, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, idVec3 &endPos, int &endAreaNum ) const = 0; virtual bool PathAreaList( recastNavHandle_t handle, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, int *areas, int &numAreas, int maxAreas ) const = 0; }; extern idRecastNavigationManager *RecastNavigationManager; #endif /* !__RECAST_NAVIGATION_H__ */