Поскольку уже пару месяцев меня беспокоили просьбами запилить модели для всего и вся - возникла очередная халвопроблема. В первую очередь моделями надо было сделать поезда и кнопки. Но хедкрабец подкрался незаметно. Для брашей не работают вызовы по nextthink так, как работют для моделей, и наоборот. Потому - вопрос к знающим: как сделать универсально рабочую функцию?
(это просто набросок, он не работает)
Вообще, как я догадываюсь, pev->ltime - что-то для сглаживания движений брашей. Вот только оно влияет на вызовы Think() как-то рандомно. Т.е. SetNextThin(0) не работает никогда, например. А надо.
~ X ~ писал: Для брашей не работают вызовы по nextthink так, как работют для моделей, и наоборот.
Брашы непричём, это зависит от MOVETYPE_PUSH. Это говно растёт из того обстоятельства, что брашам надо как-то задавать MoveDone, а отдельного каллбэка для этого непредусмотрено. И идёт завязка на ltime (Local Time).
В общем случае это выглядит как-то так:
C++ Source Code:
// set nextthink to trigger a call to LinearMoveDone when dest is reached
pev->nextthink = pev->ltime + flTravelTime;
SetThink( LinearMoveDone );
То есть вместо gpGlobals->time юзаем pev->ltime. Но это в принципе ерунда и можно привыкнуть. Самое мерзкое, что когда think используется для вызова MoveDone, мы же не можем его юзать больше ни для чего, так сказать. Вальва для этого ввела особый флаг FL_ALWAYSTHINK, который используется, например в трак-трейнах. Но это тоже неслишком удобно.
В ксаш-моде я понятное дело избавился от всего этого дерьма. Там тчинк работает независимо от движения.
Добавлено 24-02-2018 в 18:59:
Цитата:
a1batross писал: Не по теме, но зачем delay ссылкой?
Мастер где-то вычитал что это здорово оптимизирует и ускоряет код.
Добавлено 24-02-2018 в 19:04:
Цитата:
~ X ~ писал: pev->ltime - что-то для сглаживания движений брашей
За инфу, конечно, спасибо, только главного из этого не понял:
Цитата:
Дядя Миша писал: То есть вместо gpGlobals->time юзаем pev->ltime.
- зачем. Я знаю что MoveDone() - это фикция, которая не считает позицию, а тупо вычисляет через какое время брашка будет в точке с заданной скоростью. И это не в движке.
В итоге, предполагаю, что ltime нужна для того чтобы во время блокады двигло могло "переносить" время старта. Охрененная физика, наверняка Машина-мак придумал.
Цитата:
Дядя Миша писал: тчинк
:_D сделал мой вечер. Тимч в бане сейчас бугуртует. ))
~ X ~ писал: Я знаю что MoveDone() - это фикция, которая не считает позицию, а тупо вычисляет через какое время брашка будет в точке с заданной скоростью
MoveDone, это каллбэк такой, технически объединенный с тчинком. Если открыть исходники куси первокваки, легко увидеть, оно оттуда и пошло.
Ну видимо рассудили, что муверам не нужен тчинк на какие-то иные потребности.
Цитата:
~ X ~ писал: В итоге, предполагаю, что ltime нужна для того чтобы во время блокады двигло могло "переносить" время старта
Ну вот видишь, сидел 18 лет сортировал строчки в delta.lst, а как пня дали в нужном направлении, так сразу во всём и газобгался
Дядя Миша fffffffuuuuuuuнкцию-то ты не написал же ж. В итоге на свой вопрос я ответил сам. Но не совсем. Если есть желание - поделись ксашмодокодом, а то гонка велосипедистов уже подзаела немного. А то один перец тут дергает "сделай себе паренты" (хотя я подозреваю, они ему не нужны). Хотя, вощем-то, уже, похоже, никому кроме меня ничего не нужно.
Цитата:
Дядя Миша писал: MoveDone, это каллбэк такой, технически объединенный с тчинком.
чинко-чинко!
dagobah.net/flash/chinko.swf
XaeroX я тоже думал что он в бане. Мне так Гульмэн сказал. Потому что он тоже любитель банных процедур. o_O