16 #include <matrix/vlVector.h>
18 #include "boost/shared_ptr.hpp"
19 #include "boost/weak_ptr.hpp"
59 typedef boost::shared_ptr<DtNavAreaQuery>
Ptr;
65 virtual bool tick() = 0;
66 virtual bool success() = 0;
69 virtual bool navDataChanged() = 0;
70 virtual bool outOfWorkingMemory() = 0;
71 virtual bool hadComputationError() = 0;
73 virtual std::vector<DtVector> results() = 0;
74 virtual std::vector<DtVector>
debugPoints() {
return std::vector<DtVector>(); };
75 virtual void* internalQuery() = 0;
86 virtual bool tick() {
return true; };
92 virtual std::vector<DtVector>
results() {
return std::vector<DtVector>(); };
100 maxRegenerationThreads(2), regenerationDelay(2.5), queryTimeBudget(1) {};
104 int workingMemorySize;
200 typedef void (*DtSearchAreaPointCostModifierEvaluatorFcn)(
const DtVector& localPoint,
float* currentCost,
void* userData);
202 typedef void(*DtSectorRegenerationCb)(
void* userData);
205 static void setNavAreaCreatorFcn(DtNavAreaCreatorFcn fcn);
207 static bool navAreaDebuggingEnabled();
208 static void setNavAreaDebuggingEnabled(
bool enable);
213 std::vector<DtString> profiles = std::vector<DtString>()) = 0;
214 virtual void update(
float deltaTimeInSeconds) = 0;
218 virtual bool inNavArea(
const DtVector& localPos) = 0;
224 virtual bool validPosition(
const DtString& profile,
const DtVector& localPos,
228 virtual bool validForProfile(
const DtString& profile)
const = 0;
230 virtual DtNavDataDebugInfo* debugInfo() = 0;
232 virtual void setExtent(
DtExtent* e) = 0;
242 DtPointOfInterestEvaluatorFcn evalFcn = 0, DtPathCalculatedEvaluatorFcn pathFcn = 0,
void* evalFcnUserData = 0) = 0;
248 bool useHighPriorityQueue,
250 DtPointOfInterestNavTagEvaluatorFcn evalFcn = 0, DtPathCalculatedEvaluatorFcn pathFcn = 0,
void* evalFcnUserData = 0) = 0;
254 virtual void findNearbyNavEdgesUsingNavTags(
const DtString& profile,
double searchRadius,
const DtVector& fromFromHere,
255 const std::vector<DtInputNavTag>& navTagVals, std::list<DtNavEdge*>& result)
const = 0;
258 virtual void findVerticesUsingNavTags(
const DtString& profile,
double searchRadius,
const DtVector& fromFromHere,
259 const std::vector<DtInputNavTag>& navTagVals, std::list<DtVector>& result)
const = 0;
266 DtPointOfInterestEvaluatorFcn evalFcn = 0, DtPathCalculatedEvaluatorFcn pathFcn = 0,
void* evalFcnUserData = 0) = 0;
269 virtual bool findInsidePositionFromOutsidePosition(
const DtString& profile,
270 double searchRadius,
double searchHeight,
const DtVector& fromFromHere,
271 DtVector& result,
int& halfEdgeType)
const = 0;
275 const std::vector<DtVector>& localDestinationPositions,
DtNavBot* searcher,
int tag = -1,
276 DtSearchAreaPointCostModifierEvaluatorFcn = 0, DtPointOfInterestEvaluatorFcn = 0, DtPathCalculatedEvaluatorFcn = 0,
277 void* usrData = 0,
bool startMovingWhenFound =
false) = 0;
281 const DtVector& destination,
bool useAbstractGraphs =
true,
282 const DtVector& locationToAvoid =
DtVector(),
double avoidanceRadius = 0) = 0;
286 virtual bool findFarthestPositionAlongHeading(
const DtString& profile,
const DtVector& start,
287 double heading,
double maxDistance,
DtVector& result,
bool& reachedMaxDist)
const = 0;
290 virtual bool doesNavIntersectBetweenTwoPoints(
const DtString& profile,
const DtVector& start,
const DtVector& end)
const = 0;
323 const DtVector& localAccessibilityPoint = DtVector::zero(),
324 double minRadius = -1,
325 double maxRadius = -1,
327 unsigned numberOfPoints = 1,
328 double minDistanceBetweenPoints = 0.0,
329 const DtString& placementRestriction = DtString::nullString(),
330 bool isStrict =
true,
331 bool tightlyPack =
false,
332 bool needLos =
false,
333 bool groundClamp =
false,
335 DtLocalPointUserEvalCallback callbackFcn = emptyCallback,
336 void* userData = 0) = 0;
339 virtual bool tagVolumesToBeIntegrated()
const = 0;
348 virtual std::vector<DtVector> searchInArea(
const DtString& profile,
349 const DtVector& startLocalPos,
double radius,
double postSpacing,
DtNavBot* searcher,
350 DtPointOfInterestEvaluatorFcn evalFcn = 0,
void* evalFcnUserData = 0,
int tag = -1)
const = 0;
352 virtual bool navTrianglesInArea(
const DtString& profile,
const DtVector& location,
double radius, std::list<DtNavTriangleInfo>& triangles) = 0;
355 virtual unsigned newNavTagId() = 0;
358 virtual void associateNavTagIdWithObject(
unsigned tagVolumeId,
const DtUUID& objectUUID) = 0;
361 virtual void disassociateNavTagId(
unsigned navTagId) = 0;
365 virtual DtUUID uuidFromNavTagId(
unsigned navTagId)
const = 0;
369 virtual unsigned navTagVolumeIdFromUuid(
const DtUUID& objectUUID) = 0;
379 virtual void addSectorRegenerationCallback(DtSectorRegenerationCb cb,
void* usr) = 0;
380 virtual void removeSectorRegenerationCallback(DtSectorRegenerationCb cb,
void* usr) = 0;
386 const std::set<DtString>& profiles = std::set<DtString>()) = 0;
394 virtual unsigned addNavEdge(
const DtString& profile, std::vector<DtVector>& LocalPoints,
400 virtual unsigned addNavIEdge(
const DtString& profile, std::vector<DtVector>& LocalPoints, std::vector< std::vector<DtVector> >& localIPoints,
404 virtual void removeNavEdge(
unsigned edgeId) = 0;
409 virtual unsigned addCoverPoint(
const DtString& profile,
const DtVector& localPoint,
410 bool& creationComplete) = 0;
413 virtual bool isCoverPointCreated(
unsigned coverPointId) = 0;
416 virtual void removeCoverPoint(
unsigned coverPointId) = 0;
UUID is a unique ID wrapper class.
Definition: rwUUID.h:222
This class is just used to count the nav generation threads to ensure we do not start too many thread...
Definition: navArea.h:139
DtNavAreaQuery()
Definition: navArea.h:61
bool regenerateAtRuntime
Whether nav data should be regenerated at runtime.
Definition: navArea.h:110
DtVrfObject is used to represent any type of simulated object (entities, aggregate, control objects) in a VR-Forces application.
Definition: vrfObject.h:215
DtNavGenerationThreadCounter(unsigned maxThreads)
Definition: navArea.h:142
DtOnPathToGraphVertexComputedResult
Definition: navArea.h:40
virtual ~DtNavAreaQuery()
Definition: navArea.h:62
virtual bool tick()
Definition: navArea.h:86
DtVrfObject * myAttachedObject
Points to the host object if this navArea is attached to an object like a cultural feature or a large...
Definition: navArea.h:425
virtual bool outOfWorkingMemory()
Definition: navArea.h:90
double queryTimeBudget
The time budget per frame for path queries in ms. Default value is 1.
Definition: navArea.h:107
virtual bool success()
Definition: navArea.h:87
DtNavAreaNullQuery()
Definition: navArea.h:82
virtual ~DtNavArea()
Definition: navArea.h:210
double regenerationDelay
Minimum delay between an event resulting in nav data regeneration and the start of the regeneration t...
Definition: navArea.h:117
const int DtNavDataTagAny
Definition: navDataTag.h:17
The DtExtent represents an axis-aligned 3d bounding box.
Definition: extent.h:43
std::set< DtNavSectorName > DtNavSectorNames
Definition: navArea.h:48
virtual void cancel()
Definition: navArea.h:88
Wrapper for GameWare NavTag.
Definition: navDataTag.h:54
static bool theNavAreaDebuggingEnabled
Definition: navArea.h:421
static DtNavAreaCreatorFcn theNavAreaCreatorFcn
Definition: navArea.h:419
Definition: asyncJobServer.h:37
void releaseThread()
Definition: navArea.h:161
static const DtUUID & nullUUID()
DtOnGraphVertexVisitedResult
Definition: navArea.h:31
Definition: coordSystem.h:54
virtual void * internalQuery(void)
Definition: navArea.h:93
virtual ~DtNavRegenRequestIdData()
Definition: navArea.h:126
Contains all the data and logic for navigation within a specific area.
Definition: navArea.h:179
DtVrfObject * attachedObject()
Definition: navArea.h:341
std::list< const DtRwVariableBindings * > DtVariableBindingsList
Definition: readerWriterRegistry.h:29
Contains all the data and logic for navigation within a specific edge.
Definition: navEdge.h:18
virtual ~DtNavAreaNullQuery()
Definition: navArea.h:83
int port
Definition: navArea.h:185
This is just an abstract base class for the data contained in a DtNavRegenRequestId.
Definition: navArea.h:123
DtNavRegenRequestIdData(const DtNavRegenRequestIdData &)
Definition: navArea.h:130
DtTerrainInterface allows access to common terrain calls without having to know the terrain implement...
Definition: terrainInterface.h:84
boost::shared_ptr< DtNavAreaQuery > Ptr
Definition: navArea.h:59
virtual std::vector< DtVector > debugPoints()
Definition: navArea.h:74
int maxRegenerationThreads
Maximum number of threads performing nav data regeneration at a time.
Definition: navArea.h:113
DtNavRegenRequestIdData()
Definition: navArea.h:129
static const DtVariableBindingsList & nullVariableReference()
bool claimThread()
Definition: navArea.h:151
void setMaxThreads(unsigned maxThreads)
Definition: navArea.h:144
unsigned myUsedThreads
Definition: navArea.h:172
Definition: navArea.h:182
void setAttachedObject(DtVrfObject *object)
Definition: navArea.h:342
virtual bool navDataChanged()
Returns true if the nav data has changed during this query.
Definition: navArea.h:89
DtNavAreaConfig()
Definition: navArea.h:99
#define DT_DLL_vrfNavigation
This file is used to determine how to build.
Definition: vrfNavigationDefines.h:26
Configuration options for DtNavArea.
Definition: navArea.h:97
DtString status
Definition: navArea.h:187
DtNavTag navTag
Definition: navArea.h:194
boost::weak_ptr< DtNavRegenRequestIdData > DtNavRegenRequestId
Id used as a handle for nav regen requests. This is just an abstract base class.
Definition: navArea.h:135
virtual bool hadComputationError()
Definition: navArea.h:91
class DtLocalVertexList:
Definition: localVertexList.h:20
DtString navAreaName
Definition: navArea.h:184
std::vector< DtRwString > profiles
Definition: navArea.h:186
Definition: navArea.h:190
virtual std::vector< DtVector > results()
Definition: navArea.h:92
virtual bool complete()
Definition: navArea.h:85
unsigned myMaxThreads
Definition: navArea.h:171
unsigned maxThreads() const
Definition: navArea.h:149