Уроки моддинга
Основной раздел
Search
K
Links

Рисуем

Рисование на экране с plugin-sdk.
В данной статье ознакомимся с рисованием в Plugin-SDK. Нам понадобятся следующие хедеры:
#include "plugin.h"
#include "CSprite2d.h"
#include "CTxdStore.h"
Мы разделим наш код на 3 части:
  • Инициализация (Выполняется при старте игры). Сюда мы поместим загрузку текстуры. Событие initRwEvent.
  • Рисование (выполняется в цикле игры). Здесь будет вывод текстуры на экран. Событие drawingEvent.
  • Закрытие (выполняется при закрытии игры). Сюда поместим удаление текстуры. Событие shutdownRwEvent.
Для работы с текстурой мы будет использовать модуль CSprite2d. Мы создадим переменную-объект класса CSprite2d:
static CSprite2d mySprite;
Устанавливаем пространство имен plugin, чтобы не писать plugin::...
using namespace plugin;
Рассмотрим код, который мы добавляем в события.
Events::initRwEvent += [] {
// Добавляем новый слот для нашего txd
int txd = CTxdStore::AddTxdSlot("mytxd");
// Загружаем наш txd в выделенный слот
CTxdStore::LoadTxd(txd, "MODELS\\MYTXD.TXD");
// Увеличиваем счётчик использований для созданного txd
CTxdStore::AddRef(txd);
// Сохраняем текущий txd
CTxdStore::PushCurrentTxd();
// Устанавливаем наш txd как текущий
CTxdStore::SetCurrentTxd(txd);
// Назначаем текстру нашему спрайту
mySprite.SetTexture("tex", "texA");
// Восстанавливаем сохранённый txd
CTxdStore::PopCurrentTxd();
};
Для установки текстуры спрайту, нам нужно установить txd, в котором находится нужная текстура, как текущий. Поэтому мы сохраняем поточный текущий txd, а после установки текстуры спрайту - восстанавливаем его.

Отрисовка:

Events::drawingEvent += [] {
// Рисуем наш спрайт
mySprite.Draw(20.0, 20.0, 200.0, 200.0, CRGBA(255, 255, 255, 255));
};

Удаление:

Events::shutdownRwEvent += [] {
// Удаляем наш спрайт
mySprite.Delete();
// Удаляем наш txd
CTxdStore::RemoveTxdSlot(CTxdStore::FindTxdSlot("mytxd"));
};

Весь код:

#include "plugin.h"
#include "CSprite2d.h"
#include "CTxdStore.h"
// Используем пространство имен "plugin"
using namespace plugin;
class TestPlugin {
public:
TestPlugin() {
// Переменная-объект спрайта
static CSprite2d mySprite;
Events::initRwEvent += [] {
// Добавляем новый слот для нашего txd
int txd = CTxdStore::AddTxdSlot("mytxd");
// Загружаем наш txd в выделенный слот
CTxdStore::LoadTxd(txd, "MODELS\\MYTXD.TXD");
// Увеличиваем счётчик использований для созданного txd
CTxdStore::AddRef(txd);
// Сохраняем текущий txd
CTxdStore::PushCurrentTxd();
// Устанавливаем наш txd как текущий
CTxdStore::SetCurrentTxd(txd);
// Назначаем текстру нашему спрайту
mySprite.SetTexture("tex", "texA");
// Восстанавливаем сохранённый txd
CTxdStore::PopCurrentTxd();
};
Events::shutdownRwEvent += [] {
// Удаляем наш спрайт
mySprite.Delete();
// Удаляем наш txd
CTxdStore::RemoveTxdSlot(CTxdStore::FindTxdSlot("mytxd"));
};
Events::drawingEvent += [] {
// Рисуем наш спрайт
mySprite.Draw(20.0, 20.0, 200.0, 200.0, CRGBA(255, 255, 255, 255));
};
}
} test;
Автор: DK22Pac