VR-Forces 5.0.3 Developer's Guide
 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 
17 #include <map>
18 
19 class DtInputPortGroup;
20 class DtAnalogInputPort;
23 class DtIntegerInputPort;
25 class DtAttachedTerrain;
26 class DtBooleanInputPort;
28 class DtAnalogOutputPort;
29 class DtVectorInputPort;
33 
42 {
43 private:
48 
49 public:
50 
51  typedef std::map<DtLifeformStaticPosture, DtLifeformState>
53 
54 public:
57  DtHumanMovementActuator(const DtString& name,
58  DtLocalObject* owner,
59  DtSimulationServices* simManager,
60  DtComponentDescriptor* desc = 0,
61  DtReaderWriterRegistry* parentRegistry = 0);
62 
64  virtual ~DtHumanMovementActuator();
65 
68  virtual bool init();
69 
72  virtual const char* type() const;
73 
75  virtual bool createPSR();
76 
77  virtual void preFirstTickInit();
78 
79  virtual void tick();
80 
84  static DtSimComponent * creator(const DtString& name,
85  DtLocalObject* owner,
86  DtSimulationServices* simManager,
87  DtComponentDescriptor* desc = 0,
88  DtReaderWriterRegistry* parentRegistry = 0);
89 
90 protected:
93  virtual double calculateMaxSpeed();
94 
99  virtual double maxSpeedFromFacingError(const double desiredHeading,
100  const double currentHeading) const;
101 
102  virtual double maxSpeedSoilFactor() const;
103 
104  virtual DtVector calculateProjectedLocation(
105  const DtVector& oldLocalPosition, const DtVector& newBodyVelocity,
106  double newHeading, double dt = -1);
107 
127  virtual void calculateOrientationAndPosition(
128  const DtVector& newLocalProjectedLocation, double newHeading, double newFacingOrientation,
129  DtDcm& newLocalOrientation, DtDcm& newLocalDirectionOfMovement, DtVector& newLocalPosition);
130 
157  virtual void identifySupportSurfaceAndAltitude(
158  const DtVector& testPosition,
159  const double altOfTestPosition,
160  const DtVector& stepUpVector,
161  const double bodyHeight,
162  DtSurface& interactionSurface,
163  double& adjustedAltitude);
164 
167  virtual double stepUpFractionLimit() const;
168 
171  virtual double underWaterFraction() const;
172 
178  virtual double dropSpeed() const;
179 
188 
200  virtual double altitudeForNoTerrainBelow(double projectedPointAlt,
201  DtVector projectedPoint,
202  double surfacePointAlt) const;
203 
218  virtual double altitudeForDropToSurface(double projectedPointAlt,
219  DtVector projectedPoint,
220  double surfacePointAlt) const;
221 
231  virtual double altitudeForNearbySurface(double projectedPointAlt,
232  DtVector projectedPoint,
233  double surfacePointAlt) const;
234 
246  virtual double altitudeForNoSurface(double projectedPointAlt,
247  DtVector projectedPoint) const;
248 
250 
251  virtual void updateRepository(const DtVector & position,
252  const DtVector & velocity, const DtVector & acceleration,
253  const DtTaitBryan & localOrientation, const DtVector& rotationalVelocity,
254  double newHeading);
255 
259  virtual void computeAndSetPosture();
260 
263  virtual DtLifeformState computeDynamicPosture(DtLifeformStaticPosture staticPosture);
264 
269  virtual DtLifeformStaticPosture restrictPostureForTerrain(DtLifeformStaticPosture desiredPosture);
270 
279  virtual bool checkForTerrainCollisions() const;
280 
283  virtual bool checkForEntityCollisions() const;
284 
292  virtual bool checkBlockedByTerrain(const DtVector& oldLocalPosition,
293  DtVector& newLocalProjectedLocation, double heightFraction = -1.0);
294 
295  virtual bool checkBlockedByEntities(const DtVector& oldLocalPosition,
296  DtVector& newLocalProjectedLocation);
297 
302  virtual DtChord movementChord(const DtVector& oldLocalPosition, const DtVector& newLocalProjectedLocation,
303  DtVector& intersectionVec, DtVector& bvCenterStartFromOldPos);
304 
307  virtual DtChord movementChordAtHeight(const DtVector& oldLocalPosition, const DtVector& newLocalProjectedLocation,
308  double heightFraction, DtVector& intersectionVec, DtVector& offsetFromOldPosition);
309 
315  virtual double maxUprightTerrainPitch() const;
316 
321  virtual double maxWalkingSpeed() const;
322 
324  virtual void initializeStaticToDynamicPostureMap();
325 
327  virtual bool computeEntityDirOfMovement(double& heading) const;
328 
331  virtual double calculateTerrainPitch(const DtVector& localPosition,
332  double heading, const DtAttachedTerrain& terrain);
333 
335  virtual bool createPorts();
336 
338  virtual bool createPortGroups();
339 
353  virtual bool getSurfacesBelow(const DtVector& testPosition,
354  double underWaterLimit,
355  const DtAttachedTerrain* terrain,
357  bool& dataAvailable);
358 
362  virtual bool closestSurfaceAbove(const DtVector& testPosition,
363  const DtAttachedTerrain* terrain,
364  double &altitude, DtSurface &surface);
365 
369  virtual bool isWater(const DtSurface & surface);
370 
371  static void setHeadingCallback(DtSimMessage * msg, void * usr);
372  virtual void processSetHeading(DtSimMessage* msg);
373 
374  static void setGroundClampFidelityCallback(DtSimMessage * msg, void * usr);
375  virtual void processGroundClampFidelity(DtSimMessage* msg);
376 
378  virtual bool checkAndDisembarkIfEmbarked(const DtVector& localPosition);
379 
382  virtual bool checkIfMoveOntoEmbarked(const DtVector& localPosition);
383 
384  virtual bool initializeAglPort();
385 
386  virtual void setTerrainUpdateFlagsBasedonDataAvailable(bool dataAvailable);
387 
389 
392  virtual void calculateOrientationAndPositionCrawling(
393  const DtVector& newLocalProjectedLocation, double newHeading, double newFacingOrientation,
394  DtDcm& newLocalOrientation, DtDcm& newLocalDirectionOfMovement, DtVector& newLocalPosition);
395 
396  virtual void groundClamp(double heading,
397  const DtVector& location, DtAttachedTerrain& terrainDatabase, DtVector& newNormal);
398 
399  virtual void calculateDirectionOfLinearMotion(
400  const DtDcm& newLocalOrientation, double desiredDirectionOfMovement, const DtVector& newLocalPosition,
401  DtDcm& newLocalDirectionOfLinearMotion);
402 
403  virtual bool closestIntersectionWithBias(const DtVector& localPosition, DtVrfChordIntersectionRecord& record,
404  DtIntersectionRecord::DtIntersectionType irtFlag, double bias,
405  const DtAttachedTerrain* terrain);
407 
408 
412  static void terainChangeNotification(const DtExtent& spatExtent, void* usr);
413 
418  void processTerrainChangeNotification(const DtExtent& spatExtent);
419 
421 
423  virtual void detachFromParentDueToAutomaticDisembark();
424 
425 protected:
428 
436 
446 
453 
458 
466 
474 
481 
488 
489 
496 
502 
506 
510  mutable double myMutablePitch;
511  mutable bool myMutablePitchValid;
512 
514 
516 
518 
520 
523 
527 
530 
532 
535 
537 
538 
541 
544 
547 
552 };
553 
UUID is a unique ID wrapper class.
Definition: rwUUID.h:229
#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:499
DtStaticToDynamicPostureMap myStaticToDynamicPostureMap
Definition: humanMovementActuator.h:515
Definition: attachedTerrain.h:45
DtVrfChordIntersectionRecord represents a list of DtChordIntersectRecords. This is useful for followi...
Definition: vrfChordIntersectRecordList.h:31
Description: This repository holds all information that is common to all the forms of all objects wit...
Definition: vrfMovingObjectStateRepository.h:31
DtVector myPreviousDestination
Definition: humanMovementActuator.h:536
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:33
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:505
A readable, writable type whose name is the name of a component and that has a list of component name...
Definition: componentDescriptor.h:49
DtVectorInputPort * myDestinationInputPort
Input Port Name: destination Input Port Description: Specifies the current destination of the entity ...
Definition: humanMovementActuator.h:473
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. Developer Description: The DtActuator base class caches a pointer to the entity&#39;s radio for convenience. Derived classes may have articulated parts that are configured from the DtActuatorComponentDescriptor&#39;s DtSimArtPartDescriptorList. For each articulated part in the list a DtArticulatedPartStateRepository will be created to store the data for the part such as it&#39;s location, rotation and so forth. These are created in the entity&#39;s DtVrfObjectStateRepository createParts() function. This call creates all the attached parts for all the actuators. These articulated state repositories are managed by the DtAttachmentManager. They are cached by their partType which is the DIS Enumeration describing the part from the disEnums.h file and was specified in the actuator&#39;s DtActuatorComponentDescriptor as descriped above. The partType is used as the category of the DtObjectType used to look up articulated parts in the DtAttachementManager. When an actuator needs access to a particular articulated part it looks it up by the part&#39;s object type.
Definition: actuatorComponent.h:47
bool myWasOnGround
These states are used for controlling debug print statements.
Definition: humanMovementActuator.h:522
DtBooleanInputPort * myPostureChangingPort
Input Port Name: posture-changing Input Port Description: Will be used to halt movement if set...
Definition: humanMovementActuator.h:480
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:519
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. All values are in loc...
Definition: humanMovementActuator.h:526
DtLifeformStaticPosture
These are the available static postures for lifeform (human) entities. Static postures are equivalent...
Definition: lifeformStaticPostures.h:22
DtHumanMovementActuator is a simple movement actuator for lifeforms.
Definition: humanMovementActuator.h:41
bool myAglPortInitialized
Definition: humanMovementActuator.h:533
File: simMsg.h.
Definition: simMessage.h:35
Contains the DtLifeformStaticPosture enumeration declaration.
double myPostureSpeed
Definition: humanMovementActuator.h:540
DtVector myCachedPosition
Definition: humanMovementActuator.h:534
virtual void tick()
This gives the thread of control to the component. The component is ticked once each simulation from ...
double myMutablePitch
This value is the pitch of the terrain under the entity. Since it is expensive to calculate...
Definition: humanMovementActuator.h:510
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:445
DtIntegerInputPort * myDesiredStaticPostureInputPort
Input Port Name: desired-static-posture Input Port Description: The desired posture of the entity...
Definition: humanMovementActuator.h:465
DtVector myLastParentPosition
Definition: humanMovementActuator.h:513
virtual bool createPorts()
Called by init. Derived classes should override this method to create all their input/output ports an...
DtInputPortGroup * myMovementControlInputPortGroup
Input Port Group Name: movement-control Input Port Group Description: Collection of inputs specifying...
Definition: humanMovementActuator.h:457
DtAnalogInputPort * mySpeedInputPort
Input Port Name: desired-speed Input Port Description: Desired speed of the entity in m/s...
Definition: humanMovementActuator.h:452
double myDesiredFacingDirection
Definition: humanMovementActuator.h:528
DtAnalogOutputPort * myAltitudeAglOutputPort
Output Port Name: altitude-agl Output Port Description: Altitude above ground level. Output Port Range: 0 and up. Output Port Default Value: 0.
Definition: humanMovementActuator.h:494
virtual bool createPortGroups()
Called by init. Derived classes should override this method to create all their input/output port gro...
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:90
The DtSimComponent class is the base class for the entire simulation model component hierarchy...
Definition: simComponent.h:70
Definition: vrfChordIntersectionRecord.h:19
DtAnalogInputPort * myMovementDirectionInputPort
Input Port Name: desired-movement-direction Input Port Description: Desired movement direction of the...
Definition: humanMovementActuator.h:435
bool myPostureChanging
Definition: humanMovementActuator.h:539
DtInputPortGroup is a data port group of a data consumer. It may contain any number of DtInputPorts a...
Definition: inputPortGroup.h:35
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:551
DtHumanStateRepository * myHumanStateRepository
Convenience pointers to our state repository.
Definition: humanMovementActuator.h:500
Definition: humanMovementActuatorPSR.h:20
std::map< DtLifeformStaticPosture, DtLifeformState > DtStaticToDynamicPostureMap
Definition: humanMovementActuator.h:52
DtUpdateRepositoryOutputPortGroup is a data port group of a data consumer that contains methods and p...
Definition: updateRepositoryOutputPortGroup.h:31
bool myMutablePitchValid
Definition: humanMovementActuator.h:511
bool myUseDesiredFacingDirectionValue
Definition: humanMovementActuator.h:529
DtHumanLocalObjectFacade myHumanLocalObjectFacade
Member to allow for access to platform specific data.
Definition: humanMovementActuator.h:543
bool myTerrainUpdateTriggeredFlag
A flag that is set if the terrain has been altered.
Definition: humanMovementActuator.h:546
DtUUID myWasJustEmbarkedOn
Definition: humanMovementActuator.h:531
virtual const char * type() const =0
Returns a string identifies the class type of component. Type values are defined in compTypes...
DtIntersectionType
Definition: intersectionRecord.h:41
const DtHumanMovementActuatorDescriptor * myHumanMovementActuatorDescriptor
Definition: humanMovementActuator.h:517
A locally simulated VRF object. Holds all internal and external data for the object, and provides access to both the current frame and next frame state data for the object. All current frame data is read-only, and next-frame data can be written to. No thread safety guarantees are made on this object during the simulation frame and it should only be accessed by the thread that is simulating the object.
Definition: localObject.h:86
DtIntegerInputPort * myOverrideGroundClampFidelityPort
Input Port Name: override-ground-clamp-fidelity Input Port Description: Indicates whether or not the ...
Definition: humanMovementActuator.h:487

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)