# Короны

Основной модуль в Plugin SDK для работы с коронами — **CCoronas** и класс с таким же именем. Этот класс позволяет создавать и контроллировать короны. Сама корона описана классом `CRegisteredCorona`. Класс "CCoronas" содержит указатель на массив этих корон (файл "CCoronas.h").

```cpp
static CRegisteredCorona *aCoronas;
```

С этим массивом можно работать так же, как мы это делали ранее в модуле [CBulletTraces](/00100/00700/000200.md). Рассмотрим другие переменные класса "CCoronas":

| Имя переменной               | Тип          | Описание                                                                                               |
| ---------------------------- | ------------ | ------------------------------------------------------------------------------------------------------ |
| SunScreenX                   | float        | Позиция солнца X (экранные координаты)                                                                 |
| SunScreenY                   | float        | Позиция солнца Y (экранные координаты)                                                                 |
| SunBlockedByClouds           | bool         | "Закрыто" ли солнце облаками                                                                           |
| bChangeBrightnessImmediately | bool         | Включить резкое изменение яркости корон (при выключенном режиме они будут "затухать" или "появляться") |
| NumCoronas                   | unsigned int | Кол-во созданных корон в кадре (другими словами, кол-во используемых элементов в массиве aCoronas)     |
| LightsMult                   | float        | Интенсивность корон                                                                                    |
| MoonSize                     | unsigned int | Размер луны (используется для изменения размера луны при стрельбе в неё из снайперской винтовки)       |

В списке функций стоит рассмотреть следующие функции:

Создание короны с указанием текстуры:

```cpp
static void RegisterCorona(unsigned int id, CEntity *attachTo, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha, CVector const &posn, float radius, float farClip, RwTexture *texture, unsigned char flare, bool enableReflection, bool checkObstacles, int _param_not_used, float angle, bool longDistance, float nearClip, unsigned char fadeState, float fadeSpeed, bool onlyFromBelow, bool reflectionDelay)
```

Создание короны с указанием типа короны:

```cpp
static void RegisterCorona(unsigned int id, CEntity *attachTo, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha, CVector const &posn, float radius, float farClip, unsigned char coronaType, unsigned char flare, bool enableReflection, bool checkObstacles, int _param_not_used, float angle, bool longDistance, float nearClip, unsigned char fadeState, float fadeSpeed, bool onlyFromBelow, bool reflectionDelay)
```

Типы корон описаны в перечислении `eCoronaType` (файл "CRegisteredCorona.h"):

```cpp
enum eCoronaType { 
    CORONATYPE_SHINYSTAR, 
    CORONATYPE_HEADLIGHT, 
    CORONATYPE_MOON, 
    CORONATYPE_REFLECTION, 
    CORONATYPE_HEADLIGHTLINE, 
    CORONATYPE_RING_B = 9 
};
```

Рассмотрим параметры этих функций:

| Имя параметра        | Тип                          | Описание                                                                                                                                                                                                          |
| -------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                   | unsigned int                 | id короны. Для каждой созданной короны в кадре он должен быть уникальным.                                                                                                                                         |
| attachTo             | CEntity \*                   | игровой субьект, к которому "прицепляется" корона. Если такой субьект указан, координаты (параметр posn) указываются в системе координат этого субьекта (локальный оффсет). Если субьекта нет - используйте NULL. |
| red                  | unsigned char                | составляющая цвета R (0-255).                                                                                                                                                                                     |
| green                | unsigned char                | составляющая цвета G (0-255).                                                                                                                                                                                     |
| blue                 | unsigned char                | составляющая цвета B (0-255).                                                                                                                                                                                     |
| alpha                | unsigned char                | составляющая цвета A (0-255).                                                                                                                                                                                     |
| posn                 | CVector const &              | позиция короны.                                                                                                                                                                                                   |
| radius               | float                        | размер короны.                                                                                                                                                                                                    |
| farClip              | float                        | дальность прорисовки короны (дальняя граница отсечения при отрисовке короны).                                                                                                                                     |
| texture / coronaType | RwTexture \* / unsigned char | текстура или тип короны.                                                                                                                                                                                          |
| flare                | unsigned char                | тип бликов короны (1 или 2, 0 - бликов нет).                                                                                                                                                                      |
| enableReflection     | bool                         | включить отражение короны на мокром асфальте.                                                                                                                                                                     |
| checkObstacles       | bool                         | выполнить проверку на наличие преград между камерой и короной перед отрисовкой (если преграды есть, корона не отрисуется).                                                                                        |
| \_param\_not\_used   | int                          | неиспользуемый параметр.                                                                                                                                                                                          |
| angle                | float                        | угол короны (также не используется).                                                                                                                                                                              |
| longDistance         | bool                         | корону видно только издалека.                                                                                                                                                                                     |
| nearClip             | float                        | ближняя граница отсечения при отрисовке короны.                                                                                                                                                                   |
| fadeState            | unsigned char                | статус затенения (0 или 255).                                                                                                                                                                                     |
| onlyFromBelow        | bool                         | корону видно только тогда, когда камера находится ниже короны.                                                                                                                                                    |
| reflectionDelay      | bool                         | делать задержку при отрисовке отражения короны.                                                                                                                                                                   |

Обновление уже созданной короны (в функцию передается параметр - id созданной короны).

```cpp
static void UpdateCoronaCoors(unsigned int id, CVector const& posn, float farClip, float angle)
```

### Полный код плагина:

```cpp
#include "plugin.h"
#include "CCoronas.h"
#include "common.h"
#include "CMessages.h"

using namespace plugin;

class TestPlugin {
public:
    TestPlugin() {
        Events::gameProcessEvent += [] {
            CPed *playa = FindPlayerPed();
            if (playa) {
                CCoronas::RegisterCorona(5001, playa, 255, 0, 0, 255, CVector(-1.0f, -1.0f, 0.0f), 0.3f, 100.0f, CORONATYPE_SHINYSTAR, 0, 0, 0, 0, 0, 0, 0.5, 0, 15.0f, 0, 0);
                CCoronas::RegisterCorona(5002, playa, 255, 0, 0, 255, CVector(-1.0f, 1.0f, 0.0f), 0.3f, 100.0f, CORONATYPE_SHINYSTAR, 0, 0, 0, 0, 0, 0, 0.5, 0, 15.0f, 0, 0);
                CCoronas::RegisterCorona(5003, playa, 255, 0, 0, 255, CVector(1.0f, 1.0f, 0.0f), 0.3f, 100.0f, CORONATYPE_SHINYSTAR, 0, 0, 0, 0, 0, 0, 0.5, 0, 15.0f, 0, 0);
                CCoronas::RegisterCorona(5004, playa, 255, 0, 0, 255, CVector(1.0f, -1.0f, 0.0f), 0.3f, 100.0f, CORONATYPE_SHINYSTAR, 0, 0, 0, 0, 0, 0, 0.5, 0, 15.0f, 0, 0);
                CMessages::AddMessageJumpQ("Coronas are drawed!", 100, 0, 0);
            }
        };
    }
} test;
```

Для получения объекта игрока мы использовали функцию `FindPlayerPed` (файл "common.h").

Автор: **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/000400.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.
