VR-Forces 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) 2023 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 DtAttachedTerrain;
37 class DtLocalObject;
40 class DtTerrainAttachedTo;
41 
42 namespace makArchives
43 {
44  class DtGenericTerrainRecord;
45 }
46 
48 typedef void (*DtNavAreaRemovalCallbackFcn)(DtNavArea* area,
49  void* usr);
50 
53 {
54 public:
55 
57 
59  virtual ~DtVrfNavAreaManager();
60 
61  static void tickCallback(void* args);
62 
64  virtual bool init();
65 
67  virtual void tick();
68 
70 
71  virtual void setTerrainInterface(DtTerrainInterface* terrainInterface);
73  {
74  return myTerrainInterface;
75  }
77 
80 
81  static void genericRecordLoadedCallback(
82  makArchives::DtGenericTerrainRecord* record, void *user);
83  virtual void processGenericRecordLoaded(
86 
89 
90  void loadObjectNavData(const DtSimObject* simObject);
91  void removeObjectNavData(const DtSimObject* simObject);
92  DtNavArea* areaForObject(const DtSimObject* simObject) const;
94 
96  virtual void unloadAllNavData();
97 
99  virtual void revertNavData();
100 
102  virtual void pauseNavDataRegeneration();
103 
105  virtual void resumeNavDataRegeneration();
106 
110  virtual void addNavArea(DtNavArea* a);
111 
115  virtual DtNavArea* loadNavArea(DtNavArea::NavAreaId id, const DtFilename& filename);
116 
120  virtual DtNavArea* loadNavDataForObject(DtNavArea::NavAreaId id, const DtFilename& filename,
121  const DtSimObject* simObject);
122 
125  virtual void DtVrfNavAreaManager::loadAllNavData(bool* dataAvailable = 0);
126 
129  virtual DtNavArea::NavAreaId nextNavAreaId();
130 
137 
138  virtual DtNavArea* findNavAreaForLocation(const DtVector& localPosition, const DtString& profile,
139  const DtSimObject* = 0, bool* dataAvailable = 0);
140  virtual std::vector<DtNavArea*> findNavAreasForLocation(const DtVector& localPosition,
141  const DtString& profile, const DtSimObject* = 0, bool* dataAvailable = 0, const DtAttachedTerrain* terrainAttachedTo = 0);
142  virtual std::vector<DtNavArea*> findNavAreasForArea(const DtLocalVertexList* boundingArea,
143  const DtString& profile, const DtSimObject* = 0, bool* dataAvailable = 0);
144  virtual DtNavArea* findNavAreaForArea(const DtLocalVertexList* area, const DtString& profile,
145  const DtSimObject* = 0, bool* dataAvailable = 0);
146 
148  virtual std::vector<DtNavArea*> findNavAreasForLocation(const DtVector& localPosition) const;
150 
152  virtual void addNavAreaAboutToBeRemovedCallback(
153  DtNavAreaRemovalCallbackFcn fcn, void* usrData) const;
154 
157  virtual void removeNavAreaAboutToBeRemovedCallback(
158  DtNavAreaRemovalCallbackFcn fcn, void* usrData) const;
159 
162  virtual void setBlockingNavDataLoad(bool b);
163 
165 
166  static void requestNavAreaStatusCallback(DtSimMessage*, void* usr);
167  virtual void processRequestNavAreaStatus();
169 
171 
172  static void requestSimObjectDebugPortsCallback(DtSimMessage* msg, void* usr);
173  virtual void processRequestSimObjectDebugPortsCallback(DtUUID uuid);
175 
177  virtual void sendNavDataStatus();
178 
180  virtual void processNavQueues();
181 
183 
184  static void setGamewareWorkingMemorySize(int sizeInMb);
185  static void setRegenerateNavigationDataAtRuntime(bool regen);
186  static void setMaxRegenerationThreads(int threads);
187  static void setNumberOfNavQueueProcessingThreads(int threads);
188  static void setRegenerationDelay(double delay);
189  static void setQueryTimeBudget(double ms);
190  static void setRegenerationFileDirectory(const DtFilename& dir);
192 
197  static double theRegenerationDelay;
198  static double theQueryTimeBudget;
199  static DtFilename theRegenerationFileDirectory;
200 
202  virtual void processSimObjectDeleted(const DtSimObject* simObject);
203 
205  virtual void invokeAreaAboutToBeDeletedCallbacks(DtNavArea*);
206 
208 
209  static void navigationRegenUpdateCallback(void* usr);
210  virtual void processNavigationRegenUpdate();
212 
213  void processUnloadTerrain();
214 
215  virtual void updateSimOperationStatus();
216 
217 protected:
219 
220  //the extents and their data for all the unloaded nav areas in this terrain
222  {
223  DtFilename filename;
224 
226  boost::shared_ptr<DtCoordTransform> Matrix;
229  DtCoordTransform InvMatrix;
230  std::set<DtString> Profiles;
231  bool IsLoading;
234  boost::signals2::connection DynamicTerrainConnection;
235  };
236 
237  std::map<DtNavArea::NavAreaId, navAreaExtentData> myNavAreaExtents;
238 
239 
240 
241  //the nav areas whose data has been loaded
242  typedef std::vector<DtNavArea*> DtNavAreas;
244 
245  typedef std::map<DtUUID, DtNavArea*> DtObjectNavAreaMap;
251 
253 
255 
256 public:
258 protected:
259 
262  tbb::spin_mutex myNavAreaExtentsMutex;
263  mutable tbb::spin_rw_mutex myNavAreaMutex;
264  mutable tbb::spin_rw_mutex myObjectNavAreaMutex;
265 
267  std::atomic<bool> myContinueProcessing;
268  std::atomic<bool> myProcessingStopped;
269 
270  tbb::task_arena myNavAreaArena;
271  tbb::task_group myNavAreaTaskGroup;
272  boost::signals2::connection myUnloadTerrainConnection;
273 
275  bool myNavRegenerating = false;
276  bool myNavOperations = false;
277 };
UUID is a unique ID wrapper class.
Definition: uuid.h:59
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:193
static int theMaxRegenerationThreads
Definition: vrfNavAreaManager.h:195
Coordinate_System * myObjectCoordSys
Coord system used for nav datas on embarked objects.
Definition: vrfNavAreaManager.h:250
bool myRegenInTempDirectory
Definition: vrfNavAreaManager.h:274
Definition: attachedTerrain.h:46
DtTerrainInterface * myTerrainInterface
Definition: vrfNavAreaManager.h:218
static int theNumberOfNavQueueProcessingThreads
Definition: vrfNavAreaManager.h:196
std::map< DtNavArea::NavAreaId, navAreaExtentData > myNavAreaExtents
Definition: vrfNavAreaManager.h:237
DtDcm LocalCorrectionMatrix
Definition: vrfNavAreaManager.h:227
DtGenericTerrainRecords allow the VR-Forces terrainInterface library to instantiate and configure the...
Definition: DtGenericTerrainRecord.h:34
std::atomic< bool > myProcessingStopped
Definition: vrfNavAreaManager.h:268
bool myNavigationInitialized
Definition: vrfNavAreaManager.h:247
Definition: vrfNavAreaManager.h:221
boost::shared_ptr< DtCoordTransform > Matrix
Definition: vrfNavAreaManager.h:226
DtPoint ReferencePoint
Definition: vrfNavAreaManager.h:225
std::atomic< bool > myContinueProcessing
Definition: vrfNavAreaManager.h:267
DtSimulationServices * mySimulationServices
Definition: vrfNavAreaManager.h:248
Simple asynchronous callback queue.
Definition: vrfCallbackQueue.h:32
DtNavArea::NavAreaId myNextNavAreaId
Definition: vrfNavAreaManager.h:254
The DtExtent represents an axis-aligned 3d bounding box.
Definition: extent.h:43
tbb::spin_rw_mutex myObjectNavAreaMutex
Definition: vrfNavAreaManager.h:264
tbb::spin_rw_mutex myNavAreaMutex
Definition: vrfNavAreaManager.h:263
tbb::spin_mutex myNavAreaExtentsMutex
Definition: vrfNavAreaManager.h:262
DtCallbackList< DtNavArea * > NavAreaAboutToBeRemovedList
Definition: vrfNavAreaManager.h:260
std::vector< DtNavArea * > DtNavAreas
Definition: vrfNavAreaManager.h:242
std::set< DtString > Profiles
Definition: vrfNavAreaManager.h:230
DtDcm InvLocalCorrectionMatrix
Definition: vrfNavAreaManager.h:228
bool myBlockingNavLoad
Definition: vrfNavAreaManager.h:252
tbb::task_group myNavAreaTaskGroup
Definition: vrfNavAreaManager.h:271
bool IsLoading
Definition: vrfNavAreaManager.h:231
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:52
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:234
DtTerrainInterface allows access to common terrain calls without having to know the terrain implement...
Definition: terrainInterface.h:100
DtFilename filename
Definition: vrfNavAreaManager.h:223
DtVrfCallbackQueue * myNavQueryProcessingParallelQueue
Definition: vrfNavAreaManager.h:266
virtual DtTerrainInterface * terrainInterface()
The terrain interface used by this nav area manager.
Definition: vrfNavAreaManager.h:72
DtNavAreas myNavAreas
Definition: vrfNavAreaManager.h:243
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:95
static double theQueryTimeBudget
Definition: vrfNavAreaManager.h:198
DtDynamicTerrainQueryHandle DynamicTerrainQuery
Definition: vrfNavAreaManager.h:233
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:88
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:229
The simulation engine is controlled by a single,top-level class called the Simulation Manager...
Definition: simManager.h:124
Resource handle for a query which has been added to the system. Returned from DtTerrainImplementation...
Definition: terrainImplementation.h:108
DtExtent * Extent
Definition: vrfNavAreaManager.h:232
DtNavGenerationThreadCounter * myNavGenThreadCounter
Definition: vrfNavAreaManager.h:257
NavAreaAboutToBeRemovedList myNavAreaAboutToRemRemovedList
Definition: vrfNavAreaManager.h:261
static bool theRegenerateNavDataAtRuntime
Definition: vrfNavAreaManager.h:194
std::map< DtUUID, DtNavArea * > DtObjectNavAreaMap
Definition: vrfNavAreaManager.h:245
static double theRegenerationDelay
Definition: vrfNavAreaManager.h:197
static DtFilename theRegenerationFileDirectory
Definition: vrfNavAreaManager.h:199
class DtLocalVertexList:
Definition: localVertexList.h:20
boost::signals2::connection myUnloadTerrainConnection
Definition: vrfNavAreaManager.h:272
Definition: point.h:34
DtObjectNavAreaMap myObjectNavAreas
Definition: vrfNavAreaManager.h:246
virtual void loadAllNavData(bool *dataAvailable=0)
Loads all nav data (if any). Typically only called internally.
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:270
void(* DtNavAreaRemovalCallbackFcn)(DtNavArea *area, void *usr)
Callback function definition for nav area removals.
Definition: vrfNavAreaManager.h:48

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)