Класс 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 <Windows.h>
#include "plugin\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()

Регистрация плагина и функции:
Код
System::RegisterPlugin("Test CFont", "DK", "test_font.asi", "1.0", 1, GAME_SA_1_0_US, NULL);
Core::RegisterFunc(FUNC_DRAWING, TestFont);

Функция вывода TestFont:
Код
void TestFont()
{
  char string[256];
  CPed *playa = FindPlayerPed(-1); // находим педа игрока  
  if(playa) // если пед найден
  {
  CWeapon &playaWep = playa->m_aWeapons[playa->m_nActiveWeaponSlot]; // Создаём ссылку на поточное оружие игрока
  // форматируем строку для вывода
  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_Type],
  playaWep.m_dwAmmoInClip, playaWep.m_dwTotalAmmo - playaWep.m_dwAmmoInClip, playa->m_wModelIndex);
  CFont::SetAlignment(ALIGN_LEFT); // выравние текста по левой стороне
  CFont::SetColor(CRGBA(255, 255, 255, 255)); // цвет текста
  CFont::SetOutlinePosition(1); // устанавливаем обводку текста
  CFont::SetBackground(true, true); // включаем бокс
  CFont::SetWrapx(500.0); // устанавливаем ширину строки
  CFont::SetBackgroundColor(CRGBA(0, 0, 0, 180)); // устанавливаем цвет бокса
  CFont::SetScale(0.7, 1.0); // размер шрифта
  CFont::SetFontStyle(FONT_SUBTITLES); // стиль шрифта
  CFont::SetProp(true); // включаем пропорциональность шрифта
  CFont::PrintString(15.0, 15.0, string); // выводим текст, указаываем координаты
  }
}

Полный код:
Код
#include <Windows.h>
#include "plugin\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;

void TestFont();

BOOL APIENTRY DllMain(HMODULE module, DWORD reason, LPVOID reserved)
{
  if(reason == DLL_PROCESS_ATTACH)
  {
  System::RegisterPlugin("Test CFont", "DK", "test_font.asi", "1.0", 1, GAME_SA_1_0_US, NULL);
  Core::RegisterFunc(FUNC_DRAWING, TestFont);
  }
  return TRUE;
}

void TestFont()
{
  char string[256];
  CPed *playa = FindPlayerPed(-1); // находим педа игрока  
  if(playa) // если пед найден
  {
  CWeapon &playaWep = playa->m_aWeapons[playa->m_nActiveWeaponSlot]; // Создаём ссылку на поточное оружие игрока
  // форматируем строку для вывода
  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_Type],
  playaWep.m_dwAmmoInClip, playaWep.m_dwTotalAmmo - playaWep.m_dwAmmoInClip, playa->m_wModelIndex);
  CFont::SetAlignment(ALIGN_LEFT); // выравние текста по левой стороне
  CFont::SetColor(CRGBA(255, 255, 255, 255)); // цвет текста
  CFont::SetOutlinePosition(1); // устанавливаем обводку текста
  CFont::SetBackground(true, true); // включаем бокс
  CFont::SetWrapx(500.0); // устанавливаем ширину строки
  CFont::SetBackgroundColor(CRGBA(0, 0, 0, 180)); // устанавливаем цвет бокса
  CFont::SetScale(0.7, 1.0); // размер шрифта
  CFont::SetFontStyle(FONT_SUBTITLES); // стиль шрифта
  CFont::SetProp(true); // включаем пропорциональность шрифта
  CFont::PrintString(15.0, 15.0, string); // выводим текст, указаываем координаты
  }
}

Результат:


Указатели и ссылки:
1 2 3
Вход на сайт

Поиск
Категории раздела
Мини-чат
Наш опрос
Что скажете о новом дизайне?
Всего ответов: 0
Активность на сайте
Друзья сайта
Статистика

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