VR-Forces 4.5 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator 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 
18 #include <vl/detonationInteraction.h>
21 
25 class DtSimCommand;
30 class DtTerrainGeometry;
32 class DtKeyValuePair;
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 
86  virtual void processDynamicTerrainSwitch(const DtTerrainGeometry& geometry, const DtKeyValuePair& change,
87  unsigned priority, double delay = 0.0);
88 
92  virtual void processDynamicTerrainArea(const DtTerrainGeometry& geometry, const DtKeyValuePairList& changes,
93  unsigned priority, double delay = 0.0);
94 
98  virtual DtRwDynamicTerrainItem* findDynamicTerrainSwitch(const DtTerrainGeometry& geometry,
99  double tolerance, const DtString& key, unsigned* index = 0);
100 
102  static DtSimComponent* creator(const DtString& name, DtVrfObject* owner, DtSimManager* simManager,
103  DtComponentDescriptor* desc=0, DtReaderWriterRegistry* parentRegistry=0);
104 
105  virtual void updateTaskVisualizations();
106 
107  virtual void processQueuedTerrainChanges(double dt);
108 
111  virtual void setDynamicTerrainInformationRecheckPeriod(double);
112  virtual double dynamicTerrainInformationRecheckPeriod() const
113  {
114  return myDynamicTerrainRecheckPeriod;
115  }
117 
121  virtual std::list<DtVector> findDynamicTerrainElements(const DtVector& localLocation, double radius,
122  const DtString& filterKey = DtString::nullString(),
123  std::list<DtRwDynamicTerrainInformation>* fullInfo = 0);
124 
128  virtual std::list<DtVector> findDynamicTerrainElements(const DtVector& localStartLocation,
129  const DtVector& localEndLocation, const DtString& filterKey = DtString::nullString(),
130  std::list<DtRwDynamicTerrainInformation>* fullInfo = 0);
131 
132 protected:
133 
136  virtual void updateSingleSwitch(const DtTerrainGeometry& geometry, const DtKeyValuePair& change,
137  unsigned priority);
138 
141  static void addDynamicTerrainChangesCallback(const DtSimCommand& cmd, void* usr);
142  virtual void processAddDynamicTerrainChangesCommand(const DtAddDynamicTerrainChangesCommand& cmd);
144 
147  static void switchDynamicTerrainCallback(const DtSimCommand& cmd, void* usr);
148  virtual void processSwitchDynamicTerrainCommand(const DtSwitchDynamicTerrainAtPointCommand& cmd);
150 
153  static void resetDynamicTerrainChangesCallback(const DtSimCommand& cmd, void* usr);
154  virtual void processResetDynamicTerrainChangesCommand(const DtResetDynamicTerrainChangesCommand& cmd);
156 
158  virtual bool isRequestValidForArea(const DtIfRequestDynamicTerrainInformation& req);
159 
161  virtual bool isCommandValidForArea(const DtDynamicTerrainCommand& cmd);
162 
164  virtual bool isInCommandGeometry(const DtDynamicTerrainCommand& cmd, const DtTerrainGeometry& terrainGeometry);
165 
168  DtVector averageLocation(const DtRwVectorList& vectorList) const;
169  DtVector averageLocation(const DtWorldLocationStructArray& vectorList) const;
171 
174  static void dynamicTerrainInformationRequestCallback(DtSimMessage*, void* usr);
175  virtual void processDynamicTerrainInformationRequest(DtIfRequestDynamicTerrainInformation*);
177 
181  {
185  };
186 
187  typedef DtBoost::shared_ptr<PendingDynamicTerrainInformation> PendingDynamicTerrainInformationPtr;
188  typedef std::vector<PendingDynamicTerrainInformationPtr> PendingDynamicTerrainRequests;
189 
192  virtual bool processPendingDynamicTerrainInformation(PendingDynamicTerrainInformationPtr&);
193 
196  static void drawDynamicTerrainCallback(DtSimMessage * msg, void * usr);
197  virtual void processDrawDynamicTerrainTask(DtSimMessage * msg);
199 
201  virtual DtDynamicTerrainPublisher* createPublisher();
202 
204  virtual DtDynamicTerrainControllerPSR* createPSR();
205 
207  virtual void addPublishedChange(std::vector<DtDynamicTerrainPublisher*>& publishers,
208  const DtTerrainGeometryAndData& change);
209 
212  virtual void updatePublishedChange(std::vector<DtDynamicTerrainPublisher*>& publishers,
213  unsigned index, const DtKeyValuePairList& changeData, unsigned priority, unsigned eventNumber);
214 
216  virtual const DtTerrainGeometryAndData& publishedChange(const std::vector<DtDynamicTerrainPublisher*>& publishers, unsigned index) const;
217 
218 
219 protected:
220 
222 
226 
228  std::vector<DtDynamicTerrainPublisher*> myIndividualSwitchPublishers;
229 
231  std::vector<DtDynamicTerrainPublisher*> myAreaPublishers;
232 
235 
237 
238  typedef tbb::spin_mutex Mutex;
240 
241 };

Document ID: Generated on Thu Mar 23 18:54:12 EDT 2017 from SVN revision 174804
Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)