VR-Forces 4.10 Class Documentation
 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 
20 #include <vl/detonationInteraction.h>
23 
27 class DtSimCommand;
33 class DtRwVectorList;
34 class DtKeyValuePairList;
36 
37 namespace makVrv
38 {
39  class DtDynamicTerrainFeature;
40  class DtDynamicTerrainChanges;
41  class DtDynamicTerrainGeometry;
42 }
43 
49 {
50 private:
57 
58 public:
61  DtSimManager* simManager, DtComponentDescriptor* desc=0, DtReaderWriterRegistry *parentRegistry=0);
62 
64  virtual ~DtDynamicTerrainController();
65 
67  virtual bool init();
68 
70  virtual void registerCallbacks();
71 
73  virtual void deregisterCallbacks();
74 
76  virtual void preFirstTickInit();
77 
79  virtual const char* type() const;
80 
82  virtual void tick();
83 
87  virtual bool processDynamicTerrainSwitch(const DtTerrainGeometry& geometry, const DtKeyValuePair& change,
88  unsigned priority, double delay = 0.0, bool shouldQueue = true);
89 
93  virtual void processDynamicTerrainArea(const DtTerrainGeometry& geometry, const DtKeyValuePairList& changes,
94  unsigned priority, double delay = 0.0);
95 
96  virtual void processDynamicTerrainCrater(const DtTerrainGeometry& geometry, const DtKeyValuePairList& changes,
97  unsigned priority, double delay = 0.0);
98 
102  virtual DtRwDynamicTerrainItem* findDynamicTerrainSwitch(const DtTerrainGeometry& geometry,
103  double tolerance, const DtString& key, unsigned* index = 0);
104 
106  static DtSimComponent* creator(const DtString& name, DtVrfObject* owner, DtSimManager* simManager,
107  DtComponentDescriptor* desc = 0, DtReaderWriterRegistry* parentRegistry = 0);
108 
109  virtual void updateTaskVisualizations();
110 
111  virtual void processQueuedTerrainChanges(double dt);
112 
115  virtual void setDynamicTerrainInformationRecheckPeriod(double);
117  {
118  return myDynamicTerrainRecheckPeriod;
119  }
121 
125  virtual std::list<DtVector> findDynamicTerrainElements(const DtVector& localLocation, double radius,
126  const DtString& filterKey = DtString::nullString(),
127  std::list<DtRwDynamicTerrainInformation>* fullInfo = 0,
128  bool* dataAvailable = 0);
129 
133  virtual std::list<DtVector> findDynamicTerrainElements(const DtVector& localStartLocation,
134  const DtVector& localEndLocation, const DtString& filterKey = DtString::nullString(),
135  std::list<DtRwDynamicTerrainInformation>* fullInfo = 0,
136  bool* dataAvailable = 0);
137 
138 
139 
140 protected:
141 
144  virtual void updateSingleSwitch(const DtTerrainGeometry& geometry, const DtKeyValuePair& change,
145  unsigned priority);
146 
149  static void addDynamicTerrainChangesCallback(const DtSimCommand& cmd, void* usr);
150  virtual void processAddDynamicTerrainChangesCommand(const DtAddDynamicTerrainChangesCommand& cmd);
152 
155  static void switchDynamicTerrainCallback(const DtSimCommand& cmd, void* usr);
156 
158  virtual bool processSwitchDynamicTerrainCommand(const DtSwitchDynamicTerrainAtPointCommand& cmd, bool shouldQueue = true);
160 
163  static void resetDynamicTerrainChangesCallback(const DtSimCommand& cmd, void* usr);
164  virtual void processResetDynamicTerrainChangesCommand(const DtResetDynamicTerrainChangesCommand& cmd);
166 
168  virtual bool isRequestValidForArea(const DtIfRequestDynamicTerrainInformation& req);
169 
171  virtual bool isCommandValidForArea(const DtDynamicTerrainCommand& cmd);
172 
174  virtual bool isInCommandGeometry(const DtDynamicTerrainCommand& cmd, const DtTerrainGeometry& terrainGeometry);
175 
178  DtVector averageLocation(const DtRwVectorList& vectorList) const;
179  DtVector averageLocation(const DtWorldLocationStructArray& vectorList) const;
181 
184  static void dynamicTerrainInformationRequestCallback(DtSimMessage*, void* usr);
185  virtual void processDynamicTerrainInformationRequest(DtIfRequestDynamicTerrainInformation*);
187 
191  {
195  };
196 
197  typedef DtBoost::shared_ptr<PendingDynamicTerrainInformation> PendingDynamicTerrainInformationPtr;
198  typedef std::vector<PendingDynamicTerrainInformationPtr> PendingDynamicTerrainRequests;
199 
202  virtual bool processPendingDynamicTerrainInformation(PendingDynamicTerrainInformationPtr&);
203 
206  static void drawDynamicTerrainCallback(DtSimMessage * msg, void * usr);
207  virtual void processDrawDynamicTerrainTask(DtSimMessage * msg);
209 
211  virtual DtDynamicTerrainPublisher* createPublisher();
212 
214  virtual DtDynamicTerrainControllerPSR* createPSR();
215 
217  virtual void addPublishedChange(std::vector<DtDynamicTerrainPublisher*>& publishers,
218  const DtTerrainGeometryAndData& change);
219 
222  virtual void updatePublishedChange(std::vector<DtDynamicTerrainPublisher*>& publishers,
223  unsigned index, const DtKeyValuePairList& changeData, unsigned priority, unsigned eventNumber);
224 
226  virtual const DtTerrainGeometryAndData& publishedChange(const std::vector<DtDynamicTerrainPublisher*>& publishers, unsigned index) const;
227 
228 
229 protected:
230 
232 
236 
238  std::vector<DtDynamicTerrainPublisher*> myIndividualSwitchPublishers;
239 
241  std::vector<DtDynamicTerrainPublisher*> myAreaPublishers;
242 
244  std::vector<DtDynamicTerrainPublisher*> myCraterPublishers;
245 
247  std::vector<DtDynamicTerrainPublisher*> myVehicleTrackPublishers;
248 
251 
253 
254  typedef tbb::spin_mutex Mutex;
256 
258  {
259  QueuedTerrainSwitch(const DtTerrainGeometry& g, const DtKeyValuePair& c, unsigned p, double d)
260  : geometry(g.clone()), change(c), priority(p), delay(d) {};
261 
263  {
264  delete geometry;
265  }
266 
269  unsigned priority;
270  double delay;
271  };
272  std::list<QueuedTerrainSwitch> myTerrainSwitchQueue;
273  std::list<DtSwitchDynamicTerrainAtPointCommand> myTerrainSwitchAtPointQueue;
274 
275 };
double myLastTickRealTime
Definition: dynamicTerrainController.h:252
std::list< QueuedTerrainSwitch > myTerrainSwitchQueue
Definition: dynamicTerrainController.h:272
Definition: dynamicTerrainController.h:257
#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:192
Definition: worldLocationStructArray.h:19
Definition: terrainGeometryAndData.h:24
DtVrfObject is used to represent any type of simulated object (entities, aggregate, control objects) in a VR-Forces application.
Definition: vrfObject.h:215
Definition: keyValuePairList.h:18
Instances of DtDynamicTerrainPublisher publish DynamicTerrain objects to the network.
Definition: dynamicTerrainPublisherDIS.h:27
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:262
DtDynamicTerrainControllerPSR * myProcessState
Container for state data associated with this component.
Definition: dynamicTerrainController.h:235
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
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:42
Definition: readerWriterRegistry.h:39
unsigned priority
Definition: dynamicTerrainController.h:269
virtual const char * type() const =0
Returns a string identifies the class type of component.
Definition: keyValuePair.h:18
virtual bool init()
Calls setRadio()
Mutex myTerrainFeatureMutex
Definition: dynamicTerrainController.h:255
DtIfDynamicTerrainInformationResponse response
Definition: dynamicTerrainController.h:193
PendingDynamicTerrainRequests myPendingDynamicTerrainRequests
Definition: dynamicTerrainController.h:249
tbb::spin_mutex Mutex
Definition: dynamicTerrainController.h:254
virtual void updateTaskVisualizations()
Called to update task visualizations after every tick.
Definition: simComponent.h:487
DtKeyValuePair change
Definition: dynamicTerrainController.h:268
DtDynamicTerrainMunitionDamageController is a controller that calculates and publishes terrain change...
Definition: dynamicTerrainController.h:48
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
std::vector< DtDynamicTerrainPublisher * > myIndividualSwitchPublishers
Publishes the dynamic terrain changes for individual switches to the network.
Definition: dynamicTerrainController.h:238
virtual void tick()
This gives the thread of control to the component.
If there are dynamic terrain information requests pending, this stores the request and its current st...
Definition: dynamicTerrainController.h:190
DtSimCommand is an abstract base class from which commands can derive.
Definition: simCommand.h:32
std::vector< DtDynamicTerrainPublisher * > myCraterPublishers
Publishes the dynamic terrain changes for craters to the network.
Definition: dynamicTerrainController.h:244
std::vector< PendingDynamicTerrainInformationPtr > PendingDynamicTerrainRequests
Definition: dynamicTerrainController.h:198
std::vector< DtDynamicTerrainPublisher * > myVehicleTrackPublishers
Publishes the persistent vehicle track changes to the the network.
Definition: dynamicTerrainController.h:247
This file provides a protocol independant include file for the class DtDynamicTerrainPublisher.
DtDynamicTerrainControllerDescriptor * myDynamicTerrainDescriptor
Definition: dynamicTerrainController.h:231
The DtSimComponent class is the base class for the entire simulation model component hierarchy...
Definition: simComponent.h:67
double nextCheckTime
Definition: dynamicTerrainController.h:194
virtual double dynamicTerrainInformationRecheckPeriod() const
Definition: dynamicTerrainController.h:116
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:24
DtTerrainGeometry * geometry
Definition: dynamicTerrainController.h:267
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:270
The simulation engine is controlled by a single,top-level class called the Simulation Manager...
Definition: simManager.h:103
Interface content for requesting information on available dynamic terrain switches within the given r...
Definition: ifRequestDynamicTerrainInformation.h:19
double myDynamicTerrainRecheckPeriod
Definition: dynamicTerrainController.h:250
QueuedTerrainSwitch(const DtTerrainGeometry &g, const DtKeyValuePair &c, unsigned p, double d)
Definition: dynamicTerrainController.h:259
class DtRwVectorList:
Definition: rwVectorList.h:22
DtBoost::shared_ptr< PendingDynamicTerrainInformation > PendingDynamicTerrainInformationPtr
Definition: dynamicTerrainController.h:197
Definition: terrainGeometry.h:33
std::list< DtSwitchDynamicTerrainAtPointCommand > myTerrainSwitchAtPointQueue
Definition: dynamicTerrainController.h:273
std::vector< DtDynamicTerrainPublisher * > myAreaPublishers
Publishes the dynamic terrain changes for a whole area to the network.
Definition: dynamicTerrainController.h:241

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)