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, с первого раза не получилось сделать.