Рейтинг - 5.0 (3)

Класс шрифта (CFont) в plugin-sdk.

Класс CFont, как и класс CMessages, предназначен для вывода текста в игре. При этом, "сообщения" выводятся на указанное время, а рисование через "шрифт" нужно производить в каждом кадре.

Рассмотрим функции, которые принадлежат этому классу. Для этого можно открыть файл CFont.h, или же в исходном файле начать вводить "CFont::", и получить доступ к списку переменных и функций класса.

Мы рассмотрим только функции, которые можно использовать непосредственно для вывода текста. Например, функция CFont::Initialise вызывается игрой при старте, а CFont::Shutdown - при закрытии игры. Вряд ли нам понадобятся эти функции в коде плагинов.

// Обработка тегов в строке (например, ~r~, ~n~). Вызывается в функциях вывода, так что если мы выводим текст через PrintString(), вызывать эту функцию не нужно. 
static char *ParseToken(char *text, CRGBA & color, bool isBlip, char *tag); 
// Установка размера текста 
static void SetScale(float w, float h); 
// Установка размера текста, но с учётом языка игры 
static void SetScaleForCurrentlanguage(float w, float h); 
// Использовалось в Vice City для поворота текста. В SA работает криво. 
static void SetSlantRefPoint(float x, float y); 
// Использовалось в Vice City для поворота текста. В SA работает криво. 
static void SetSlant(float value); 
// Установка цвета текста 
static void SetColor(CRGBA color); 
// Установка стиля текста (доступные стили перечислены в перечислении eFontStyle) 
static void SetFontStyle(short style); 
// Установка длины строки при выводе текста слева 
static void SetWrapx(float value); 
// Установка длины строки при выводе текста по центру 
static void SetCentreSize(float value); 
// Установка длины строки при выводе текста справа 
static void SetRightJustifyWrap(float value); 
// Установка значения прозрачности всех текстов в игре 
static void SetAlphaFade(float alpha); 
// Установка цвета тени или обводки (одновременно может использоваться либо тень, либо обводка) 
static void SetDropColor(CRGBA color); 
// Установка размера тени 
static void SetDropShadowPosition(short value); 
// Установка размера обводки 
static void SetOutlinePosition(short value); 
// Включение/отключении пропорциональности букв в шрифте 
static void SetProp(bool on); 
// Установка фона для текста 
static void SetBackground(bool background, bool backgroundOnlyText); 
// Установка цвета фона 
static void SetBackgroundColor(CRGBA color); 
// Использовать выравнивание текста по длине строки (все слова в строке "растягиваются" в длину строки) 
static void SetJustify(bool on); 
// Установка выравнивания по стороне (перечисление eFontAlignment) 
static void SetAlignment(eFontAlignment alignment); 
// Получить длину строки. Параметры неизвестны. 
static float GetStringWidth(char *string, bool unk1, bool unk2); 
// Отрисовать тексты в рендер-буфере 
static void DrawFonts(); 
// Вывести текст 
static void PrintString(float x, float y, char *text);

Для примера выведем на экран информацию об игроке.

#include "plugin.h"
#include "game_sa\CFont.h" // класс CFont и его функции
#include "game_sa\CWeaponInfo.h" // класс CWeaponInfo и переменная ms_aWeaponNames
#include "game_sa\common.h" // функция FindPlayerPed(), подключение CPed.h
#include "stdio.h" // функция sprintf()

using namespace plugin;

class TestPlugin {
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]; // Создаём ссылку на поточное оружие игрока
 // форматируем строку для вывода
 char string[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;

Результат:


Теги: plugin sdk, CFont
Вход на сайт

Поиск
Категории раздела
Мини-чат
Пожалуйста, все вопросы по скриптингу задавать на форуме!
Наш опрос
Какая GTA Вам понравилась больше всего?
Всего ответов: 7
Активность на сайте
Пожертвования
Кошельки WebMoney:
U859420971000
R407741810602
Z331072372430
E314272616890
Друзья сайта
Полезные ресурсы
Статистика

Онлайн всего: 2
Гостей: 1
Пользователей: 1
wmysterio
Сегодня нас посетили:
wmysterio, Dyabda
Реклама