VR-Forces 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 
22 
26 class DtSimCommand;
33 class DtRwVectorList;
34 class DtKeyValuePairList;
36 
37 namespace makVrf
38 {
39  class DtDynamicTerrainStateComponent;
40 }
41 
42 namespace makVrv
43 {
44  class DtDynamicTerrainFeature;
45  class DtDynamicTerrainChanges;
46  class DtDynamicTerrainGeometry;
47 }
48 
54 {
55 private:
62 
63 public:
66  DtSimulationServices* simManager, DtComponentDescriptor* desc=nullptr, DtReaderWriterRegistry *parentRegistry=nullptr);
67 
69  virtual ~DtDynamicTerrainController();
70 
72  virtual bool init() override;
73 
75  virtual void registerCallbacks();
76 
78  virtual void deregisterCallbacks();
79 
81  virtual void preFirstTickInit() override;
82 
84  virtual const char* type() const override;
85 
87  virtual void tick() override;
88 
92  virtual bool processDynamicTerrainSwitch(const DtTerrainGeometry& geometry, const DtKeyValuePair& change,
93  unsigned priority, double delay = 0.0, bool shouldQueue = true);
94 
98  virtual void processDynamicTerrainArea(const DtTerrainGeometry& geometry, const DtKeyValuePairList& changes,
99  unsigned priority, double delay = 0.0);
100 
101  virtual void processDynamicTerrainCrater(const DtTerrainGeometry& geometry, const DtKeyValuePairList& changes,
102  unsigned priority, double delay = 0.0);
103 
107  virtual DtRwDynamicTerrainItem* findDynamicTerrainSwitch(const DtTerrainGeometry& geometry,
108  double tolerance, const DtString& key, unsigned* index = nullptr);
109 
111  static DtSimComponent* creator(const DtString& name, DtLocalObject* owner, DtSimulationServices* simManager,
112  DtComponentDescriptor* desc = nullptr, DtReaderWriterRegistry* parentRegistry = nullptr);
113 
114  virtual void updateTaskVisualizations() override;
115 
116  virtual void processQueuedTerrainChanges(double dt);
117 
120  virtual void setDynamicTerrainInformationRecheckPeriod(double);
122  {
123  return myDynamicTerrainRecheckPeriod;
124  }
126 
130  virtual std::list<DtVector> findDynamicTerrainElements(const DtVector& localLocation, double radius,
131  const DtString& filterKey = DtString::nullString(),
132  std::list<DtRwDynamicTerrainInformation>* fullInfo = 0,
133  bool* dataAvailable = 0);
134 
138  virtual std::list<DtVector> findDynamicTerrainElements(const DtVector& localStartLocation,
139  const DtVector& localEndLocation, const DtString& filterKey = DtString::nullString(),
140  std::list<DtRwDynamicTerrainInformation>* fullInfo = 0,
141  bool* dataAvailable = 0);
142 
144  virtual const DtDynamicTerrainControllerDescriptor* dynamicTerrainDescriptor();
145 
146 protected:
147 
150  virtual void updateSingleSwitch(const DtTerrainGeometry& geometry, const DtKeyValuePair& change,
151  unsigned priority);
152 
155  static void addDynamicTerrainChangesCallback(const DtSimCommand& cmd, void* usr);
156  virtual void processAddDynamicTerrainChangesCommand(const DtAddDynamicTerrainChangesCommand& cmd);
158 
161  static void switchDynamicTerrainCallback(const DtSimCommand& cmd, void* usr);
162 
164  virtual bool processSwitchDynamicTerrainCommand(const DtSwitchDynamicTerrainAtPointCommand& cmd, bool shouldQueue = true);
166 
169  static void resetDynamicTerrainChangesCallback(const DtSimCommand& cmd, void* usr);
170  virtual void processResetDynamicTerrainChangesCommand(const DtResetDynamicTerrainChangesCommand& cmd);
172 
175  static void resetAllDynamicTerrainChangesCallback(const DtSimCommand& cmd, void* usr);
176  virtual void processResetAllDynamicTerrainChangesCommand(const DtResetAllDynamicTerrainChangesCommand& cmd);
178 
180  virtual bool isRequestValidForArea(const DtIfRequestDynamicTerrainInformation& req);
181 
183  virtual bool isCommandValidForArea(const DtDynamicTerrainCommand& cmd);
184 
186  virtual bool isInCommandGeometry(const DtDynamicTerrainCommand& cmd, const DtTerrainGeometry& terrainGeometry);
187 
190  virtual bool isRedundantChange(const DtTerrainGeometry& geometry, const DtKeyValuePairList& changes, double tolerance) const;
191 
194  DtVector averageLocation(const DtRwVectorList& vectorList) const;
195  DtVector averageLocation(const DtWorldLocationStructArray& vectorList) const;
197 
200  static void dynamicTerrainInformationRequestCallback(DtSimMessage*, void* usr);
201  virtual void processDynamicTerrainInformationRequest(DtIfRequestDynamicTerrainInformation*);
203 
207  {
211  };
212 
213  using PendingDynamicTerrainInformationPtr = DtBoost::shared_ptr<PendingDynamicTerrainInformation>;
214  typedef std::vector<PendingDynamicTerrainInformationPtr> PendingDynamicTerrainRequests;
215 
218  virtual bool processPendingDynamicTerrainInformation(PendingDynamicTerrainInformationPtr&);
219 
222  static void drawDynamicTerrainCallback(DtSimMessage * msg, void * usr);
223  virtual void processDrawDynamicTerrainTask(DtSimMessage * msg);
225 
227  virtual DtDynamicTerrainControllerPSR* createPSR();
228 
230  virtual void addChangeToStateComponents(std::vector<makVrf::DtDynamicTerrainStateComponent*>& publishers,
231  const DtTerrainGeometryAndData& change);
232 
233 protected:
234 
236 
240 
242  std::vector<makVrf::DtDynamicTerrainStateComponent*> myIndividualSwitchPublishers;
243 
245  std::vector<makVrf::DtDynamicTerrainStateComponent*> myAreaPublishers;
246 
248  std::vector<makVrf::DtDynamicTerrainStateComponent*> myCraterPublishers;
249 
251  std::vector<makVrf::DtDynamicTerrainStateComponent*> myVehicleTrackPublishers;
252 
255 
257 
258  using Mutex = tbb::spin_mutex;
260 
262  {
263  QueuedTerrainSwitch(const DtTerrainGeometry& g, const DtKeyValuePair& c, unsigned p, double d)
264  : geometry(g.clone()), change(c), priority(p), delay(d) {};
265 
267  {
268  delete geometry;
269  }
270 
273  unsigned priority;
274  double delay;
275  };
276  std::list<QueuedTerrainSwitch> myTerrainSwitchQueue;
277  std::list<DtSwitchDynamicTerrainAtPointCommand> myTerrainSwitchAtPointQueue;
278  bool myEnabled;
279 };
double myLastTickRealTime
Definition: dynamicTerrainController.h:256
std::list< QueuedTerrainSwitch > myTerrainSwitchQueue
Definition: dynamicTerrainController.h:276
Definition: dynamicTerrainController.h:261
#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:208
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
virtual const char * type() const override=0
Returns a string identifies the class type of component. Type values are defined in compTypes...
~QueuedTerrainSwitch()
Definition: dynamicTerrainController.h:266
DtDynamicTerrainControllerPSR * myProcessState
Container for state data associated with this component. This state is saved and restored as part of ...
Definition: dynamicTerrainController.h:239
tbb::spin_mutex Mutex
Definition: dynamicTerrainController.h:258
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:22
bool myEnabled
Definition: dynamicTerrainController.h:278
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:273
const DtDynamicTerrainControllerDescriptor * myDynamicTerrainDescriptor
Definition: dynamicTerrainController.h:235
std::vector< makVrf::DtDynamicTerrainStateComponent * > myCraterPublishers
Publishes the dynamic terrain changes for a whole area to the network.
Definition: dynamicTerrainController.h:248
Definition: keyValuePair.h:18
Mutex myTerrainFeatureMutex
Definition: dynamicTerrainController.h:259
DtIfDynamicTerrainInformationResponse response
Definition: dynamicTerrainController.h:209
PendingDynamicTerrainRequests myPendingDynamicTerrainRequests
Definition: dynamicTerrainController.h:253
virtual void updateTaskVisualizations()
Called to update task visualizations after every tick. Implemented by subclasses. ...
Definition: simComponent.h:437
virtual bool init() override
Calls setRadio()
DtKeyValuePair change
Definition: dynamicTerrainController.h:272
DtDynamicTerrainMunitionDamageController is a controller that calculates and publishes terrain change...
Definition: dynamicTerrainController.h:53
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 ...
DtBoost::shared_ptr< PendingDynamicTerrainInformation > PendingDynamicTerrainInformationPtr
Definition: dynamicTerrainController.h:213
If there are dynamic terrain information requests pending, this stores the request and its current st...
Definition: dynamicTerrainController.h:206
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:214
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:95
The DtSimComponent class is the base class for the entire simulation model component hierarchy...
Definition: simComponent.h:91
std::vector< makVrf::DtDynamicTerrainStateComponent * > myIndividualSwitchPublishers
Publishes the dynamic terrain changes for individual switches to the network.
Definition: dynamicTerrainController.h:242
double nextCheckTime
Definition: dynamicTerrainController.h:210
virtual double dynamicTerrainInformationRecheckPeriod() const
The recheck period for checking dynamic terrain info requests. Default is 0.5 seconds.
Definition: dynamicTerrainController.h:121
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:245
DtTerrainGeometry * geometry
Definition: dynamicTerrainController.h:271
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:274
DT_DLL_vrfmodel void addChangeToStateComponents(std::vector< makVrf::DtDynamicTerrainStateComponent * > &stateComps, const DtTerrainGeometryAndData &change, int maxChangesPerPublisher, DtLocalObject *localObject)
Adds a new change geometry to the state component list. Creates a new state component if necessary...
Interface content for requesting information on available dynamic terrain switches within the given r...
Definition: ifRequestDynamicTerrainInformation.h:19
double myDynamicTerrainRecheckPeriod
Definition: dynamicTerrainController.h:254
QueuedTerrainSwitch(const DtTerrainGeometry &g, const DtKeyValuePair &c, unsigned p, double d)
Definition: dynamicTerrainController.h:263
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
std::vector< makVrf::DtDynamicTerrainStateComponent * > myVehicleTrackPublishers
Publishes the persistent vehicle track changes to the the network.
Definition: dynamicTerrainController.h:251
Definition: terrainGeometry.h:33
std::list< DtSwitchDynamicTerrainAtPointCommand > myTerrainSwitchAtPointQueue
Definition: dynamicTerrainController.h:277
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

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)