VR-Forces Development_Version Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
humanMovementActuator.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2015 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
16 #include <map>
17 
18 class DtInputPortGroup;
19 class DtAnalogInputPort;
22 class DtIntegerInputPort;
24 class DtAttachedTerrain;
25 class DtBooleanInputPort;
27 
36 {
37 private:
42 
43 public:
44 
45  typedef std::map<DtLifeformStaticPosture, DtLifeformState>
47 
48 public:
51  DtHumanMovementActuator(const DtString& name,
52  DtVrfObject* owner,
53  DtSimManager* simManager,
54  DtComponentDescriptor* desc = 0,
55  DtReaderWriterRegistry* parentRegistry = 0);
56 
58  virtual ~DtHumanMovementActuator();
59 
62  virtual bool init();
63 
66  virtual const char* type() const;
67 
68  virtual void preFirstTickInit();
69 
70  virtual void tick();
71 
75  static DtSimComponent * creator(const DtString& name,
76  DtVrfObject* owner,
77  DtSimManager* simManager,
78  DtComponentDescriptor* desc = 0,
79  DtReaderWriterRegistry* parentRegistry = 0);
80 
81 protected:
84  virtual double calculateMaxSpeed() const;
85 
86  virtual double maxSpeedSoilFactor() const;
87 
88  virtual DtVector calculateProjectedLocation(
89  const DtVector& oldLocalPosition, const DtVector& newBodyVelocity,
90  double newHeading);
91 
105  virtual void calculateOrientationAndPosition(
106  const DtVector& newLocalProjectedLocation, double newHeading, double newFacingOrientation,
107  DtDcm& newLocalOrientation, DtDcm& newLocalDirectionOfMovement, DtVector& newLocalPosition);
108 
111  virtual double stepUpFractionLimit() const;
112 
115  virtual double underWaterFraction() const;
116 
135 
141  virtual double altitudeForNoTerrainBelow(double projectedPointAlt,
142  DtVector projectedPoint,
143  double surfacePointAlt) const;
144 
153  virtual double altitudeForDropToSurface(double projectedPointAlt,
154  DtVector projectedPoint,
155  double surfacePointAlt) const;
156 
160  virtual double altitudeForNearbySurface(double projectedPointAlt,
161  DtVector projectedPoint,
162  double surfacePointAlt) const;
163 
175  virtual double altitudeForNoSurface(double projectedPointAlt,
176  DtVector projectedPoint) const;
177 
179 
180  virtual void updateRepository(const DtVector & position,
181  const DtVector & velocity, const DtVector & acceleration,
182  const DtTaitBryan & localOrientation, const DtVector& rotationalVelocity,
183  double newHeading);
184 
188  virtual void computeAndSetPosture();
189 
192  virtual DtLifeformState computeDynamicPosture(DtLifeformStaticPosture staticPosture);
193 
198  virtual DtLifeformStaticPosture restrictPostureForTerrain(DtLifeformStaticPosture desiredPosture);
199 
208  virtual bool checkForTerrainCollisions() const;
209 
214  virtual bool checkBlockedByTerrain(const DtVector& oldLocalPosition,
215  DtVector& newLocalProjectedLocation);
216 
222  virtual double maxUprightTerrainPitch() const;
223 
228  virtual double maxWalkingSpeed() const;
229 
231  virtual void initializeStaticToDynamicPostureMap();
232 
234  virtual bool computeEntityDirOfMovement(double& heading) const;
235 
238  virtual double calculateTerrainPitch(const DtVector& localPosition,
239  double heading,
240  const DtAttachedTerrain& terrain) const;
241 
243  virtual bool createPorts();
244 
246  virtual bool createPortGroups();
247 
259  virtual bool getSurfacesBelow(const DtVector& testPosition,
260  double underWaterLimit,
261  const DtAttachedTerrain* terrain,
262  DtChordIntersectRecordList& intList);
263 
267  virtual bool closestSurfaceAbove(const DtVector& testPosition,
268  const DtAttachedTerrain* terrain,
269  double &altitude, DtSurface &surface);
270 
274  virtual bool isWater(const DtSurface & surface);
275 
276  static void setHeadingCallback(DtSimMessage * msg, void * usr);
277  virtual void processSetHeading(DtSimMessage* msg);
278 
281  virtual void calculateOrientationAndPositionCrawling(
282  const DtVector& newLocalProjectedLocation, double newHeading, double newFacingOrientation,
283  DtDcm& newLocalOrientation, DtDcm& newLocalDirectionOfMovement, DtVector& newLocalPosition);
284 
285  virtual void groundClamp(double heading,
286  const DtVector& location, DtAttachedTerrain& terrainDatabase, DtVector& newNormal);
287 
288  virtual void calculateDirectionOfLinearMotion(
289  const DtDcm& newLocalOrientation, double desiredDirectionOfMovement, const DtVector& newLocalPosition,
290  DtDcm& newLocalDirectionOfLinearMotion);
291 
297  virtual bool closestIntersectionWithBias( const DtVector& localPosition, DtChordIntersectionRecord& record,
298  DtIntersectionRecord::DtIntersectionType irtFlag, double bias,
299  const DtAttachedTerrain* terrain );
300 
301  virtual void groundClampLowFidelity(double heading,
302  const DtVector& location, DtAttachedTerrain& terrain, DtVector& newNormal, bool& dataAvailable);
303 
305 
306 protected:
309 
317 
327 
334 
339 
348 
354 
358  mutable double myMutablePitch;
359  mutable bool myMutablePitchValid;
360 
362 
364 
366 
368 
371 
375 
378 };
379 

Document ID: Generated on Tue Mar 8 22:13:38 EST 2016 from SVN revision 162938
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)