12 #include <matrix/vlVector.h>
13 #include <matrix/vlTaitBryan.h>
17 class DtIntersectionCache;
34 ClampOrientationAndPosition = ClampOrientation | ClampPosition,
35 ClampOrientationAndUpright = ClampOrientation | ClampUpright,
36 ClampPositionAndUpright = ClampPosition | ClampUpright,
37 ClampAll = ClampOrientation | ClampPosition | ClampUpright
49 virtual void update( DtTime tNow );
52 virtual void setPosition(
const DtVector& position);
55 virtual void setOrientation(
const DtTaitBryan& ori);
59 virtual void setPosition(
int index,
const DtVector&);
63 virtual void setOrientation(
int index,
const DtTaitBryan&);
66 virtual void removeSpatial(
int);
69 virtual void resetToUnclamped();
73 virtual void setEnabled(
bool enabled);
76 virtual void setMode(GroundClampingMode mode);
79 bool isClamping()
const;
82 inline bool isClampingUp()
const
84 return myMode & ClampUpright;
88 inline bool isClampingOrientation()
const
90 return myMode & ClampOrientation;
94 inline bool isClampingPosition()
const
96 return myMode & ClampPosition;
106 virtual void setCullCylinderRadiusScale(
float scale);
109 virtual void setClampAlways(
bool enabled);
112 virtual void setCheckForCulling(
bool);
116 virtual bool doGroundClamp();
120 virtual void setClampTimeThreshold(
double);
125 static void computePerpendicularRotation(
const DtVector& pos,
126 const DtVector& hitNormal,
const DtTaitBryan& orientation,
127 DtTaitBryan& output );
138 bool needClampThisTick()
const;
142 bool targetIsMoving(
const DtVector& newPos,
const DtVector& lastPos )
const;
146 bool targetIsTurning(
const DtTaitBryan& newOri,
const DtTaitBryan& lastOri )
const;
149 bool checkCulling(
const DtVector& up)
const;
153 static double angleDifference(
double prev,
double curr );