VR-Forces 4.0.4 Class Documentation
include/vrfmodel/humanMovementActuator.h
Go to the documentation of this file.
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

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)