VR-Forces 4.6 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 
99  virtual DtRwDynamicTerrainItem* findDynamicTerrainSwitch(const DtTerrainGeometry& geometry,
100  double tolerance, const DtString& key, unsigned* index = 0);
101 
103  static DtSimComponent* creator(const DtString& name, DtVrfObject* owner, DtSimManager* simManager,
104  DtComponentDescriptor* desc=0, DtReaderWriterRegistry* parentRegistry=0);
105 
106  virtual void updateTaskVisualizations();
107 
108  virtual void processQueuedTerrainChanges(double dt);
109 
112  virtual void setDynamicTerrainInformationRecheckPeriod(double);
113  virtual double dynamicTerrainInformationRecheckPeriod() const
114  {
115  return myDynamicTerrainRecheckPeriod;
116  }
118 
122  virtual std::list<DtVector> findDynamicTerrainElements(const DtVector& localLocation, double radius,
123  const DtString& filterKey = DtString::nullString(),
124  std::list<DtRwDynamicTerrainInformation>* fullInfo = 0,
125  bool* dataAvailable = 0);
126 
130  virtual std::list<DtVector> findDynamicTerrainElements(const DtVector& localStartLocation,
131  const DtVector& localEndLocation, const DtString& filterKey = DtString::nullString(),
132  std::list<DtRwDynamicTerrainInformation>* fullInfo = 0,
133  bool* dataAvailable = 0);
134 
135 protected:
136 
139  virtual void updateSingleSwitch(const DtTerrainGeometry& geometry, const DtKeyValuePair& change,
140  unsigned priority);
141 
144  static void addDynamicTerrainChangesCallback(const DtSimCommand& cmd, void* usr);
145  virtual void processAddDynamicTerrainChangesCommand(const DtAddDynamicTerrainChangesCommand& cmd);
147 
150  static void switchDynamicTerrainCallback(const DtSimCommand& cmd, void* usr);
151 
153  virtual bool processSwitchDynamicTerrainCommand(const DtSwitchDynamicTerrainAtPointCommand& cmd, bool shouldQueue = true);
155 
158  static void resetDynamicTerrainChangesCallback(const DtSimCommand& cmd, void* usr);
159  virtual void processResetDynamicTerrainChangesCommand(const DtResetDynamicTerrainChangesCommand& cmd);
161 
163  virtual bool isRequestValidForArea(const DtIfRequestDynamicTerrainInformation& req);
164 
166  virtual bool isCommandValidForArea(const DtDynamicTerrainCommand& cmd);
167 
169  virtual bool isInCommandGeometry(const DtDynamicTerrainCommand& cmd, const DtTerrainGeometry& terrainGeometry);
170 
173  DtVector averageLocation(const DtRwVectorList& vectorList) const;
174  DtVector averageLocation(const DtWorldLocationStructArray& vectorList) const;
176 
179  static void dynamicTerrainInformationRequestCallback(DtSimMessage*, void* usr);
180  virtual void processDynamicTerrainInformationRequest(DtIfRequestDynamicTerrainInformation*);
182 
186  {
190  };
191 
192  typedef DtBoost::shared_ptr<PendingDynamicTerrainInformation> PendingDynamicTerrainInformationPtr;
193  typedef std::vector<PendingDynamicTerrainInformationPtr> PendingDynamicTerrainRequests;
194 
197  virtual bool processPendingDynamicTerrainInformation(PendingDynamicTerrainInformationPtr&);
198 
201  static void drawDynamicTerrainCallback(DtSimMessage * msg, void * usr);
202  virtual void processDrawDynamicTerrainTask(DtSimMessage * msg);
204 
206  virtual DtDynamicTerrainPublisher* createPublisher();
207 
209  virtual DtDynamicTerrainControllerPSR* createPSR();
210 
212  virtual void addPublishedChange(std::vector<DtDynamicTerrainPublisher*>& publishers,
213  const DtTerrainGeometryAndData& change);
214 
217  virtual void updatePublishedChange(std::vector<DtDynamicTerrainPublisher*>& publishers,
218  unsigned index, const DtKeyValuePairList& changeData, unsigned priority, unsigned eventNumber);
219 
221  virtual const DtTerrainGeometryAndData& publishedChange(const std::vector<DtDynamicTerrainPublisher*>& publishers, unsigned index) const;
222 
223 
224 protected:
225 
227 
231 
233  std::vector<DtDynamicTerrainPublisher*> myIndividualSwitchPublishers;
234 
236  std::vector<DtDynamicTerrainPublisher*> myAreaPublishers;
237 
240 
242 
243  typedef tbb::spin_mutex Mutex;
245 
247  {
248  QueuedTerrainSwitch(const DtTerrainGeometry& g, const DtKeyValuePair& c, unsigned p, double d)
249  : geometry(g.clone()), change(c), priority(p), delay(d) {};
250 
252  {
253  delete geometry;
254  }
255 
258  unsigned priority;
259  double delay;
260  };
261  std::list<QueuedTerrainSwitch> myTerrainSwitchQueue;
262  std::list<DtSwitchDynamicTerrainAtPointCommand> myTerrainSwitchAtPointQueue;
263 
264 };

Document ID: Generated on Thu Apr 12 03:15:37 EDT 2018 from SVN revision 187986
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)