VR-Forces 4.7 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties 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 class DtAnalogOutputPort;
28 class DtVectorInputPort;
29 
38 {
39 private:
44 
45 public:
46 
47  typedef std::map<DtLifeformStaticPosture, DtLifeformState>
49 
50 public:
53  DtHumanMovementActuator(const DtString& name,
54  DtVrfObject* owner,
55  DtSimManager* simManager,
56  DtComponentDescriptor* desc = 0,
57  DtReaderWriterRegistry* parentRegistry = 0);
58 
60  virtual ~DtHumanMovementActuator();
61 
64  virtual bool init();
65 
68  virtual const char* type() const;
69 
70  virtual void preFirstTickInit();
71 
72  virtual void tick();
73 
77  static DtSimComponent * creator(const DtString& name,
78  DtVrfObject* owner,
79  DtSimManager* simManager,
80  DtComponentDescriptor* desc = 0,
81  DtReaderWriterRegistry* parentRegistry = 0);
82 
83 protected:
86  virtual double calculateMaxSpeed() const;
87 
88  virtual double maxSpeedSoilFactor() const;
89 
90  virtual DtVector calculateProjectedLocation(
91  const DtVector& oldLocalPosition, const DtVector& newBodyVelocity,
92  double newHeading, double dt = -1);
93 
113  virtual void calculateOrientationAndPosition(
114  const DtVector& newLocalProjectedLocation, double newHeading, double newFacingOrientation,
115  DtDcm& newLocalOrientation, DtDcm& newLocalDirectionOfMovement, DtVector& newLocalPosition);
116 
143  virtual void identifySupportSurfaceAndAltitude(
144  const DtVector& testPosition,
145  const double altOfTestPosition,
146  const DtVector& stepUpVector,
147  const double bodyHeight,
148  DtSurface& interactionSurface,
149  double& adjustedAltitude);
150 
153  virtual double stepUpFractionLimit() const;
154 
157  virtual double underWaterFraction() const;
158 
164  virtual double dropSpeed() const;
165 
174 
186  virtual double altitudeForNoTerrainBelow(double projectedPointAlt,
187  DtVector projectedPoint,
188  double surfacePointAlt) const;
189 
204  virtual double altitudeForDropToSurface(double projectedPointAlt,
205  DtVector projectedPoint,
206  double surfacePointAlt) const;
207 
217  virtual double altitudeForNearbySurface(double projectedPointAlt,
218  DtVector projectedPoint,
219  double surfacePointAlt) const;
220 
232  virtual double altitudeForNoSurface(double projectedPointAlt,
233  DtVector projectedPoint) const;
234 
236 
237  virtual void updateRepository(const DtVector & position,
238  const DtVector & velocity, const DtVector & acceleration,
239  const DtTaitBryan & localOrientation, const DtVector& rotationalVelocity,
240  double newHeading);
241 
245  virtual void computeAndSetPosture();
246 
249  virtual DtLifeformState computeDynamicPosture(DtLifeformStaticPosture staticPosture);
250 
255  virtual DtLifeformStaticPosture restrictPostureForTerrain(DtLifeformStaticPosture desiredPosture);
256 
265  virtual bool checkForTerrainCollisions() const;
266 
269  virtual bool checkForEntityCollisions() const;
270 
278  virtual bool checkBlockedByTerrain(const DtVector& oldLocalPosition,
279  DtVector& newLocalProjectedLocation, double heightFraction = -1.0);
280 
281  virtual bool checkBlockedByEntities(const DtVector& oldLocalPosition,
282  DtVector& newLocalProjectedLocation);
283 
288  virtual DtChord movementChord(const DtVector& oldLocalPosition, const DtVector& newLocalProjectedLocation,
289  DtVector& intersectionVec, DtVector& bvCenterStartFromOldPos);
290 
293  virtual DtChord movementChordAtHeight(const DtVector& oldLocalPosition, const DtVector& newLocalProjectedLocation,
294  double heightFraction, DtVector& intersectionVec, DtVector& offsetFromOldPosition);
295 
301  virtual double maxUprightTerrainPitch() const;
302 
307  virtual double maxWalkingSpeed() const;
308 
310  virtual void initializeStaticToDynamicPostureMap();
311 
313  virtual bool computeEntityDirOfMovement(double& heading) const;
314 
317  virtual double calculateTerrainPitch(const DtVector& localPosition,
318  double heading,
319  const DtAttachedTerrain& terrain) const;
320 
322  virtual bool createPorts();
323 
325  virtual bool createPortGroups();
326 
340  virtual bool getSurfacesBelow(const DtVector& testPosition,
341  double underWaterLimit,
342  const DtAttachedTerrain* terrain,
344  bool& dataAvailable);
345 
349  virtual bool closestSurfaceAbove(const DtVector& testPosition,
350  const DtAttachedTerrain* terrain,
351  double &altitude, DtSurface &surface);
352 
356  virtual bool isWater(const DtSurface & surface);
357 
358  static void setHeadingCallback(DtSimMessage * msg, void * usr);
359  virtual void processSetHeading(DtSimMessage* msg);
360 
362  virtual bool checkAndDisembarkIfEmbarked(const DtVector& localPosition);
363 
366  virtual bool checkIfMoveOntoEmbarked(const DtVector& localPosition);
367 
368  virtual bool initializeAglPort();
369 
371 
374  virtual void calculateOrientationAndPositionCrawling(
375  const DtVector& newLocalProjectedLocation, double newHeading, double newFacingOrientation,
376  DtDcm& newLocalOrientation, DtDcm& newLocalDirectionOfMovement, DtVector& newLocalPosition);
377 
378  virtual void groundClamp(double heading,
379  const DtVector& location, DtAttachedTerrain& terrainDatabase, DtVector& newNormal);
380 
381  virtual void calculateDirectionOfLinearMotion(
382  const DtDcm& newLocalOrientation, double desiredDirectionOfMovement, const DtVector& newLocalPosition,
383  DtDcm& newLocalDirectionOfLinearMotion);
384 
385  virtual bool closestIntersectionWithBias(const DtVector& localPosition, DtVrfChordIntersectionRecord& record,
386  DtIntersectionRecord::DtIntersectionType irtFlag, double bias,
387  const DtAttachedTerrain* terrain);
388 
389  virtual void groundClampLowFidelity(double heading,
390  const DtVector& location, DtAttachedTerrain& terrain, DtVector& newNormal, bool& dataAvailable);
392 
394 
395 protected:
398 
406 
416 
423 
428 
436 
444 
451 
457 
461  mutable double myMutablePitch;
462  mutable bool myMutablePitchValid;
463 
465 
467 
469 
471 
474 
478 
481 
483 
486 
488 };
489 

Document ID: Generated on Fri Apr 26 21:53:14 EDT 2019 from SVN revision 197883
Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)