HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нубские вопросы от <censored> и других нубов (https://hlfx.ru/forum/showthread.php?threadid=4535)
Отправлено Smykov 21-04-2018 в 15:31:
Хочу сделать vgui-класс, выводящий текст на родительской Panel (это только лишь в данный момент хочется чтобы только лишь выводил).
Текст располагается относительно своей позиции, делая отступ в зависимости от textLocation.
Как сейчас я понимаю принцип работы панелей:
1) Создали мы экземпляр класса, унаследованного от Panel;
2) Задали родителя, который вызывает paint'ы дочерних элементов;
3) Вот тут уже под вопросом. Внутри paint'а самого экземпяра система координат либо относительная (К примеру, drawSetTextPos(0, 0) ==getPos(varX, varY), то есть положение экземпляра на родителе), либо абсолютная (drawSetTextPos(varX, varY)==getPos(varX, varY), может мутно, но надеюсь, вы меня поняли :-) )
В итоге, отрисовка только фона, притом, что в конструкторе задал false. текста нету.
C++ Source Code:
3 | class CLinkLabel : public Panel { |
6 | setPaintBackgroundEnabled(false); |
7 | m_textLocation=Location::l_left; |
9 | CLinkLabel(const char* text) : m_linkValue(text) { CLinkLabel(); } |
10 | CLinkLabel(const String& str) : m_linkValue(str) { CLinkLabel(); } |
12 | enum Location { l_left=0, l_right=1, l_center=2 }; |
14 | void setText(const char* text) { |
17 | void setTextLocationOnPos(CLinkLabel::Location argLocation) { |
18 | m_textLocation=argLocation; |
22 | const char* text=m_linkValue.getChars(); |
23 | int textLength=m_linkValue.getCount(); |
25 | CSchemeManager *pSchemes=gViewPort->GetSchemeManager(); |
26 | SchemeHandle_t hTitleFontScheme=pSchemes->getSchemeHandle("Briefing Text"); |
27 | Font* pFont=pSchemes->getFont(hTitleFontScheme); |
29 | drawSetTextFont(pFont); |
30 | drawSetTextColor(64, 128, 228, 0); |
34 | pFont->getTextSize(text, wide, tall); |
36 | switch(m_textLocation) { |
48 | drawPrintText(text, textLength); |
52 | Location m_textLocation; |
C++ Source Code:
1 | // Где-то в конструкторе родителя |
2 | // CLinkLabel* m_pLinkLabel; // объявление в заголовочном файле |
4 | m_pLinkLabel=new CLinkLabel("SampleText1 it's ROAR"); |
5 | m_pLinkLabel->setParent(this); |
6 | m_pLinkLabel->setPos(325, 250); |
7 | m_pLinkLabel->setSize(300, 60); |
Размеры элементы задал на всякий крайний, вдруг он внутри самого себя отрисовку делает, то есть drawSetTextPos(0, 0)==m_pLinkLabel->setPos(325, 250).
Отправлено ~ X ~ 23-04-2018 в 08:38:
Меня малость напрягает
void setText(const char* text) {
m_linkValue=text;
}
к моменту вызова paint() указатель точно валидный? дебаггером смотрел?
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено Smykov 23-04-2018 в 19:07:
~ X ~ там конструкторы есть, которые инициализируют m_linkValue.
Сейчас уже кое-что прояснилось, система координат относительная, а проблема была в том, что у объекта не было size'а, он отрисовывался, но не было места куда выводить.
Другая проблема.
Создаём объект
C++ Source Code:
1 | m_pLinkLabel=new CLinkLabel("SampleText1 it's ROAR"); |
2 | m_pLinkLabel->setParent(this); |
3 | m_pLinkLabel->setPos(15, 60); |
4 | m_pLinkLabel->setSize(300, 150); |
Стандартное значение m_textLocaition равно l_left, то есть текст "не съезжает" никуда.
Функция paint, у которой для теста мы зададим x и y координаты текста.
C++ Source Code:
1 | const char* text=m_linkValue.getChars(); |
2 | int textLength=m_linkValue.getCount(); |
4 | CSchemeManager *pSchemes=gViewPort->GetSchemeManager(); |
5 | SchemeHandle_t hTitleFontScheme=pSchemes->getSchemeHandle("Briefing Text"); |
6 | Font* pFont=pSchemes->getFont(hTitleFontScheme); |
9 | drawSetTextColor(64, 128, 228, 0); |
11 | int x=0, y=0, wide, tall; |
12 | pFont->getTextSize(text, wide, tall); |
14 | switch(m_textLocation) { |
25 | drawPrintText(text, textLength); |
Я приведу несколько примеров, изменяя x. Всё это на Xash3D
1) x=0 y=0
2) x=-10 y=0
3) x=-11 y=0
Вроде всё нормас, на один пиксель сместились
4) x=-12 y=0
И ещё на один пиксель, и аж на два символа сместились
Вот всё это к чему, и опять таки повторюсь. Может я неправильно расставляю позиции, или ещё что делаю не так?
Просто у меня догадок особо не стало, когда этот же код на GoldSrc (SDK 2005 с этого сайта вроде бы) скопировал, и там нормально работает, по крайней мере без всяких этих тестов, уже текст нормально позиционируется.
GoldSrc. Зададим уже сразу l_center
x=getPosX(/*функция для наглядности*/)-wide/2; y=0
Думаю в подробностях объяснил свой вопрос, что посоветуете?
Отправлено Crystallize 24-04-2018 в 07:10:
А gaitsequence как-то влияет на viewangles и направление движения игрока как энтити или оно просто для красоты, для модельки? И есть ли в ХЛ какой-то ограничитель скорости поворота игрока? (при thirdperson)
Отправлено Дядя Миша 24-04-2018 в 08:00:
Crystallize только для модельки
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ~ X ~ 24-04-2018 в 09:51:
VGUI - это местный ад для хл-моддеров. В него ссылают по плохим указателям... )
Я сам уже не помню, каким чудом что-то там сделал. Хотя, нет. Так и не сделал. Меню с игроками появляется не там где я изначально хотел
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено Chyvachok 28-04-2018 в 10:09:
Математический вопрос есть по эффекту дымка из паранои, который я использовал как базу для своих эффектов, вернее по его размеру, он там при отскакивании от стены с нуля увеличиваться к тому времени к которому он должен исчезнуть до своего полного размера:
C++ Source Code:
1 | float frac = (time - birthTime) / m_fLife; |
3 | return 1; // delete object |
5 | float size = PuffSize * frac; |
А как правильно сделать наоборот, чтобы он заранее появлялся в своем полном размере, и уменьшался до нуля к frac 1? Я пробовал как-то так но мне что-то кажется что это не совсем корректно: size = PuffSize - (frac*PuffSize);
Отправлено XaeroX 28-04-2018 в 10:21:
frac = 1 - frac;
перед умножением
__________________
Отправлено Chyvachok 28-04-2018 в 11:19:
XaeroX спасибо, работает, я чуть по другому сделал: size = PuffSize * (1 - frac); по идее так тоже пойдет?
Отправлено XaeroX 28-04-2018 в 13:06:
Chyvachok да, конечно, это все то же самое. Вопрос вкуса.
__________________
Отправлено Smykov 29-04-2018 в 14:54:
makevfont
1) можно ли с его помощью создать шрифт с Кириллицей? Если да, то подробнее пожалуйста.
2) Правильно ли я понимаю, в значении параметра font нужно указывать шрифт, который установлен в системе? то есть, есть у меня ttf Terminus, windows открывает его своим стандартным приложением просмотра шрифтов, в котором можно установить шрифт.
Отправлено Дядя Миша 29-04-2018 в 19:26:
Цитата:
Smykov писал:
можно ли с его помощью создать шрифт с Кириллицей? Если да, то подробнее пожалуйста.
makevfont или makefont? Если первое, то да, должен поидее. Если второе, то только ксашевская реализация.
Добавлено 29-04-2018 в 22:25:
Цитата:
Smykov писал:
Правильно ли я понимаю, в значении параметра font нужно указывать шрифт, который установлен в системе?
Правильно. Я так для римейка кваки делал шрифты.
Добавлено 29-04-2018 в 22:26:
ЗЫ. Имя шрифта нужно указывать именно так как он в системе отображается со всеми пробелами и заключать в кавычки.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Smykov 30-04-2018 в 08:02:
Дядя Миша всё понял спасибо.
Сразу назревает вопрос, что не так я делаю?
makevfont.exe -font "Times New Roman" -pointsize 16 "1024_MyFont.tga"
И на месте где должна быть кириллица "кракозябра"
Отправлено Дядя Миша 30-04-2018 в 08:33:
Надо его исправлять значит.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Smykov 30-04-2018 в 10:09:
Не совсем понял, makevfont? Если вы про него, то может, чисто ради эксперимента, у вас на компьютере есть makevfont. Не зальёте ли его на файлообменник? буду признателен
Добавлено 30-04-2018 в 13:09:
Отмена с "заливом".
Нашёл интересный пост: https://hlfx.ru/forum/showthread.php?threadid=1827
Он меня натолкнул на решение проблемы со шрифтом TTF, установленным пользователем. Может кому пригодится.
Установил, скаченный из интернета, Terminus. До этого у меня проблем с ним не было, потому что в программах задавал путь к файлу ttf. А тут не получается -font "Terminus". Зашел в реестр (путь из того поста, только не в FontSubstitutes, а Fonts). И увидел там свой шрифт - Terminus (TTF) (там у всех шрифтов в конце дописывается "%пробел% (TrueType)"). В итоге font "Terminus (TTF)" прокатил. но кракозябры остались. Вот тут уже пошёл по совету автора поста - сделать RUSSIAN_CHARSET в функции CreateFont проекта makevfont. Только сегодня скачал full sdk, и увидел эти проекты. Единственное, что осталось "одолеть", это makefont, с первого раза не получилось сделать.