DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено

◆ ClampAngle()

static float DayZPlayerImplementHeading::ClampAngle ( float angle,
HeadingRestrictData restrictData )
inlinestaticprotected

См. определение в файле DayZPlayerImplementHeading.c строка 129

130 {
131 float testOtherDir;
132
133 if (restrictData.m_RestrictedR > restrictData.m_RestrictedL)
134 {
135 if (angle > restrictData.m_RestrictedL && angle < restrictData.m_RestrictedR)
136 {
137 //Print("STANDARD NOCLAMP: " + angle*Math.RAD2DEG + " |MIN: " + restrictData.m_RestrictedL*Math.RAD2DEG + " |MAX: " + restrictData.m_RestrictedR*Math.RAD2DEG);
138 return angle;
139 }
140 else
141 {
142 //Print("STANDARD CLAMP: " + angle*Math.RAD2DEG + " |MIN: " + restrictData.m_RestrictedL*Math.RAD2DEG + " |MAX: " + restrictData.m_RestrictedR*Math.RAD2DEG);
143
144 if (angle > restrictData.m_RestrictedR + 90 * Math.DEG2RAD) // check if restrictData.m_RestrictedR/restrictData.m_RestrictedL is close to -PI and the new angle flips to +PI or vice versa
145 return restrictData.m_RestrictedL;
146 else if (angle < restrictData.m_RestrictedL - 90 * Math.DEG2RAD)
147 return restrictData.m_RestrictedR;
148
149 return Math.Clamp(angle, restrictData.m_RestrictedL, restrictData.m_RestrictedR);
150 }
151 }
152 else if (restrictData.m_RestrictedR < restrictData.m_RestrictedL) // angle is restrited through 180 -> -180, clamping follows different rules
153 {
154 if ((angle >= -180 && angle < restrictData.m_RestrictedR) || (angle <= 180 && angle > restrictData.m_RestrictedL))
155 {
156 //Print("INVERSE NOCLAMP: " + angle*Math.RAD2DEG + " |MIN: " + restrictData.m_RestrictedL*Math.RAD2DEG + " |MAX: " + restrictData.m_RestrictedR*Math.RAD2DEG);
157 return angle;
158 }
159 else
160 {
161 //Print("INVERSE CLAMP: " + angle*Math.RAD2DEG + " |MIN: " + restrictData.m_RestrictedL*Math.RAD2DEG + " |MAX: " + restrictData.m_RestrictedR*Math.RAD2DEG);
162
163 if (angle < 0)
164 {
165 testOtherDir = Math.AbsFloat(restrictData.m_RestrictedR - angle);
166 if (testOtherDir < restrictData.m_AngleRangeInverted - testOtherDir)
167 return restrictData.m_RestrictedR;
168 else
169 return restrictData.m_RestrictedL;
170 }
171 else if (angle >= 0)
172 {
173 testOtherDir = Math.AbsFloat(restrictData.m_RestrictedL - angle);
174 if (testOtherDir < restrictData.m_AngleRangeInverted - testOtherDir)
175 return restrictData.m_RestrictedL;
176 else
177 return restrictData.m_RestrictedR;
178 }
179
180 return angle;
181 }
182 }
183
184 return angle;
185 }

Перекрестные ссылки Math::AbsFloat(), Math::Clamp() и Math::DEG2RAD.

Используется в RestrictHeading().