Планируется ли экспорт функций для работы со шрифтами и встроенным imagelib'ом в клиентку? Если я что-то просмотрел, и он есть, подскажите, как называется/какие заголовки подключать надо?
Для работы со шрифтами есть функция gEngfuncs.pfnDrawCharacter
рисует шрифт creditsfont из gfx.wad. Других функций нет и не планируется. По крайней мере в Xash3D.
Для работы с имиджлибом есть функции в RenderAPI. Там достаточно большой набор.
Спасибо. Именно то, что я искал. Ещё одной вещи не могу только найти - какие функции отвечают за показ курсора и захват клавиатурного ввода, либо их надо писать самому?
domded курсор может эмулироваться через ВГУИ. Квар для этого есть. По крайней мере в СДК 2.3. В последней версии я почему-то не нашёл. Если этот код из вгуи модифицировать, можно рисовать любой спрайт вместо тгашного курсора.
Цитата:
domded писал: захват клавиатурного ввода
Ковыряй TeamFortressViewport. Там есть примеры захвата клавиш. Вызывать свою функцию можно скорее всего из CHud::Redraw или CHud::Think. Это всё на клиентке в оригинальной халфе есть. Только вот в ксашмоде нету ВГУИ.
Буду смотреть в сторону худ_кейевент. Это скорее всего тоже то, что мне нужно, только в ксашхт он находится в cdll_int.
А с вгуи проблема - его нет. Можно ли заблокировать перемещение мышы в худ_маусмув? Чтобы персонаж не двигал головой. С отрисовкой курсора я разберусь.
Рисует нормально, картинка отображается. Но если при нахождении картинки на экране подойти к триггеру, который вызывает message на экран (типа того, которое пишется около колёс пушек на карте xash_demo ), либо название главы в оригинальной халве, текст становится нечитабельным. То есть он рисуется, но вместо букв какая-то полупрозрачная мешанина из пикселей. Я не очень хорошо знаю опенгл, может быть что-то забыл отключить после вывода картинки?
В ксаше нельзя использовать pglBind текстуре, поскольку это нарушает внутреннюю синхронизацию стейтов с движком.
Используй GL_Bind, внутреннюю движковую функцию. Она умная, она сама определить тип текстуры 1D\2D\3D\Cubemap и сама включит\выключит нужные стейты. Вообще, всё что касается текстур - надо использовать движковые функции для работы с ними, иначе похеришь стейты.
О, да... С перехватом клавиш гемор ещё тот!! Я так и не смог сделать нормальный перехват нажатий в доске почёта - если юзер кликнул на доске мышкой, этот клик заедает и игрок стреляет, даже если ЛМБ была авно отпущена.
Ну ты-то в вгуи хардкодил, а я пишу это всё нативно через гл и прочее.
Дядя Миша, раз уж тут раздел багрепорта плавно получился, то пишу сюда.
Проблема изменением pglBing на GL_Bind не решилась. То есть, если я в своём контроле вызываю gEngfuncs.pfnDrawCharacter после отрисовки картинки, то получается всё та же мешанина. Единствнный выход - поставить картинку порядком отрисовки ниже текста.
Так же есть ещё одна странная проблема: HUD_Key_Event ловит не все клавиши. Попробуйте поставить простой алерт и понажимать все подряд клавиши на клавиатуре. У меня, например, не ловятся кнопки m,n, ещё какие-то с правой части клавиатуры. Ваш багфикс ещё не имплементировал, дождусь официального обдейда. Если перепишу функцию в движке полностью по-нормальному, то выложу её сюда.
И ещё один вопрос. Так как png-шный шрифт я ещё не имплементировал, хочу сначала попробовать отточить всё на встроенном - появился неприятный глюк этого самого встроенного шрифта - невозможно управлять его прозрачностью. То есть, если я рисую подложку без прозрачности (255), а потом вызываю pfnDrawCharacter, то шрифт этот, который на подложку находит, не рисуется. У него прозрачность, что ли, захардкожена? Подложка рисуется следующим образом.
С первой проблемой (HUD_KeyEvent ловит не все клавиши) разобрался. Нужно просто было поменять местами условия:
C++ Source Code:
1
if( !clgame.dllFuncs.pfnKey_Event(down,key,kb) )
2
{
3
// handled in client.dll
4
}
5
elseif( !kb )
6
{
7
if( key >= 200 )
8
Msg( "%s is unbound, use controls menu to set.\n", Key_KeynumToString( key ));
9
}
В движке.
Добавлено 09-03-2014 в 20:54:
Кстати, странно. Если я перекломпилрую движок (даже чистый) в релизе, то игра вылетает, даже не загружаясь. Билд 2643. В дебаге всё работает.
Может быть это связано с тем, что ксашмод от ноября 23-2013. Буду тестить ещё.
Добавлено 09-03-2014 в 20:55:
Пишет это:
Sys_LoadLibrary: Loading bin/client.dll - ok
CL_LoadProgs: found single callback export
CL_LoadProgs: failed to get address of HUD_ChatInputPosition proc
CL_LoadProgs: failed to get address of HUD_GetPlayerTeam proc
CL_LoadProgs: failed to get address of HUD_ClipMoveToEntity proc
Sys_Crash: call 1009DAC8 at address C0000005
Sys_FreeLibrary: Unloading xash.dll
Да, с номером билда вышла ошибочка. Билд 2463, самый последний, тестовый. Если его прокомпилировать в релизной конфигурации (xash.dll), то он выдаёт лог, написанный выше. Не важно что, оригинальная халва, ксаш-мод или какие-либо другие моды (типа aom). В дебажной всё нормально, по крайней мере запускается и можно побегать.
Добавлено 10-03-2014 в 03:11:
И, да. Я всё-таки пытаюсь написать эдит, но столкнулся ещё с одной проблемой. Есть ли в клиентке функция для перевода кода клавиши из HUD_KeyEvent в код символа в зависимости от языка и нажатой клавиши шифт? Либо придётся писать полностью свой перехват клавиатуры? Конечно, можно в движке перекодить всю часть, отвечающую за ввод, и вытащить всё, что мне надо, из ввода в консоль, но это не вариант, ибо буду пользоваться своим новомодным поделием только я.