# Рисуем

В данной статье ознакомимся с рисованием в Plugin-SDK. Нам понадобятся следующие хедеры:

```cpp
#include "plugin.h" 
#include "CSprite2d.h" 
#include "CTxdStore.h"
```

Мы разделим наш код на 3 части:

* Инициализация (Выполняется при старте игры). Сюда мы поместим загрузку текстуры. Событие `initRwEvent`.
* Рисование (выполняется в цикле игры). Здесь будет вывод текстуры на экран. Событие `drawingEvent`.
* Закрытие (выполняется при закрытии игры). Сюда поместим удаление текстуры. Событие `shutdownRwEvent`.

Для работы с текстурой мы будет использовать модуль `CSprite2d`. Мы создадим переменную-объект класса `CSprite2d`:

```cpp
static CSprite2d mySprite;
```

Устанавливаем пространство имен `plugin`, чтобы не писать `plugin::`...

```cpp
using namespace plugin;
```

Рассмотрим код, который мы добавляем в события.

```cpp
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, а после установки текстуры спрайту - восстанавливаем его.&#x20;

### Отрисовка:

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

### Удаление:

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

### Весь код:

```cpp
#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**
