# Рисуем

В данной статье ознакомимся с рисованием в 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**


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00100/00700/000300.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
