VR-Forces 4.10 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;
30 
39 {
40 private:
45 
46 public:
47 
48  typedef std::map<DtLifeformStaticPosture, DtLifeformState>
50 
51 public:
54  DtHumanMovementActuator(const DtString& name,
55  DtVrfObject* owner,
56  DtSimManager* simManager,
57  DtComponentDescriptor* desc = 0,
58  DtReaderWriterRegistry* parentRegistry = 0);
59 
61  virtual ~DtHumanMovementActuator();
62 
65  virtual bool init();
66 
69  virtual const char* type() const;
70 
72  virtual bool createPSR();
73 
74  virtual void preFirstTickInit();
75 
76  virtual void tick();
77 
81  static DtSimComponent * creator(const DtString& name,
82  DtVrfObject* owner,
83  DtSimManager* simManager,
84  DtComponentDescriptor* desc = 0,
85  DtReaderWriterRegistry* parentRegistry = 0);
86 
87 protected:
90  virtual double calculateMaxSpeed() const;
91 
96  virtual double maxSpeedFromFacingError(const double desiredHeading,
97  const double currentHeading) const;
98 
99  virtual double maxSpeedSoilFactor() const;
100 
101  virtual DtVector calculateProjectedLocation(
102  const DtVector& oldLocalPosition, const DtVector& newBodyVelocity,
103  double newHeading, double dt = -1);
104 
124  virtual void calculateOrientationAndPosition(
125  const DtVector& newLocalProjectedLocation, double newHeading, double newFacingOrientation,
126  DtDcm& newLocalOrientation, DtDcm& newLocalDirectionOfMovement, DtVector& newLocalPosition);
127 
154  virtual void identifySupportSurfaceAndAltitude(
155  const DtVector& testPosition,
156  const double altOfTestPosition,
157  const DtVector& stepUpVector,
158  const double bodyHeight,
159  DtSurface& interactionSurface,
160  double& adjustedAltitude);
161 
164  virtual double stepUpFractionLimit() const;
165 
168  virtual double underWaterFraction() const;
169 
175  virtual double dropSpeed() const;
176 
185 
197  virtual double altitudeForNoTerrainBelow(double projectedPointAlt,
198  DtVector projectedPoint,
199  double surfacePointAlt) const;
200 
215  virtual double altitudeForDropToSurface(double projectedPointAlt,
216  DtVector projectedPoint,
217  double surfacePointAlt) const;
218 
228  virtual double altitudeForNearbySurface(double projectedPointAlt,
229  DtVector projectedPoint,
230  double surfacePointAlt) const;
231 
243  virtual double altitudeForNoSurface(double projectedPointAlt,
244  DtVector projectedPoint) const;
245 
247 
248  virtual void updateRepository(const DtVector & position,
249  const DtVector & velocity, const DtVector & acceleration,
250  const DtTaitBryan & localOrientation, const DtVector& rotationalVelocity,
251  double newHeading);
252 
256  virtual void computeAndSetPosture();
257 
260  virtual DtLifeformState computeDynamicPosture(DtLifeformStaticPosture staticPosture);
261 
266  virtual DtLifeformStaticPosture restrictPostureForTerrain(DtLifeformStaticPosture desiredPosture);
267 
276  virtual bool checkForTerrainCollisions() const;
277 
280  virtual bool checkForEntityCollisions() const;
281 
289  virtual bool checkBlockedByTerrain(const DtVector& oldLocalPosition,
290  DtVector& newLocalProjectedLocation, double heightFraction = -1.0);
291 
292  virtual bool checkBlockedByEntities(const DtVector& oldLocalPosition,
293  DtVector& newLocalProjectedLocation);
294 
299  virtual DtChord movementChord(const DtVector& oldLocalPosition, const DtVector& newLocalProjectedLocation,
300  DtVector& intersectionVec, DtVector& bvCenterStartFromOldPos);
301 
304  virtual DtChord movementChordAtHeight(const DtVector& oldLocalPosition, const DtVector& newLocalProjectedLocation,
305  double heightFraction, DtVector& intersectionVec, DtVector& offsetFromOldPosition);
306 
312  virtual double maxUprightTerrainPitch() const;
313 
318  virtual double maxWalkingSpeed() const;
319 
321  virtual void initializeStaticToDynamicPostureMap();
322 
324  virtual bool computeEntityDirOfMovement(double& heading) const;
325 
328  virtual double calculateTerrainPitch(const DtVector& localPosition,
329  double heading,
330  const DtAttachedTerrain& terrain) const;
331 
333  virtual bool createPorts();
334 
336  virtual bool createPortGroups();
337 
351  virtual bool getSurfacesBelow(const DtVector& testPosition,
352  double underWaterLimit,
353  const DtAttachedTerrain* terrain,
355  bool& dataAvailable);
356 
360  virtual bool closestSurfaceAbove(const DtVector& testPosition,
361  const DtAttachedTerrain* terrain,
362  double &altitude, DtSurface &surface);
363 
367  virtual bool isWater(const DtSurface & surface);
368 
369  static void setHeadingCallback(DtSimMessage * msg, void * usr);
370  virtual void processSetHeading(DtSimMessage* msg);
371 
372  static void setGroundClampFidelityCallback(DtSimMessage * msg, void * usr);
373  virtual void processGroundClampFidelity(DtSimMessage* msg);
374 
376  virtual bool checkAndDisembarkIfEmbarked(const DtVector& localPosition);
377 
380  virtual bool checkIfMoveOntoEmbarked(const DtVector& localPosition);
381 
382  virtual bool initializeAglPort();
383 
384  virtual void setTerrainUpdateFlagsBasedonDataAvailable(bool dataAvailable);
385 
387 
390  virtual void calculateOrientationAndPositionCrawling(
391  const DtVector& newLocalProjectedLocation, double newHeading, double newFacingOrientation,
392  DtDcm& newLocalOrientation, DtDcm& newLocalDirectionOfMovement, DtVector& newLocalPosition);
393 
394  virtual void groundClamp(double heading,
395  const DtVector& location, DtAttachedTerrain& terrainDatabase, DtVector& newNormal);
396 
397  virtual void calculateDirectionOfLinearMotion(
398  const DtDcm& newLocalOrientation, double desiredDirectionOfMovement, const DtVector& newLocalPosition,
399  DtDcm& newLocalDirectionOfLinearMotion);
400 
401  virtual bool closestIntersectionWithBias(const DtVector& localPosition, DtVrfChordIntersectionRecord& record,
402  DtIntersectionRecord::DtIntersectionType irtFlag, double bias,
403  const DtAttachedTerrain* terrain);
405 
406 
410  static void terainChangeNotification(const DtExtent& spatExtent, void* usr);
411 
416  void processTerrainChangeNotification(const DtExtent& spatExtent);
417 
419 
420 protected:
423 
431 
441 
448 
453 
461 
469 
476 
483 
484 
491 
497 
501 
505  mutable double myMutablePitch;
506  mutable bool myMutablePitchValid;
507 
509 
511 
513 
515 
518 
522 
525 
527 
530 
532 
533 
536 
539 
544 };
545 
UUID is a unique ID wrapper class.
Definition: rwUUID.h:222
#define DT_DLL_vrfmodel
This file is used to determine how to build.
Definition: vrfmodelDefines.h:24
NOTE: This entire class is deprecated, in favor of Dt3dChord.
Definition: chord.h:40
DtVrfMovingObjectStateRepository * myMovingObjectStateRepository
Convenience pointers to our state repository.
Definition: humanMovementActuator.h:494
DtStaticToDynamicPostureMap myStaticToDynamicPostureMap
Definition: humanMovementActuator.h:510
Definition: attachedTerrain.h:42
DtVrfChordIntersectionRecord represents a list of DtChordIntersectRecords.
Definition: vrfChordIntersectRecordList.h:31
DtVrfObject is used to represent any type of simulated object (entities, aggregate, control objects) in a VR-Forces application.
Definition: vrfObject.h:215
Description: This repository holds all information that is common to all the forms of all objects wit...
Definition: vrfMovingObjectStateRepository.h:29
DtVector myPreviousDestination
Definition: humanMovementActuator.h:531
const DtActuatorComponent & operator=(const DtActuatorComponent &orig)
assignment operator
Description: This repository holds all information that is common to all the forms of humans within t...
Definition: humanStateRepository.h:32
virtual void preFirstTickInit()
This function can be overridden to initialize a component before it is ticked for the first time...
virtual bool init()
Overridden to cache a pointer to the entity&#39;s radio in this class.
DtHumanMovementActuatorPSR * myProcessState
Pointer to a process state repository used to store state data associated with this component...
Definition: humanMovementActuator.h:500
A readable, writable type whose name is the name of a component and that has a list of component name...
Definition: componentDescriptor.h:42
DtVectorInputPort * myDestinationInputPort
Input Port Name: destination Input Port Description: Specifies the current destination of the entity ...
Definition: humanMovementActuator.h:468
Definition: readerWriterRegistry.h:39
The DtExtent represents an axis-aligned 3d bounding box.
Definition: extent.h:43
Definition: surface.h:179
Contains class declarations for DtIntegerInputPort, DtIntegerOutputPort, and DtIntegerPortData.
Definition: integerIOPort.h:25
End User Description: DtActuator is the base class for all actuator model components.
Definition: actuatorComponent.h:48
bool myWasOnGround
These states are used for controlling debug print statements.
Definition: humanMovementActuator.h:517
DtBooleanInputPort * myPostureChangingPort
Input Port Name: posture-changing Input Port Description: Will be used to halt movement if set...
Definition: humanMovementActuator.h:475
Contains class declarations for DtVectorInputPort, DtVectorOutputPort, and DtVectorPortData.
Definition: vectorIOPort.h:27
DtHumanMovementActuatorDescriptor; descriptor for the DtHumanMovementActuatorDescriptor component...
Definition: humanMovementActuatorDescriptor.h:26
bool myPreviouslyEmbarked
Definition: humanMovementActuator.h:514
Instances of DtAnalogOutputPort are input ports through which data producers can send real numbers...
Definition: analogIOPort.h:45
DtUpdateRepositoryOutputPortGroup * myUpdateRepositoryOutputPortGroup
Port group used to set what values should be set into the VRF state repository.
Definition: humanMovementActuator.h:521
DtLifeformStaticPosture
These are the available static postures for lifeform (human) entities.
Definition: lifeformStaticPostures.h:22
DtHumanMovementActuator is a simple movement actuator for lifeforms.
Definition: humanMovementActuator.h:38
bool myAglPortInitialized
Definition: humanMovementActuator.h:528
File: simMsg.h.
Definition: simMessage.h:35
Contains the DtLifeformStaticPosture enumeration declaration.
double myPostureSpeed
Definition: humanMovementActuator.h:535
DtVector myCachedPosition
Definition: humanMovementActuator.h:529
virtual void tick()
This gives the thread of control to the component.
double myMutablePitch
This value is the pitch of the terrain under the entity.
Definition: humanMovementActuator.h:505
Contains class declarations for DtBooleanInputPort, DtBooleanOutputPort, and DtBooleanPortData.
Definition: boolIOPort.h:25
DtAnalogInputPort * myFacingDirectionInputPort
Input Port Name: desired-facing-direction Input Port Description: Desired facing direction of the ent...
Definition: humanMovementActuator.h:440
DtIntegerInputPort * myDesiredStaticPostureInputPort
Input Port Name: desired-static-posture Input Port Description: The desired posture of the entity...
Definition: humanMovementActuator.h:460
DtVector myLastParentPosition
Definition: humanMovementActuator.h:508
virtual bool createPorts()
Called by init.
DtInputPortGroup * myMovementControlInputPortGroup
Input Port Group Name: movement-control Input Port Group Description: Collection of inputs specifying...
Definition: humanMovementActuator.h:452
DtAnalogInputPort * mySpeedInputPort
Input Port Name: desired-speed Input Port Description: Desired speed of the entity in m/s...
Definition: humanMovementActuator.h:447
double myDesiredFacingDirection
Definition: humanMovementActuator.h:523
DtAnalogOutputPort * myAltitudeAglOutputPort
Output Port Name: altitude-agl Output Port Description: Altitude above ground level.
Definition: humanMovementActuator.h:489
virtual bool createPortGroups()
Called by init.
The DtSimComponent class is the base class for the entire simulation model component hierarchy...
Definition: simComponent.h:67
Definition: vrfChordIntersectionRecord.h:19
DtAnalogInputPort * myMovementDirectionInputPort
Input Port Name: desired-movement-direction Input Port Description: Desired movement direction of the...
Definition: humanMovementActuator.h:430
bool myPostureChanging
Definition: humanMovementActuator.h:534
DtInputPortGroup is a data port group of a data consumer.
Definition: inputPortGroup.h:32
Contains class declarations for DtAnalogInputPort, DtAnalogOutputPort, and DtAnalogPortData.
Definition: analogIOPort.h:25
bool myDataUnavailableOnTerrainUpdate
A flag to indicate that data was not available when querying terrain during a terrain update so that ...
Definition: humanMovementActuator.h:543
DtHumanStateRepository * myHumanStateRepository
Definition: humanMovementActuator.h:495
The simulation engine is controlled by a single,top-level class called the Simulation Manager...
Definition: simManager.h:103
Definition: humanMovementActuatorPSR.h:20
std::map< DtLifeformStaticPosture, DtLifeformState > DtStaticToDynamicPostureMap
Definition: humanMovementActuator.h:49
DtUpdateRepositoryOutputPortGroup is a data port group of a data consumer that contains methods and p...
Definition: updateRepositoryOutputPortGroup.h:28
bool myMutablePitchValid
Definition: humanMovementActuator.h:506
bool myUseDesiredFacingDirectionValue
Definition: humanMovementActuator.h:524
bool myTerrainUpdateTriggeredFlag
A flag that is set if the terrain has been altered.
Definition: humanMovementActuator.h:538
DtUUID myWasJustEmbarkedOn
Definition: humanMovementActuator.h:526
virtual const char * type() const =0
Returns a string identifies the class type of component.
DtIntersectionType
Definition: intersectionRecord.h:41
const DtHumanMovementActuatorDescriptor * myHumanMovementActuatorDescriptor
Definition: humanMovementActuator.h:512
DtIntegerInputPort * myOverrideGroundClampFidelityPort
Input Port Name: override-ground-clamp-fidelity Input Port Description: Indicates whether or not the ...
Definition: humanMovementActuator.h:482

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)