Дядя Миша писал: как записывается, только наоборот.
Спасибо, попробую переделать. Так-то я уже сделал отдельную простую энтитю, куда запоминаю туман и откуда его беру потом (iuser1-4). На большее меня не хватило
Возвращаясь к теме аутизма и многолетней аппроксимации кругового движения через формулы. Я-таки сосредоточился и реализовал формулу которую ещё летом нагуглил, через пересечение двух окружностей. (я надеялся предварительно её понять, но так и не понял, лол)
И она работает достаточно неплохо: для радиуса в 500 юнитов погрешность полтора юнита, для 200 - 3-4 юнита, для 150-175 что-то около 5, но дальше начинается трэш и для 100 юнитов реальный радиус движения оказывается 120, для 30-50 - 116.
Т.е. налицо рукалицо какое-то мягкое ограничение: мгновенное изменение YAW (2.9 градуса в кадр или 208 градусов в секунду, немало) не означает мгновенного изменения вектора моментальной скорости, даже близко. Большие или малые значения sv_stopspeed ситуацию не спасают. Игрок как-то проскальзывает, чтоли.
И мы увидим в этой тишине
Как далеко мы были друг от друга,
Как думали, что мчимся на коне,
А сами просто бегали по кругу.
А думали, что мчимся на коне.
Столкнулся с этой фигнёй, когда делал мониторы, которые можно поюзать, и камера плавно к ним "подъезжает". Иногда YAW меняется не в ту сторону, откуда меньше поворачиваться, а наоборот. NormalizeAngles немного помогает, но не на 100%.
Вы не поверите, я сделал кармаковский фикс на отключение баннихопа и у меня баг уменьшился в разы(!), теперь при заданном радиусе 50 он послушно бегает не по кругу 115 а по 55 юнитов!!! при 100 юнитах-по 103.
У меня с кодом Фитцквейка давно ещё была такая проблема что переменную нельзя объявить в произвольном месте функции одновременно с присваиванием: error C2143: syntax error : missing ';' before 'type' Поэтому сначала объявить все переменные и только потом пишешь логику.
Сейчас ещё вылезло что при объявлении void-функции всегда возникает ошибка 4027 declared without formal parameter list хотя входные переменные там есть. Причём если опять нажать компиляцию то ошибка исчезает.
А подскажите, реально ли отловить нажатие клавиши escape в коде VGUI меню? Вроде как есть такая возможность, но при нажатии игра всё равно ставится на паузу, и открывается главное меню. Ещё в инвазионе бесило, что кодовые замки и терминалы управления надо закрывать, кликая мышкой. В TFC этот код почти работает: при видимой кнопке CANCEL в открытых TeamMenu и ClassMenu на первое нажатие esc открывается главное меню, на второе нажатие главное меню закрывается, и следом закрывается уже открытое VGUI меню. Может быть есть способ как то блокировать движковую команду? Или такое дурацкое поведение только в стим-версии?
Дядя Миша по-умолчанию в конфиге всегда к esc привязана cancelselect. Я корочи хукнул обе и подменил командами с вызовом gEngfuncs.ConDPrintf, чтобы отследить, какая когда используется. При вбивании в консоль в обоих случаях срабатывает escape. То есть в стим-халфе внутри движка cancelselect перенаправлена на неё. Но засада в том, что при нажатии клавиши esc в консоль ничего не выводится - такое впечатление, что тут GameUI.dll перехватывает нажатие клавиши, и уже потом выполняет команду в движке. Хотя я ещё не пробовал EngineCMD - только ClientCMD.
Добавлено 31-01-2021 в 14:39:
Глянул сорцы движка HL2 Beta. Ну точно, так и есть. GameUI перехватывает escape, и нажатие клавиши не доходит до клиента:
C++ Source Code:
if ( key == K_ESCAPE && VGui_GameUIKeyPressed() )
{
// game ui handled it, so don't pass on
return;
}
Это конечно же никак не лечится, потому что зашито в движок. Ну и сорцев GameUI.dll нету. Будем прицеплять закрытие VGUI-менюшек на пробел.
Я про официальные сорцы. Отреверсенные я тоже где-то видел, но не вижу особого смысла собирать самому, если не нужно сильно модифицировать меню. Да и истерики на почве копиразма у буржуев никто не отменял. Могут только из-за этого обосрать мод.
Цитата:
Дядя Миша писал: В Key_Event должен приходить сигнал от искейпа поидее.
Так он и приходит. А там ретёрн стоит, и нажатие клавиши не доходит до интерпретатора, если VGui_GameUIKeyPressed() == true.
Никак не могу избавиться в зацикленных звуках от треска при их повторном проигрывании. Как я понимаю, проблема где-то здесь (обведено жёлтым). Кто подскажет, как от этого грамотно избавиться?
UPD: вырезаю звуки из больших звуковых файлов со стоков.