A19: найден механизм движка для скорости на склоне (возврат потерянного)
Some checks are pending
CI / checks (push) Waiting to run
Some checks are pending
CI / checks (push) Waiting to run
В gamemovement.cpp (ClipVelocity, строка ~3144) есть блок flRedirectCoeff: после отсечения вектор скорости растягивается вдоль скольжения на потерянную в плоскость компоненту (out *= (len + |v·n|·coeff)/len). Это и есть причина, по которой в движке на ходибельном склоне нет замедления. Коэффициент передаётся в TryPlayerMove третьим параметром; в базовом game 2013 он нулевой, у мода может быть своим. Наивный перенос проверен замером и провалился: если возвращать потерянное на каждом контакте каждого подшага, бонус копится за кадр — на 15° скорость ушла в 442 юнита/с. Правка откачена, дерево зелёное (23 сьюта, 28 картовых тестов). Правильный перенос записан в docs/PARITY.md E23.7: возврат считается один раз на отсечение, длина берётся до отсечения, результат ограничивается желаемой скоростью кадра; приёмка — таблица probe_slope_angles (до 44° не ниже 95% от 250).
This commit is contained in:
parent
e638607ee1
commit
5bdbdbfbf8
1 changed files with 26 additions and 0 deletions
|
|
@ -2979,3 +2979,29 @@ disp: построено 110, нарисовано 89, отсев: скайбо
|
|||
расстоянию, как в `CGameMovement::StepMove`, и чтобы подъём считался основной
|
||||
дорогой на ходибельном склоне. Приёмка — эта же таблица: до 44° скорость не
|
||||
ниже 95% от 250.
|
||||
|
||||
### E23.7. Где движок берёт скорость на склоне
|
||||
|
||||
Найдено в `gamemovement.cpp` (`ClipVelocity`, строка ~3144):
|
||||
|
||||
```cpp
|
||||
if ( flRedirectCoeff > 0.f )
|
||||
{
|
||||
// Redirect clipped velocity along angle of movement
|
||||
float flLen = out.Length();
|
||||
out *= ( -1.f * flBlocked * flRedirectCoeff + flLen ) / flLen;
|
||||
}
|
||||
```
|
||||
|
||||
`flBlocked` — это `v·n` до отсечения (отрицательное, движемся в плоскость),
|
||||
`out` — уже отсечённая скорость. То есть движок **возвращает потерянную в
|
||||
плоскость скорость**, растягивая вектор вдоль скольжения. Это и есть отсутствие
|
||||
замедления на рампе. Коэффициент передаётся в `TryPlayerMove` третьим
|
||||
параметром; в базовом `game` 2013 он равен нулю, у мода может быть своим.
|
||||
|
||||
**Попытка перенести наивно — провалилась (замер).** Если возвращать потерянное
|
||||
на каждом контакте каждого подшага, бонус накапливается за кадр: на 15° скорость
|
||||
улетела в 442 юнита/с (в движке такого нет). Правильный перенос: возврат
|
||||
считается **один раз на отсечение**, длина берётся **до** отсечения, и
|
||||
результат ограничивается желаемой скоростью кадра. Правка откачена, приёмка
|
||||
прежняя — таблица `probe_slope_angles`: до 44° не ниже 95% от 250.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue