Я не совсем понятно написал. В одном из абзацев написано:
"При нажатии на кнопку, как и задумано, панель со свистом закрывается, курсор исчезает, и мы можем бегать как обычно. Чтобы показать нашу панель опять, надо откуда-нибудь вызвать gViewPort->m_pMyPanel->setVisible(true), а затем UpdateCursorState. Откуда это вызывать - это, конечно, ваше дело. Можете создать мессадж или эвент, и при его приеме показывать панель (создание мессаджей и эвентов в этой статье не рассматривается)"
И я так понял у него есть статьи на эти темы. Возможно, там будет рассказано про то, как какой-либо клавише назначить процедуру открытия VGUI. А так, всё то что написано в статье про VGUI, всё ясно.
Crystallize писал: Я беру у Trigger_Camera его yaw и передаю мессагой на клиент, прибавляю его ко viewangles игрока. Таким образом, утрируя, W и S всегда двигают игрока по оси камеры. Однако при стрейфе мы не движемся по ровному кругу вокруг камеры, как должны бы, а быстро уходим прочь по спирали. Чтобы идти по кругу, нужно повернуться к камере на лишние примерно 20 градусов. Это тот самый предиктинг виноват? Просто у камеры стоит SetNextThink ( 0 ), так что не похоже. Я пробовал менять cl_lc, cl_lw, безрезультатно. Попытался прикрутить для сглаживания углов функцию V_SmoothInterpolateAngles ( ) которая во view.cpp, но я вроде кормлю ей такие же vec3_t, а она выдаёт ошибку преобразования типов.
Я попробовал по-дядемишиному сделать, отталкиваясь от v_origin камеры, получилось конечно проще, но в результате то же самое: для кругового движения вокруг камеры отклонение джойстика на 90 градусов должно иметь погрешность, и чем дальше игрок от камеры, тем меньше погрешность. Тут штука в том, что уходя вбок от следящей за ним камеры, игрок будет двигаться по идеальной окружности только в реальности, видимо, а в симуляции он движется по многоугольнику. Сколько там, 1000 отсчётов в секунду?
semerjon писал: И я так понял у него есть статьи на эти темы.
ЕМНИП, то нет. В данном контексте мессаджи - это User Messages, отправляемые с сервера на клиент. Поищи по проектам gmsgCurWeapon и MsgFunc_CurWeapon, например. Там, в принципе, всё расписано в комментариях в коде: как создавать эти мессаги на сервере, как их отправлять и как принимать на клиенте, можно узнать из кода оригинальных вальвоских библиотек. Единственные подводные камни для новичка - это типы сообщений (MSG_ONE, MSG_ALL) и размер мессаги в байтах. Я думаю, ты сможешь разобраться.
Эвенты - это предиктабельные (в случае с оружиями) аналоги пользовательских мессаг, но передающие в себе всегда фиксированный набор данных. Ищи по строчке PLAYBACK_EVENT_FULL на сервере и файлам .sc в папке events.
semerjon меню шлётся с сервера. В виде строк. А с клиента отправляются команды при выборе строки. Зачем что-то менять на клиенте, если все изменения идут с сервера? Опиши точнее, что ты хочешь сделать.
Касательно ВГУИ это не действует. Там менюшки строятся на клиенте. Можно конечно передавать с сервера что-то, вроде MOTD.TXT, но сами меню пишутся на клиенте.
Ku2zoff Я имел ввиду меню паузы(или, ещё проще, Главное меню), в котором содержатся пункты меню: Resume game; Create Server и прочее. А так просто, интересно, можно ли переоформить меню. Вместо пунктов меню, сделать что-то наподобие быстрой строки из DOS-овских программ. Там ещё писали F3 Open и т.д.
semerjon в меню можно изменить только текст, фон и звуки. В вон-версии текст в виде большой BMP-картинки, фон тоже BMP + видеоролик в верхней части фона. В стим-версии текст находится в GameMenu.res, + можно поменять шрифт. Фон там в виде нескольких tga-картинок, есть специальная прога, которая нарезает готовое изображение на части и делает текстовик с масштабом под разные разрешения: BackgroundLayout.txt
Больше в халфе ты ничего сделать не сможешь. А вот в ксаше можно как угодно кастомизировать меню, т.к. его исходный код открыт.
Crystallize ну я думаю, что доступ можно получить только в view.cpp. А из инпута слать команды с помощью глобальных переменных. А что за надобность такая возникла?
Добавлено 01-09-2017 в 12:17:
Есть ли возможность активировать ScreenShake на клиенте? На сервере это пользовательское сообщение, а вот на клиенте нет ответки, она зашита в движок. Не хотелось бы тащить из ксаша код на клиент.
Ku2zoff писал: Crystallize ну я думаю, что доступ можно получить только в view.cpp. А из инпута слать команды с помощью глобальных переменных. А что за надобность такая возникла?
Мне нужно yaw камеры узнать, чтобы управлять игроком в её координатах, а не глобальных. За неумением камера пока что маппингом, а не thirdperson или ещё какая. Хотя наверное в этом и корень многих проблем.
Добавлено 01-09-2017 в 14:05:
Кстати для общего развития, почему доступ можно получить только из view.cpp? Это какой-то инклуд просто или что?
Crystallize писал: почему доступ можно получить только из view.cpp? Это какой-то инклуд просто или что?
ref_params_s. Вот. Их можно получить из V_CalcRefdef. ЕМНИП, это экспортная функция, которую хавает движок, засылая в неё ref_params_s. Но никто не мешает завести в классе CHud клиентскую энтитю, которая будет ссылкой на pparams->viewentity. Таким образом, ты сможешь получить доступ к ней во всей клиентке.
Добавлено 01-09-2017 в 23:14:
Корочи вот, в функции V_CalcRefdef можно сделать так:
C++ Source Code:
1
// override all previous settings if the viewent isn't the client
2Ku2zoffя дополнил структурки Chud но он говорит ошибка 2274 на твою строчку. 2Дядя Миша
В общем я понял, нужно GetEntityByIndex делать всегда. Поганый Си уводит не в том направлении, говорит непроинициализировано.
Зачем нужны структурные переменные, ну те которые в халфе оканчиваются на _t? Почему нельзя сразу обратиться к переменным из которых состоит сама структура blah_s?
Зачем вот этот "треугольник":