Собственно сабж. Как заморозить анимацию в текущем состоянии кадра и интерполяции? Если выставить pev->framerate = 0.0, то оно замораживается в первом кадре анимации.
Есть функция StopAnimation. Она как раз таки и выставляет pev->framerate = 0.0; Других способов не предусмотрено. А ты через эвент анимационный выставляй. Я так делал в римейке Кваки для зомбаков. Там же анимация падения-вставания - это одна анимация. И вот он упал и через какое-то время должен подняться. И я по эвенту - стопмашина. А потом ждём некоторое время и подымаем его.
Мне кажется, что это немого не то. Что-то оно не учитывает пройденный путь.
При запуске анимации я делаю следующее
C++ Source Code:
1
...
2
pev->sequence = iMySequence;
3
ResetSequenceInfo();
4
GetAttachment( 0, prevPos, prevAng );
5
SetThink( AnimThinkEnd );
6
SetNextThink( flSeqLen ); // длина анимации
7
...
8
void CMyAnimate::AnimThinkEnd( void )
9
{
10
Vector nowPos, nowAng;
11
GetAttachment( 0, nowPos, nowAng );
12
}
Когда вызывается AnimThinkEnd(), в nowPos получаются те же самые координаты, которые были в prevPos, хотя визуально анимация стоит на последнем кадре и аттачменты, соответственно, тоже. В чём здесь проблема?
Да, так оно и есть. Если поставить think на полную длину анимации, pev->frame в конце равен нулю, хотя визуально анимация остаётся в последнем кадре . А как отловить момент, когда на сервере pev->frame = 255.0, чтобы корректно получить новую позицию аттачмента именно во время 255.0?
Получилось! Так же задам следующий вопрос тут, дабы не плодить темы:
Как передвинуть эту CBaseAnimating? У монстряков понятно, есть таски. А с CBaseAnimating как?
Пробую сделать
Что хочу: Переместить ентитю по оси z на 36 юнитов вверх плавно, чтобы она не дёргалась, как при телепорте.
При спауне ставлю movetype_noclip, но ни в какую не хочет двигаться. Пробовал и пев->велосити выставлять, но опять же результата нет.