VR-Forces 4.8 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 protected:
139 
142  virtual void updateSingleSwitch(const DtTerrainGeometry& geometry, const DtKeyValuePair& change,
143  unsigned priority);
144 
147  static void addDynamicTerrainChangesCallback(const DtSimCommand& cmd, void* usr);
148  virtual void processAddDynamicTerrainChangesCommand(const DtAddDynamicTerrainChangesCommand& cmd);
150 
153  static void switchDynamicTerrainCallback(const DtSimCommand& cmd, void* usr);
154 
156  virtual bool processSwitchDynamicTerrainCommand(const DtSwitchDynamicTerrainAtPointCommand& cmd, bool shouldQueue = true);
158 
161  static void resetDynamicTerrainChangesCallback(const DtSimCommand& cmd, void* usr);
162  virtual void processResetDynamicTerrainChangesCommand(const DtResetDynamicTerrainChangesCommand& cmd);
164 
166  virtual bool isRequestValidForArea(const DtIfRequestDynamicTerrainInformation& req);
167 
169  virtual bool isCommandValidForArea(const DtDynamicTerrainCommand& cmd);
170 
172  virtual bool isInCommandGeometry(const DtDynamicTerrainCommand& cmd, const DtTerrainGeometry& terrainGeometry);
173 
176  DtVector averageLocation(const DtRwVectorList& vectorList) const;
177  DtVector averageLocation(const DtWorldLocationStructArray& vectorList) const;
179 
182  static void dynamicTerrainInformationRequestCallback(DtSimMessage*, void* usr);
183  virtual void processDynamicTerrainInformationRequest(DtIfRequestDynamicTerrainInformation*);
185 
189  {
193  };
194 
195  typedef DtBoost::shared_ptr<PendingDynamicTerrainInformation> PendingDynamicTerrainInformationPtr;
196  typedef std::vector<PendingDynamicTerrainInformationPtr> PendingDynamicTerrainRequests;
197 
200  virtual bool processPendingDynamicTerrainInformation(PendingDynamicTerrainInformationPtr&);
201 
204  static void drawDynamicTerrainCallback(DtSimMessage * msg, void * usr);
205  virtual void processDrawDynamicTerrainTask(DtSimMessage * msg);
207 
209  virtual DtDynamicTerrainPublisher* createPublisher();
210 
212  virtual DtDynamicTerrainControllerPSR* createPSR();
213 
215  virtual void addPublishedChange(std::vector<DtDynamicTerrainPublisher*>& publishers,
216  const DtTerrainGeometryAndData& change);
217 
220  virtual void updatePublishedChange(std::vector<DtDynamicTerrainPublisher*>& publishers,
221  unsigned index, const DtKeyValuePairList& changeData, unsigned priority, unsigned eventNumber);
222 
224  virtual const DtTerrainGeometryAndData& publishedChange(const std::vector<DtDynamicTerrainPublisher*>& publishers, unsigned index) const;
225 
226 
227 protected:
228 
230 
234 
236  std::vector<DtDynamicTerrainPublisher*> myIndividualSwitchPublishers;
237 
239  std::vector<DtDynamicTerrainPublisher*> myAreaPublishers;
240 
242  std::vector<DtDynamicTerrainPublisher*> myCraterPublishers;
243 
246 
248 
249  typedef tbb::spin_mutex Mutex;
251 
253  {
254  QueuedTerrainSwitch(const DtTerrainGeometry& g, const DtKeyValuePair& c, unsigned p, double d)
255  : geometry(g.clone()), change(c), priority(p), delay(d) {};
256 
258  {
259  delete geometry;
260  }
261 
264  unsigned priority;
265  double delay;
266  };
267  std::list<QueuedTerrainSwitch> myTerrainSwitchQueue;
268  std::list<DtSwitchDynamicTerrainAtPointCommand> myTerrainSwitchAtPointQueue;
269 
270 };
double myLastTickRealTime
Definition: dynamicTerrainController.h:247
std::list< QueuedTerrainSwitch > myTerrainSwitchQueue
Definition: dynamicTerrainController.h:267
Definition: dynamicTerrainController.h:252
#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:190
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:257
DtDynamicTerrainControllerPSR * myProcessState
Container for state data associated with this component.
Definition: dynamicTerrainController.h:233
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:264
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:250
DtIfDynamicTerrainInformationResponse response
Definition: dynamicTerrainController.h:191
PendingDynamicTerrainRequests myPendingDynamicTerrainRequests
Definition: dynamicTerrainController.h:244
tbb::spin_mutex Mutex
Definition: dynamicTerrainController.h:249
virtual void updateTaskVisualizations()
Called to update task visualizations after every tick.
Definition: simComponent.h:485
DtKeyValuePair change
Definition: dynamicTerrainController.h:263
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:23
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:236
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:188
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:242
std::vector< PendingDynamicTerrainInformationPtr > PendingDynamicTerrainRequests
Definition: dynamicTerrainController.h:196
This file provides a protocol independant include file for the class DtDynamicTerrainPublisher.
DtDynamicTerrainControllerDescriptor * myDynamicTerrainDescriptor
Definition: dynamicTerrainController.h:229
The DtSimComponent class is the base class for the entire simulation model component hierarchy...
Definition: simComponent.h:67
double nextCheckTime
Definition: dynamicTerrainController.h:192
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:262
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:265
The simulation engine is controlled by a single,top-level class called the Simulation Manager...
Definition: simManager.h:102
Interface content for requesting information on available dynamic terrain switches within the given r...
Definition: ifRequestDynamicTerrainInformation.h:19
double myDynamicTerrainRecheckPeriod
Definition: dynamicTerrainController.h:245
QueuedTerrainSwitch(const DtTerrainGeometry &g, const DtKeyValuePair &c, unsigned p, double d)
Definition: dynamicTerrainController.h:254
class DtRwVectorList:
Definition: rwVectorList.h:22
DtBoost::shared_ptr< PendingDynamicTerrainInformation > PendingDynamicTerrainInformationPtr
Definition: dynamicTerrainController.h:195
Definition: terrainGeometry.h:33
std::list< DtSwitchDynamicTerrainAtPointCommand > myTerrainSwitchAtPointQueue
Definition: dynamicTerrainController.h:268
std::vector< DtDynamicTerrainPublisher * > myAreaPublishers
Publishes the dynamic terrain changes for a whole area to the network.
Definition: dynamicTerrainController.h:239

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)