![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2006 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: humanMovementActuator.h,v $ $Revision: 1.11 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00013 00014 #ifndef humanMovementActuator_h 00015 #define humanMovementActuator_h 00016 00017 #include <vrfobjcore/actCmpnt.h> 00018 #include "vrfmodel/vrfmodelDefines.h" 00019 #include "vrfutil/lifeformStaticPostures.h" 00020 #include <map> 00021 00022 class DtInputPortGroup; 00023 class DtAnalogInputPort; 00024 class DtVrfMovingObjectStateRepository; 00025 class DtHumanStateRepository; 00026 class DtIntegerInputPort; 00027 class DtHumanMovementActuatorDescriptor; 00028 class DtAttachedTerrain; 00029 class DtBooleanInputPort; 00030 00038 class DT_DLL_vrfmodel DtHumanMovementActuator : public DtActuatorComponent 00039 { 00040 private: 00042 DtHumanMovementActuator& operator=(const DtHumanMovementActuator& orig); 00044 DtHumanMovementActuator(const DtHumanMovementActuator& orig); 00045 00046 public: 00047 00048 typedef std::map<DtLifeformStaticPosture, DtLifeformState> 00049 DtStaticToDynamicPostureMap; 00050 00051 public: 00054 DtHumanMovementActuator(const DtString& name, 00055 DtVrfObject* owner, 00056 DtSimManager* simManager, 00057 DtComponentDescriptor* desc = 0, 00058 DtReaderWriterRegistry* parentRegistry = 0); 00059 00061 virtual ~DtHumanMovementActuator(); 00062 00065 virtual bool init(); 00066 00069 virtual DtString type() const; 00070 00071 virtual void tick(); 00072 00076 static DtSimComponent * creator(const DtString& name, 00077 DtVrfObject* owner, 00078 DtSimManager* simManager, 00079 DtComponentDescriptor* desc = 0, 00080 DtReaderWriterRegistry* parentRegistry = 0); 00081 00082 protected: 00085 virtual double calculateMaxSpeed() const; 00086 00090 virtual bool disableControl(); 00091 00092 virtual double maxSpeedSoilFactor() const; 00093 00094 virtual DtVector calculateProjectedLocation( 00095 const DtVector& oldLocalPosition, const DtVector& newBodyVelocity, 00096 double newHeading); 00097 00098 virtual void calculateOrientationAndPosition( 00099 const DtVector& newLocalProjectedLocation, double newHeading, double newFacingOrientation, 00100 DtDcm& newLocalOrientation, DtDcm& newLocalDirectionOfMovement, DtVector& newLocalPosition); 00101 00102 virtual void calculateOrientationAndPositionCrawling( 00103 const DtVector& newLocalProjectedLocation, double newHeading, double newFacingOrientation, 00104 DtDcm& newLocalOrientation, DtDcm& newLocalDirectionOfMovement, DtVector& newLocalPosition); 00105 00106 /*virtual void calculateOrientationAndPositionCrawling( 00107 const DtVector& newLocalProjectedLocation, double newHeading, 00108 DtDcm& newLocalOrientation, DtVector& newLocalPosition);*/ 00109 00110 virtual void groundClamp(double heading, 00111 const DtVector& location, DtAttachedTerrain& terrainDatabase, DtVector& newNormal); 00112 00113 virtual void calculateDirectionOfLinearMotion( 00114 const DtDcm& newLocalOrientation, double desiredDirectionOfMovement, const DtVector& newLocalPosition, 00115 DtDcm& newLocalDirectionOfLinearMotion); 00116 00117 virtual void updateRepository(const DtVector & position, 00118 const DtVector & velocity, const DtVector & acceleration, 00119 const DtTaitBryan & localOrientation, const DtVector& rotationalVelocity, 00120 double newHeading); 00121 00125 virtual void computeAndSetPosture(); 00126 00129 virtual DtLifeformState computeDynamicPosture(DtLifeformStaticPosture staticPosture); 00130 00135 virtual DtLifeformStaticPosture restrictPostureForTerrain(DtLifeformStaticPosture desiredPosture); 00136 00145 virtual bool checkForTerrainCollisions() const; 00146 00151 virtual bool checkBlockedByTerrain(const DtVector& oldLocalPosition, 00152 DtVector& newLocalProjectedLocation); 00153 00159 virtual double maxUprightTerrainPitch() const; 00160 00165 virtual double maxWalkingSpeed() const; 00166 00168 virtual void initializeStaticToDynamicPostureMap(); 00169 00171 virtual bool computeEntityDirOfMovement(double& heading) const; 00172 00175 virtual double calculateTerrainPitch(const DtVector& localPosition, 00176 double heading, 00177 const DtAttachedTerrain& terrain) const; 00178 00179 protected: 00181 virtual bool createPorts(); 00182 00184 virtual bool createPortGroups(); 00185 00186 protected: 00189 00196 DtAnalogInputPort* myMovementDirectionInputPort; 00197 00206 DtAnalogInputPort* myFacingDirectionInputPort; 00207 00213 DtAnalogInputPort* mySpeedInputPort; 00214 00218 DtInputPortGroup* myMovementControlInputPortGroup; 00219 00226 DtIntegerInputPort* myDesiredStaticPostureInputPort; 00228 00237 DtBooleanInputPort * myMovementDisableInputPort; 00238 00241 DtVrfMovingObjectStateRepository* myMovingObjectStateRepository; 00242 DtHumanStateRepository* myHumanStateRepository; 00244 00248 mutable double myMutablePitch; 00249 mutable bool myMutablePitchValid; 00250 00251 DtVector myLastParentPosition; 00252 00253 DtStaticToDynamicPostureMap myStaticToDynamicPostureMap; 00254 00255 const DtHumanMovementActuatorDescriptor* myHumanMovementActuatorDescriptor; 00256 00257 bool myPreviouslyEmbarked; 00258 }; 00259 00265 bool closestIntersectionWithBias(const DtVector& localPosition, DtChordIntersectionRecord& record, 00266 DtIntersectionRecord::DtIntersectionType irtFlag, double bias, 00267 const DtAttachedTerrain* terrain); 00268 00269 00270 00271 #endif