VR-Forces 5.0.2 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
dynamicTerrainController.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2016 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
9 
12 
13 #pragma once
14 
21 
25 class DtSimCommand;
32 class DtRwVectorList;
33 class DtKeyValuePairList;
35 
36 namespace makVrf
37 {
38  class DtDynamicTerrainStateComponent;
39 }
40 
41 namespace makVrv
42 {
43  class DtDynamicTerrainFeature;
44  class DtDynamicTerrainChanges;
45  class DtDynamicTerrainGeometry;
46 }
47 
53 {
54 private:
61 
62 public:
65  DtSimulationServices* simManager, DtComponentDescriptor* desc=0, DtReaderWriterRegistry *parentRegistry=0);
66 
68  virtual ~DtDynamicTerrainController();
69 
71  virtual bool init();
72 
74  virtual void registerCallbacks();
75 
77  virtual void deregisterCallbacks();
78 
80  virtual void preFirstTickInit();
81 
83  virtual const char* type() const;
84 
86  virtual void tick();
87 
91  virtual bool processDynamicTerrainSwitch(const DtTerrainGeometry& geometry, const DtKeyValuePair& change,
92  unsigned priority, double delay = 0.0, bool shouldQueue = true);
93 
97  virtual void processDynamicTerrainArea(const DtTerrainGeometry& geometry, const DtKeyValuePairList& changes,
98  unsigned priority, double delay = 0.0);
99 
100  virtual void processDynamicTerrainCrater(const DtTerrainGeometry& geometry, const DtKeyValuePairList& changes,
101  unsigned priority, double delay = 0.0);
102 
106  virtual DtRwDynamicTerrainItem* findDynamicTerrainSwitch(const DtTerrainGeometry& geometry,
107  double tolerance, const DtString& key, unsigned* index = 0);
108 
110  static DtSimComponent* creator(const DtString& name, DtLocalObject* owner, DtSimulationServices* simManager,
111  DtComponentDescriptor* desc = 0, DtReaderWriterRegistry* parentRegistry = 0);
112 
113  virtual void updateTaskVisualizations();
114 
115  virtual void processQueuedTerrainChanges(double dt);
116 
119  virtual void setDynamicTerrainInformationRecheckPeriod(double);
121  {
122  return myDynamicTerrainRecheckPeriod;
123  }
125 
129  virtual std::list<DtVector> findDynamicTerrainElements(const DtVector& localLocation, double radius,
130  const DtString& filterKey = DtString::nullString(),
131  std::list<DtRwDynamicTerrainInformation>* fullInfo = 0,
132  bool* dataAvailable = 0);
133 
137  virtual std::list<DtVector> findDynamicTerrainElements(const DtVector& localStartLocation,
138  const DtVector& localEndLocation, const DtString& filterKey = DtString::nullString(),
139  std::list<DtRwDynamicTerrainInformation>* fullInfo = 0,
140  bool* dataAvailable = 0);
141 
142 
143 
144 protected:
145 
148  virtual void updateSingleSwitch(const DtTerrainGeometry& geometry, const DtKeyValuePair& change,
149  unsigned priority);
150 
153  static void addDynamicTerrainChangesCallback(const DtSimCommand& cmd, void* usr);
154  virtual void processAddDynamicTerrainChangesCommand(const DtAddDynamicTerrainChangesCommand& cmd);
156 
159  static void switchDynamicTerrainCallback(const DtSimCommand& cmd, void* usr);
160 
162  virtual bool processSwitchDynamicTerrainCommand(const DtSwitchDynamicTerrainAtPointCommand& cmd, bool shouldQueue = true);
164 
167  static void resetDynamicTerrainChangesCallback(const DtSimCommand& cmd, void* usr);
168  virtual void processResetDynamicTerrainChangesCommand(const DtResetDynamicTerrainChangesCommand& cmd);
170 
173  static void resetAllDynamicTerrainChangesCallback(const DtSimCommand& cmd, void* usr);
174  virtual void processResetAllDynamicTerrainChangesCommand(const DtResetAllDynamicTerrainChangesCommand& cmd);
176 
178  virtual bool isRequestValidForArea(const DtIfRequestDynamicTerrainInformation& req);
179 
181  virtual bool isCommandValidForArea(const DtDynamicTerrainCommand& cmd);
182 
184  virtual bool isInCommandGeometry(const DtDynamicTerrainCommand& cmd, const DtTerrainGeometry& terrainGeometry);
185 
188  DtVector averageLocation(const DtRwVectorList& vectorList) const;
189  DtVector averageLocation(const DtWorldLocationStructArray& vectorList) const;
191 
194  static void dynamicTerrainInformationRequestCallback(DtSimMessage*, void* usr);
195  virtual void processDynamicTerrainInformationRequest(DtIfRequestDynamicTerrainInformation*);
197 
201  {
205  };
206 
207  typedef DtBoost::shared_ptr<PendingDynamicTerrainInformation> PendingDynamicTerrainInformationPtr;
208  typedef std::vector<PendingDynamicTerrainInformationPtr> PendingDynamicTerrainRequests;
209 
212  virtual bool processPendingDynamicTerrainInformation(PendingDynamicTerrainInformationPtr&);
213 
216  static void drawDynamicTerrainCallback(DtSimMessage * msg, void * usr);
217  virtual void processDrawDynamicTerrainTask(DtSimMessage * msg);
219 
221  virtual DtDynamicTerrainControllerPSR* createPSR();
222 
224  virtual void addPublishedChange(std::vector<makVrf::DtDynamicTerrainStateComponent*>& publishers,
225  const DtTerrainGeometryAndData& change);
226 
229  virtual void updatePublishedChange(std::vector<makVrf::DtDynamicTerrainStateComponent*>& publishers,
230  unsigned index, const DtKeyValuePairList& changeData, unsigned priority, unsigned eventNumber);
231 
233  virtual const DtTerrainGeometryAndData& publishedChange(const std::vector<makVrf::DtDynamicTerrainStateComponent*>& publishers, unsigned index) const;
234 
235  virtual makVrf::DtDynamicTerrainStateComponent* createPublisher();
236 
237 protected:
238 
240 
244 
246  std::vector<makVrf::DtDynamicTerrainStateComponent*> myIndividualSwitchPublishers;
247 
249  std::vector<makVrf::DtDynamicTerrainStateComponent*> myAreaPublishers;
250 
252  std::vector<makVrf::DtDynamicTerrainStateComponent*> myCraterPublishers;
253 
255  std::vector<makVrf::DtDynamicTerrainStateComponent*> myVehicleTrackPublishers;
256 
259 
261 
262  typedef tbb::spin_mutex Mutex;
264 
266  {
267  QueuedTerrainSwitch(const DtTerrainGeometry& g, const DtKeyValuePair& c, unsigned p, double d)
268  : geometry(g.clone()), change(c), priority(p), delay(d) {};
269 
271  {
272  delete geometry;
273  }
274 
277  unsigned priority;
278  double delay;
279  };
280  std::list<QueuedTerrainSwitch> myTerrainSwitchQueue;
281  std::list<DtSwitchDynamicTerrainAtPointCommand> myTerrainSwitchAtPointQueue;
282  bool myEnabled;
283 };
double myLastTickRealTime
Definition: dynamicTerrainController.h:260
std::list< QueuedTerrainSwitch > myTerrainSwitchQueue
Definition: dynamicTerrainController.h:280
Definition: dynamicTerrainController.h:265
#define DT_DLL_vrfmodel
This file is used to determine how to build.
Definition: vrfmodelDefines.h:24
Base class for any DtSimCommand which causes dynamic terrain changes to be added or removed...
Definition: dynamicTerrainCommand.h:20
DtIfRequestDynamicTerrainInformation request
Definition: dynamicTerrainController.h:202
Definition: worldLocationStructArray.h:19
Definition: terrainGeometryAndData.h:24
Definition: keyValuePairList.h:18
DtSimCommand which causes a specific list of dynamic terrain changes to take place at the specified g...
Definition: dynamicTerrainCommand.h:114
~QueuedTerrainSwitch()
Definition: dynamicTerrainController.h:270
DtDynamicTerrainControllerPSR * myProcessState
Container for state data associated with this component. This state is saved and restored as part of ...
Definition: dynamicTerrainController.h:243
virtual void preFirstTickInit()
This function can be overridden to initialize a component before it is ticked for the first time...
Sim command that causes the dynamic terrain state at a specific point to be switched to the next stat...
Definition: switchDynamicTerrainAtPointCommand.h:21
This class provides a base class for all controllers that are capable of executing a DtSimTask...
Definition: singleTaskControllerComponent.h:20
bool myEnabled
Definition: dynamicTerrainController.h:282
Definition: ifDynamicTerrainInformationResponse.h:22
A readable, writable type whose name is the name of a component and that has a list of component name...
Definition: componentDescriptor.h:49
Definition: readerWriterRegistry.h:39
unsigned priority
Definition: dynamicTerrainController.h:277
virtual const char * type() const =0
Returns a string identifies the class type of component. Type values are defined in compTypes...
std::vector< makVrf::DtDynamicTerrainStateComponent * > myCraterPublishers
Publishes the dynamic terrain changes for a whole area to the network.
Definition: dynamicTerrainController.h:252
Definition: keyValuePair.h:18
virtual bool init()
Calls setRadio()
Mutex myTerrainFeatureMutex
Definition: dynamicTerrainController.h:263
DtIfDynamicTerrainInformationResponse response
Definition: dynamicTerrainController.h:203
PendingDynamicTerrainRequests myPendingDynamicTerrainRequests
Definition: dynamicTerrainController.h:257
tbb::spin_mutex Mutex
Definition: dynamicTerrainController.h:262
virtual void updateTaskVisualizations()
Called to update task visualizations after every tick. Implemented by subclasses. ...
Definition: simComponent.h:436
DtKeyValuePair change
Definition: dynamicTerrainController.h:276
DtDynamicTerrainMunitionDamageController is a controller that calculates and publishes terrain change...
Definition: dynamicTerrainController.h:52
Instances of DtDynamicTerrainControllerDescriptor are used to specify the parameters for a DtDynamicT...
Definition: dynamicTerrainControllerDescriptor.h:19
DtDynamicTerrainControllerPSR is a process state repository which holds state variables for the DtDyn...
Definition: dynamicTerrainControllerPSR.h:25
File: simMsg.h.
Definition: simMessage.h:35
virtual void tick()
This gives the thread of control to the component. The component is ticked once each simulation from ...
If there are dynamic terrain information requests pending, this stores the request and its current st...
Definition: dynamicTerrainController.h:200
DtSimCommand is an abstract base class from which commands can derive. It manages the read/write capa...
Definition: simCommand.h:32
std::vector< PendingDynamicTerrainInformationPtr > PendingDynamicTerrainRequests
Definition: dynamicTerrainController.h:208
DtDynamicTerrainControllerDescriptor * myDynamicTerrainDescriptor
Definition: dynamicTerrainController.h:239
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:90
The DtSimComponent class is the base class for the entire simulation model component hierarchy...
Definition: simComponent.h:70
std::vector< makVrf::DtDynamicTerrainStateComponent * > myIndividualSwitchPublishers
Publishes the dynamic terrain changes for individual switches to the network.
Definition: dynamicTerrainController.h:246
double nextCheckTime
Definition: dynamicTerrainController.h:204
virtual double dynamicTerrainInformationRecheckPeriod() const
The recheck period for checking dynamic terrain info requests. Default is 0.5 seconds.
Definition: dynamicTerrainController.h:120
const DtTaskControllerComponent & operator=(const DtTaskControllerComponent &orig)
assignment operator
DtRwDynamicTerrainItem holds a the information needed to make a dynamic change to the terrain...
Definition: rwDynamicTerrainItem.h:23
std::vector< makVrf::DtDynamicTerrainStateComponent * > myAreaPublishers
Publishes the dynamic terrain changes for a whole area to the network.
Definition: dynamicTerrainController.h:249
DtTerrainGeometry * geometry
Definition: dynamicTerrainController.h:275
DtSimCommand which causes a specific list of dynamic terrain changes to be reset to their original st...
Definition: dynamicTerrainCommand.h:139
double delay
Definition: dynamicTerrainController.h:278
Interface content for requesting information on available dynamic terrain switches within the given r...
Definition: ifRequestDynamicTerrainInformation.h:19
double myDynamicTerrainRecheckPeriod
Definition: dynamicTerrainController.h:258
QueuedTerrainSwitch(const DtTerrainGeometry &g, const DtKeyValuePair &c, unsigned p, double d)
Definition: dynamicTerrainController.h:267
DtSimCommand which causes all dynamic terrain changes to be reset to their original state at the spec...
Definition: dynamicTerrainCommand.h:170
class DtRwVectorList:
Definition: rwVectorList.h:22
DtBoost::shared_ptr< PendingDynamicTerrainInformation > PendingDynamicTerrainInformationPtr
Definition: dynamicTerrainController.h:207
std::vector< makVrf::DtDynamicTerrainStateComponent * > myVehicleTrackPublishers
Publishes the persistent vehicle track changes to the the network.
Definition: dynamicTerrainController.h:255
Definition: terrainGeometry.h:33
std::list< DtSwitchDynamicTerrainAtPointCommand > myTerrainSwitchAtPointQueue
Definition: dynamicTerrainController.h:281
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
1) Define the interface class that will be used to represent the next and curent frames. The UNDEFINED_ macros are convenience macros that will define methods that throw exceptions (until they are implemented)
Definition: dynamicTerrainStateComponent.h:45

Document ID: Generated on Sun Dec 4 20:22:03 EST 2022 from SVN revision 249613
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)