Влияние think задержки на скорость движения

Сообщения
141
Реакции
329
Всем привет,
Уже давно заметил, что при высокой задержке между think событиями установленный velocity отрабатывает неверно.
UPD: При низкой задержке так же возникают проблемы, объект ускоряется.

К премеру, при задержке 0.04 секунду (25 fps) все отработает корректно и при скорости 250 ups сущность сместиться на те самые 250 юнитов за секунду.
Заметные проблемы начинаются при задержке больше 0.05 (20 fps), в моем случае это задержка в 0.1 (10 fps).

Например, в этом случае объект пройдет 250 юнитов за секунду:
C-like:
new Float:fSpeed = 250.0;
static Float:vDirection[3];
// get direction somehow

static Float:vVelocity[3];
xs_vec_mul_scalar(vDirection, fSpeed, vVelocity);
set_pev(ent, pev_velocity, vVelocity);

set_pev(ent, pev_nextthink, get_gametime() + 0.04);
Однако, если изменить задержку на 0.1 секунду, то пройденное за секунду растояние будет около 224 юнитов:
C-like:
set_pev(ent, pev_nextthink, get_gametime() + 0.1);
UPD: При задержке на 0.01 секунду пройденное за секунду растояние будет около 265 юнитов:
C-like:
set_pev(ent, pev_nextthink, get_gametime() + 0.01);
Пробовал устанавливать FL_BASEVELOCITY флаг каждый кадр, однако сильно это не повлияло.
Перекопав исходники HLSDK и Xash3D я не смог найти никакого другого влияния времени на скорость.
Есть ли какой-то способ исправить это не поднимая частоту think вызова?
 
Последнее редактирование:

Garey

ninjaCow
Сообщения
422
Реакции
1,056
Помог
10 раз(а)
На ent или на player - think?
 

Garey

ninjaCow
Сообщения
422
Реакции
1,056
Помог
10 раз(а)
Какой movetype у entity? И как считаешь что 224 юнита прошла энитити за секунду? Я проверил с разным интервалом у меня примерно 248-252 юнита.
 
Сообщения
141
Реакции
329
Какой movetype у entity? И как считаешь что 224 юнита прошла энитити за секунду? Я проверил с разным интервалом у меня примерно 248-252 юнита.
movetype установлен на MOVETYPE_STEP

При задержке в 0.01 секунду

Код:
L 11/01/2020 - 17:44:10: [entity_hwn_npc_skeleton.amxx] NPC UpS 267.708312
L 11/01/2020 - 17:44:10: [entity_hwn_npc_skeleton.amxx] NPC UpS 268.330230
L 11/01/2020 - 17:44:11: [entity_hwn_npc_skeleton.amxx] NPC UpS 263.232482
L 11/01/2020 - 17:44:12: [entity_hwn_npc_skeleton.amxx] NPC UpS 267.305908
L 11/01/2020 - 17:44:12: [entity_hwn_npc_skeleton.amxx] NPC UpS 267.266235
L 11/01/2020 - 17:44:13: [entity_hwn_npc_skeleton.amxx] NPC UpS 263.536529
При задержке в 0.1 секунду
Код:
L 11/01/2020 - 17:45:01: [entity_hwn_npc_skeleton.amxx] NPC UpS 221.933990
L 11/01/2020 - 17:45:01: [entity_hwn_npc_skeleton.amxx] NPC UpS 209.984359
L 11/01/2020 - 17:45:02: [entity_hwn_npc_skeleton.amxx] NPC UpS 208.427658
L 11/01/2020 - 17:45:02: [entity_hwn_npc_skeleton.amxx] NPC UpS 208.343917
L 11/01/2020 - 17:45:03: [entity_hwn_npc_skeleton.amxx] NPC UpS 209.345153
L 11/01/2020 - 17:45:03: [entity_hwn_npc_skeleton.amxx] NPC UpS 222.580505
Код проверки:
Код:
new Float:fStart;
pev(ent, pev_fuser4, fStart);

static Float:vOrigin[3];
pev(ent, pev_origin, vOrigin);

if (!fStart) {
    set_pev(ent, pev_vuser4, vOrigin);
    set_pev(ent, pev_fuser4, get_gametime());
} else if (get_gametime() - fStart > 1.0) {
    static Float:vStartOrigin[3];
    pev(ent, pev_vuser4, vStartOrigin);

    log_amx("NPC UpS %f", get_distance_f(vOrigin, vStartOrigin));

    set_pev(ent, pev_fuser4, 0.0);
}
 

Garey

ninjaCow
Сообщения
422
Реакции
1,056
Помог
10 раз(а)
Velocity же задаете в think?
1 Ноя 2020
Hedgehog Fog, Если velocity не ставить в каждый фрейм то вот эти места могут замедлять entity вплоть до 0.
Я проверял на MOVETYPE_FLY и там всё ок. Скорее всего влияет именно то что SV_Physics вызывается каждый фрейм который двигает entity и при MOVETYPE_STEP/MOVETYPE_PUSHSTEP velocity как раз действует вроде всего секунду и то сводится к нулю в итоге.
 
Сообщения
141
Реакции
329
Спасибо, понял.
Решил, что текущий подход надо менять полностью, пока что оставлю как есть, если не трогать, то работает)
Думаю потом отделю поиска противника и сам think у NPC и первое буду вызывать реже, а в think буду только обновлять velocity.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу