VR-Forces 5.0.3 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
vrfNavAreaManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2015 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
14 #include <geometry/point.h>
15 #include <vector>
16 #include <map>
17 
18 #include <matrix/vlVector.h>
19 #include <matrix/coordTransform.h>
20 #include <geometry/extent.h>
22 #include <tbb/spin_mutex.h>
23 #include <tbb/task_arena.h>
24 #include <tbb/task_group.h>
26 
27 #include <vrfNavigation/navArea.h>
28 
29 class DtTerrainInterface;
30 class DtSimManager;
31 class DtSimObject;
32 class DtLocalVertexList;
33 class DtSimMessage;
34 class Coordinate_System;
35 class DtUUID;
36 class DtLocalObject;
39 
40 namespace makArchives
41 {
42  class DtGenericTerrainRecord;
43 }
44 
46 typedef void (*DtNavAreaRemovalCallbackFcn)(DtNavArea* area,
47  void* usr);
48 
51 {
52 public:
53 
55 
57  virtual ~DtVrfNavAreaManager();
58 
59  static void tickCallback(void* args);
60 
62  virtual bool init();
63 
65  virtual void tick();
66 
68 
69  virtual void setTerrainInterface(DtTerrainInterface* terrainInterface);
71  {
72  return myTerrainInterface;
73  }
75 
78 
79  static void genericRecordLoadedCallback(
80  makArchives::DtGenericTerrainRecord* record, void *user);
81  virtual void processGenericRecordLoaded(
84 
87 
88  void loadObjectNavData(const DtSimObject* simObject);
89  void removeObjectNavData(const DtSimObject* simObject);
90  DtNavArea* areaForObject(const DtSimObject* simObject) const;
92 
94  virtual void unloadAllNavData();
95 
97  virtual void revertNavData();
98 
100  virtual void pauseNavDataRegeneration();
101 
103  virtual void resumeNavDataRegeneration();
104 
108  virtual void addNavArea(DtNavArea* a);
109 
113  virtual DtNavArea* loadNavArea(DtNavArea::NavAreaId id, const DtFilename& filename);
114 
118  virtual DtNavArea* loadNavDataForObject(DtNavArea::NavAreaId id, const DtFilename& filename,
119  const DtSimObject* simObject);
120 
123  virtual DtNavArea::NavAreaId nextNavAreaId();
124 
131 
132  virtual DtNavArea* findNavAreaForLocation(const DtVector& localPosition, const DtString& profile,
133  const DtSimObject* = 0, bool* dataAvailable = 0);
134  virtual std::vector<DtNavArea*> findNavAreasForLocation(const DtVector& localPosition,
135  const DtString& profile, const DtSimObject* = 0, bool* dataAvailable = 0);
136  virtual DtNavArea* findNavAreaForArea(const DtLocalVertexList* area, const DtString& profile,
137  const DtSimObject* = 0, bool* dataAvailable = 0);
139 
141  virtual void addNavAreaAboutToBeRemovedCallback(
142  DtNavAreaRemovalCallbackFcn fcn, void* usrData) const;
143 
146  virtual void removeNavAreaAboutToBeRemovedCallback(
147  DtNavAreaRemovalCallbackFcn fcn, void* usrData) const;
148 
151  virtual void setBlockingNavDataLoad(bool b);
152 
154 
155  static void requestNavAreaStatusCallback(DtSimMessage*, void* usr);
156  virtual void processRequestNavAreaStatus();
158 
160 
161  static void requestSimObjectDebugPortsCallback(DtSimMessage* msg, void* usr);
162  virtual void processRequestSimObjectDebugPortsCallback(DtUUID uuid);
164 
166  virtual void sendNavDataStatus();
167 
169  virtual void processNavQueues();
170 
172 
173  static void setGamewareWorkingMemorySize(int sizeInMb);
174  static void setRegenerateNavigationDataAtRuntime(bool regen);
175  static void setMaxRegenerationThreads(int threads);
176  static void setNumberOfNavQueueProcessingThreads(int threads);
177  static void setRegenerationDelay(double delay);
178  static void setQueryTimeBudget(double ms);
179  static void setRegenerationFileDirectory(const DtFilename& dir);
181 
186  static double theRegenerationDelay;
187  static double theQueryTimeBudget;
188  static DtFilename theRegenerationFileDirectory;
189 
191  virtual void processSimObjectDeleted(const DtSimObject* simObject);
192 
194  virtual void invokeAreaAboutToBeDeletedCallbacks(DtNavArea*);
195 
197 
198  static void navigationRegenUpdateCallback(void* usr);
199  virtual void processNavigationRegenUpdate();
201 
202  void processUnloadTerrain();
203 
204 protected:
206 
207  //the extents and their data for all the unloaded nav areas in this terrain
209  {
210  DtFilename filename;
211 
213  boost::shared_ptr<DtCoordTransform> Matrix;
216  DtCoordTransform InvMatrix;
217  std::set<DtString> Profiles;
218  bool IsLoading;
221  boost::signals2::connection DynamicTerrainConnection;
222  };
223 
224  std::map<DtNavArea::NavAreaId, navAreaExtentData> myNavAreaExtents;
225 
226 
227 
228  //the nav areas whose data has been loaded
229  typedef std::vector<DtNavArea*> DtNavAreas;
231 
232  typedef std::map<DtUUID, DtNavArea*> DtObjectNavAreaMap;
238 
240 
242 
243 public:
245 protected:
246 
249  tbb::spin_mutex myNavAreaExtentsMutex;
250  tbb::spin_rw_mutex myNavAreaMutex;
251  mutable tbb::spin_rw_mutex myObjectNavAreaMutex;
252 
254  std::atomic<bool> myContinueProcessing;
255  std::atomic<bool> myProcessingStopped;
256 
257  tbb::task_arena myNavAreaArena;
258  tbb::task_group myNavAreaTaskGroup;
259  boost::signals2::connection myUnloadTerrainConnection;
260 
262 
263 };
UUID is a unique ID wrapper class.
Definition: rwUUID.h:229
This class is just used to count the nav generation threads to ensure we do not start too many thread...
Definition: navArea.h:161
static int theGamewareWorkingMemorySize
Definition: vrfNavAreaManager.h:182
static int theMaxRegenerationThreads
Definition: vrfNavAreaManager.h:184
Coordinate_System * myObjectCoordSys
Coord system used for nav datas on embarked objects.
Definition: vrfNavAreaManager.h:237
bool myRegenInTempDirectory
Definition: vrfNavAreaManager.h:261
DtTerrainInterface * myTerrainInterface
Definition: vrfNavAreaManager.h:205
static int theNumberOfNavQueueProcessingThreads
Definition: vrfNavAreaManager.h:185
std::map< DtNavArea::NavAreaId, navAreaExtentData > myNavAreaExtents
Definition: vrfNavAreaManager.h:224
DtDcm LocalCorrectionMatrix
Definition: vrfNavAreaManager.h:214
DtGenericTerrainRecords allow the VR-Forces terrainInterface library to instantiate and configure the...
Definition: DtGenericTerrainRecord.h:34
std::atomic< bool > myProcessingStopped
Definition: vrfNavAreaManager.h:255
bool myNavigationInitialized
Definition: vrfNavAreaManager.h:234
Definition: vrfNavAreaManager.h:208
boost::shared_ptr< DtCoordTransform > Matrix
Definition: vrfNavAreaManager.h:213
DtPoint ReferencePoint
Definition: vrfNavAreaManager.h:212
std::atomic< bool > myContinueProcessing
Definition: vrfNavAreaManager.h:254
DtSimulationServices * mySimulationServices
Definition: vrfNavAreaManager.h:235
Simple asynchronous callback queue.
Definition: vrfCallbackQueue.h:32
DtNavArea::NavAreaId myNextNavAreaId
Definition: vrfNavAreaManager.h:241
The DtExtent represents an axis-aligned 3d bounding box.
Definition: extent.h:43
tbb::spin_rw_mutex myObjectNavAreaMutex
Definition: vrfNavAreaManager.h:251
tbb::spin_rw_mutex myNavAreaMutex
Definition: vrfNavAreaManager.h:250
tbb::spin_mutex myNavAreaExtentsMutex
Definition: vrfNavAreaManager.h:249
DtCallbackList< DtNavArea * > NavAreaAboutToBeRemovedList
Definition: vrfNavAreaManager.h:247
std::vector< DtNavArea * > DtNavAreas
Definition: vrfNavAreaManager.h:229
std::set< DtString > Profiles
Definition: vrfNavAreaManager.h:217
DtDcm InvLocalCorrectionMatrix
Definition: vrfNavAreaManager.h:215
bool myBlockingNavLoad
Definition: vrfNavAreaManager.h:239
tbb::task_group myNavAreaTaskGroup
Definition: vrfNavAreaManager.h:258
bool IsLoading
Definition: vrfNavAreaManager.h:218
Definition: coordSystem.h:54
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
The DtVrfNavAreaManager manages all of the nav areas currently created in the sim.
Definition: vrfNavAreaManager.h:50
This class contains all the data and logic for navigation within a specific area. Nav Data may be loa...
Definition: navArea.h:206
File: simMsg.h.
Definition: simMessage.h:35
boost::signals2::connection DynamicTerrainConnection
Definition: vrfNavAreaManager.h:221
DtTerrainInterface allows access to common terrain calls without having to know the terrain implement...
Definition: terrainInterface.h:99
DtFilename filename
Definition: vrfNavAreaManager.h:210
DtVrfCallbackQueue * myNavQueryProcessingParallelQueue
Definition: vrfNavAreaManager.h:253
virtual DtTerrainInterface * terrainInterface()
The terrain interface used by this nav area manager.
Definition: vrfNavAreaManager.h:70
DtNavAreas myNavAreas
Definition: vrfNavAreaManager.h:230
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:90
static double theQueryTimeBudget
Definition: vrfNavAreaManager.h:187
DtDynamicTerrainQueryHandle DynamicTerrainQuery
Definition: vrfNavAreaManager.h:220
Represents a single simulation object in the exercise. Object may be VRF simulation, or non-VRF simulated, and may be simulated by the local sim engine, or by a remote sim engine. Only public (external) state of the object is available. All data is read-only. All access to data of the object is thread safe within the simulation frame.
Definition: simObject.h:79
Contains the declaration of the DtExtent class.
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
DtCoordTransform InvMatrix
Definition: vrfNavAreaManager.h:216
The simulation engine is controlled by a single,top-level class called the Simulation Manager...
Definition: simManager.h:121
Resource handle for a query which has been added to the system. Returned from DtTerrainImplementation...
Definition: terrainImplementation.h:106
DtExtent * Extent
Definition: vrfNavAreaManager.h:219
DtNavGenerationThreadCounter * myNavGenThreadCounter
Definition: vrfNavAreaManager.h:244
NavAreaAboutToBeRemovedList myNavAreaAboutToRemRemovedList
Definition: vrfNavAreaManager.h:248
static bool theRegenerateNavDataAtRuntime
Definition: vrfNavAreaManager.h:183
std::map< DtUUID, DtNavArea * > DtObjectNavAreaMap
Definition: vrfNavAreaManager.h:232
static double theRegenerationDelay
Definition: vrfNavAreaManager.h:186
static DtFilename theRegenerationFileDirectory
Definition: vrfNavAreaManager.h:188
class DtLocalVertexList:
Definition: localVertexList.h:20
boost::signals2::connection myUnloadTerrainConnection
Definition: vrfNavAreaManager.h:259
Definition: point.h:34
DtObjectNavAreaMap myObjectNavAreas
Definition: vrfNavAreaManager.h:233
A locally simulated VRF object. Holds all internal and external data for the object, and provides access to both the current frame and next frame state data for the object. All current frame data is read-only, and next-frame data can be written to. No thread safety guarantees are made on this object during the simulation frame and it should only be accessed by the thread that is simulating the object.
Definition: localObject.h:86
tbb::task_arena myNavAreaArena
Definition: vrfNavAreaManager.h:257
void(* DtNavAreaRemovalCallbackFcn)(DtNavArea *area, void *usr)
Callback function definition for nav area removals.
Definition: vrfNavAreaManager.h:46

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)