Хм. Кажется, я кое-что придумал. Можно воспользоваться функциями из pm_debug, которые рисуют ббоксы энтить. Но сами ббоксы не рисовать, а только записывать координаты в vuser'ы. Ну а потом, уже в худе, читать координаты, и рисовать красиво.
А ещё проще будет с помощью extern "C" сразу в худе юзать функцию рассчёта координат: на входе у неё энтитя, а на выходе 4 вектора.
Добавлено 29-10-2019 в 13:01:
Цитата:
XaeroX писал: Ну да. Более круто же, не?
Мне вариант из первой части больше нравится. Меньше лишних элементов. Но самый лучший, ИМХО, вариант в последних играх. Но там шойдеры надо.
Добавлено 29-10-2019 в 13:08:
Можно, конечно, поступить проще, и просто подсвечивать нужную энтитю, меняя ей рендермод прямо на сервере, я пробовал. Но получилось некрасиво. Если всё получится, следующим шагом будет научить игрока таскать предметы как в DX.
Ku2zoff
По мне, так вариант из DXIW тут неплохо бы смотрелся.
Добавлено 29-10-2019 в 14:28:
Цитата:
Ku2zoff писал: ну там же наверное надо в рендерер лезть.
Не надо там никуда лезть, нужно просто восстановить 8 точек ббокса, трансформировать по той же матрице, по которой ты трансформируешь в видео, и посчитать для них новый ббокс.
Перенёс весь код рисования на клиент, из pm_shared юзаю только GetModelBounds. Буду думать дальше. Охота всё-таки дрыгающиеся скобочки, как в первой части.
Добавлено 29-10-2019 в 15:15:
Напоролся на проблему. Все три компонента angles у энтити на клиенте null. Соответственно, не получается вращать рисуемый ббокс.
Ku2zoff писал: Естественно, она без кастомного рендерера не работает.
Скажем так - без гл-режима. В TriAPI есть такой хак - GetMatrix. Получи через него модельвью, получи проекцию, перемножь их между собой, результат приведи к виду 4х4, потом еще где-то возьми вьюпорт. И всё будет работать под халфой.
ЗЫ. матрицы из 16->4х4 и обратно, можешь тоже у меня взять из класса матриц.
Добавлено 29-10-2019 в 12:25:
А вьюпорт из ref_params.
Добавлено 29-10-2019 в 12:28:
Цитата:
Ku2zoff писал: Но там шойдеры надо.
Шойдеры это только для эдж-детекшен. Можешь рассчитать в клиентке, но если модель тяжелая будет тормозно.
Добавлено 29-10-2019 в 12:30:
И вообще. Эти вашы, так называемые скобочки - это просто картинка с нарисованными скобочками. А ScissorForAABB даст её деномический размер.
Ku2zoff чтоб тебе было понятнее, как эта штука работает, включи в параное квар r_scissor_glass_debug илм r_scissor_light_debug.
Ужо разобрался. Через триапи самое то. Универсально для всех разрешений, это во-первых. И куча рендермодов, это во-вторых. Надо только правильно спрайты делать. Пэинт.нет, поганец такой, постоянно портит пол-литру: прозрачный цвет съезжает с индекса 255 на 0 или любой другой. Скачал перацкий фотошоп на время, пока ничего дельного для рисования не найду.
Делаю удар ногой через secondary attack, завёл PLAYER_ATTACK2, чтобы анимация в thirdperson отличалась от основной атаки, вызываю в коде оружия через m_pPlayer->SetAnimation( PLAYER_ATTACK2 );
В самой анимации анимирован удар ногой, но проблема в том, что в игре наследуются секвенция ног от walk, поэтому анимация по-сути проигрывается только для торса, как отключить это для PLAYER_ATTACK2?
C++ Source Code:
1
case PLAYER_ATTACK2:
2
switch( m_Activity )
3
{
4
case ACT_HOVER:
5
case ACT_SWIM:
6
case ACT_HOP:
7
case ACT_LEAP:
8
case ACT_DIESIMPLE:
9
m_IdealActivity = m_Activity;
10
break;
11
default:
12
m_IdealActivity = ACT_RANGE_ATTACK2;
13
break;
14
}
C++ Source Code:
1
case ACT_RANGE_ATTACK2:
2
if ( FBitSet( pev->flags, FL_DUCKING ) ) // crouching
3
strcpy( szAnim, "crouch_shoot2_" );
4
else
5
strcpy( szAnim, "ref_shoot2_" );
6
strcat( szAnim, m_szAnimExtention );
7
animDesired = LookupSequence( szAnim );
8
if (animDesired == -1)
9
animDesired = 0;
10
11
if ( pev->sequence != animDesired || !m_fSequenceLoops )
Ku2zoff писал: Yo Den смотри PLAYER_JUMP и ACT_HOP. Там нет гейтсеквенций. Вообще, можешь сделать по-хитрому, и как раз таки сделать пинок гейтсеквенцией.
скопипастил оттуда код. Добавил в case PLAYER_WALK:
C++ Source Code:
1
if (m_Activity == ACT_RANGE_ATTACK2)
2
{
3
m_IdealActivity = m_Activity;
4
}
5
else
6
{
7
m_IdealActivity = ACT_WALK;
8
}
После воспроизведения ACT_RANGE_ATTACK2 игрок остаётся висеть на последнем кадре анимации, пока не пойду вперед/подпрыгну/ударю. В случае прыжка анимация сменялась при касании земли, а тут как сделать, чтобы она прекращалась после воспроизведения?