Класс CFont, как и класс CMessages, предназначен для вывода текста в игре. При этом, "сообщения" выводятся на указанное время, а рисование через "шрифт" нужно производить в каждом кадре. Рассмотрим функции, которые принадлежат этому классу. Для этого можно открыть файл CFont.h, или же в исходном файле начать вводить CFont::, и получить доступ к списку переменных и функций класса:
Мы рассмотрим только функции, которые можно использовать непосредственно для вывода текста. Например, функция CFont::Initialise вызывается игрой при старте, а CFont::Shutdown — при закрытии игры. Вряд ли нам понадобятся эти функции в коде плагинов.
// Обработка тегов в строке (например, ~r~, ~n~). Вызывается в функциях вывода, так что если мы выводим текст через PrintString(), вызывать эту функцию не нужно.
staticchar*ParseToken(char*text,CRGBA& color,bool isBlip,char*tag); // Установка размера текста staticvoidSetScale(float w,float h); // Установка размера текста, но с учётом языка игры staticvoidSetScaleForCurrentlanguage(float w,float h); // Использовалось в Vice City для поворота текста. В SA работает криво. staticvoidSetSlantRefPoint(float x,float y); // Использовалось в Vice City для поворота текста. В SA работает криво. staticvoidSetSlant(float value); // Установка цвета текста staticvoidSetColor(CRGBA color); // Установка стиля текста (доступные стили перечислены в перечислении eFontStyle) staticvoidSetFontStyle(short style); // Установка длины строки при выводе текста слева staticvoidSetWrapx(float value); // Установка длины строки при выводе текста по центру staticvoidSetCentreSize(float value); // Установка длины строки при выводе текста справа staticvoidSetRightJustifyWrap(float value); // Установка значения прозрачности всех текстов в игре staticvoidSetAlphaFade(float alpha); // Установка цвета тени или обводки (одновременно может использоваться либо тень, либо обводка) staticvoidSetDropColor(CRGBA color); // Установка размера тени staticvoidSetDropShadowPosition(short value); // Установка размера обводки staticvoidSetOutlinePosition(short value); // Включение/отключении пропорциональности букв в шрифте staticvoidSetProp(bool on); // Установка фона для текста staticvoidSetBackground(bool background,bool backgroundOnlyText); // Установка цвета фона staticvoidSetBackgroundColor(CRGBA color); // Использовать выравнивание текста по длине строки (все слова в строке "растягиваются" в длину строки) staticvoidSetJustify(bool on); // Установка выравнивания по стороне (перечисление eFontAlignment) staticvoidSetAlignment(eFontAlignment alignment); // Получить длину строки. Параметры неизвестны. staticfloatGetStringWidth(char*string,bool unk1,bool unk2); // Отрисовать тексты в рендер-буфере staticvoidDrawFonts(); // Вывести текст staticvoidPrintString(float x,float y,char*text);
Для примера выведем на экран информацию об игроке.
#include"plugin.h"#include"CFont.h"// класс CFont и его функции#include"CWeaponInfo.h"// класс CWeaponInfo и переменная ms_aWeaponNames#include"common.h"// функция FindPlayerPed(), подключение CPed.h#include"stdio.h"// функция sprintf()usingnamespace plugin;classTestPlugin {public:TestPlugin() { Events::drawingEvent += [] { CPed *playa =FindPlayerPed(); // находим педа игрокаif (playa) { // если пед найден CFont::SetAlignment(ALIGN_LEFT); // выравние текста по левой стороне CFont::SetColor(CRGBA(255,255,255,255)); // цвет текста CFont::SetOutlinePosition(1); // устанавливаем обводку текста CFont::SetBackground(true,true); // включаем бокс CFont::SetWrapx(500.0f); // устанавливаем ширину строки CFont::SetBackgroundColor(CRGBA(0,0,0,180)); // устанавливаем цвет бокса CFont::SetScale(0.7f,1.0f); // размер шрифта CFont::SetFontStyle(FONT_SUBTITLES); // стиль шрифта CFont::SetProp(true); // включаем пропорциональность шрифта CWeapon &playaWep = playa->m_aWeapons[playa->m_nActiveWeaponSlot]; // Создаём ссылку на поточное оружие игрока
// форматируем строку для выводаcharstring[256]; sprintf(string, "Player Info:~n~Health: ~r~%.2f/%.2f ~w~Armour: ~b~%.2f~n~~w~Weapon: ~y~%s ~w~Ammo: ~g~%d/%d~n~~w~ModelId: ~p~%d",
playa->m_fHealth, playa->m_fMaxHealth, playa->m_fArmour, CWeaponInfo::ms_aWeaponNames[playaWep.m_nType],
playaWep.m_nAmmoInClip,playaWep.m_nTotalAmmo -playaWep.m_nAmmoInClip,playa->m_wModelIndex); CFont::PrintString(15.0f,15.0f, string); // выводим текст, указаываем координаты } }; }} test;