12 #include <matrix/vlVector.h>
13 #include <matrix/vlTaitBryan.h>
17 class DtIntersectionCache;
35 ClampOrientationAndPosition = ClampOrientation | ClampPosition,
36 ClampOrientationAndUpright = ClampOrientation | ClampUpright,
37 ClampPositionAndUpright = ClampPosition | ClampUpright,
38 ClampAll = ClampOrientation | ClampPosition | ClampUpright
50 virtual void update(
DtTime tNow );
54 virtual void setEnabled(
bool enabled);
57 virtual void setMode(GroundClampingMode
mode);
60 bool isClamping()
const;
63 inline bool isClampingUp()
const
65 return myMode & ClampUpright;
69 inline bool isClampingOrientation()
const
71 return myMode & ClampOrientation;
75 inline bool isClampingPosition()
const
77 return myMode & ClampPosition;
87 virtual void setCullCylinderRadiusScale(
float scale);
90 virtual void setClampAlways(
bool enabled);
93 virtual void setCheckForCulling(
bool);
97 virtual void doGroundClamp(
DtTime tNow );
101 virtual void setClampTimeThreshold(
double);
106 static void computePerpendicularRotation(
const DtVector& pos,
107 const DtVector& hitNormal,
const DtTaitBryan& orientation,
108 DtTaitBryan& output );
119 bool needClampThisTick()
const;
123 bool targetIsMoving(
const DtVector& newPos,
const DtVector& lastPos )
const;
127 bool targetIsTurning(
const DtTaitBryan& newOri,
const DtTaitBryan& lastOri )
const;
130 bool checkCulling(
const DtVector& up)
const;
132 void clampToWater(
DtTime tNow );
136 static double angleDifference(
double prev,
double curr );