21 float aDiff = pModel.m_fHeadingAngle - pModel.m_fOrientationAngle;
33 if (pLastHeadingDiff < -Math.PI_HALF && aDiff > 0)
36 pLastHeadingDiff = aDiff;
37 pModel.m_fHeadingAngle = pModel.m_fOrientationAngle + aDiff;
43 else if (pLastHeadingDiff >
Math.
PI_HALF && aDiff < 0)
46 pLastHeadingDiff = aDiff;
47 pModel.m_fHeadingAngle = pModel.m_fOrientationAngle + aDiff;
54 pLastHeadingDiff = aDiff;
129 protected static float ClampAngle(
float angle, HeadingRestrictData restrictData)
133 if (restrictData.m_RestrictedR > restrictData.m_RestrictedL)
135 if (angle > restrictData.m_RestrictedL && angle < restrictData.m_RestrictedR)
144 if (angle > restrictData.m_RestrictedR + 90 *
Math.
DEG2RAD)
145 return restrictData.m_RestrictedL;
146 else if (angle < restrictData.m_RestrictedL - 90 *
Math.
DEG2RAD)
147 return restrictData.m_RestrictedR;
149 return Math.
Clamp(angle, restrictData.m_RestrictedL, restrictData.m_RestrictedR);
152 else if (restrictData.m_RestrictedR < restrictData.m_RestrictedL)
154 if ((angle >= -180 && angle < restrictData.m_RestrictedR) || (angle <= 180 && angle > restrictData.m_RestrictedL))
165 testOtherDir =
Math.
AbsFloat(restrictData.m_RestrictedR - angle);
166 if (testOtherDir < restrictData.m_AngleRangeInverted - testOtherDir)
167 return restrictData.m_RestrictedR;
169 return restrictData.m_RestrictedL;
173 testOtherDir =
Math.
AbsFloat(restrictData.m_RestrictedL - angle);
174 if (testOtherDir < restrictData.m_AngleRangeInverted - testOtherDir)
175 return restrictData.m_RestrictedL;
177 return restrictData.m_RestrictedR;