Короны

Работа с коронами в plugin-sdk.

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

static CRegisteredCorona *aCoronas;

С этим массивом можно работать так же, как мы это делали ранее в модуле CBulletTraces. Рассмотрим другие переменные класса "CCoronas":

Имя переменнойТипОписание

SunScreenX

float

Позиция солнца X (экранные координаты)

SunScreenY

float

Позиция солнца Y (экранные координаты)

SunBlockedByClouds

bool

"Закрыто" ли солнце облаками

bChangeBrightnessImmediately

bool

Включить резкое изменение яркости корон (при выключенном режиме они будут "затухать" или "появляться")

NumCoronas

unsigned int

Кол-во созданных корон в кадре (другими словами, кол-во используемых элементов в массиве aCoronas)

LightsMult

float

Интенсивность корон

MoonSize

unsigned int

Размер луны (используется для изменения размера луны при стрельбе в неё из снайперской винтовки)

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

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

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)

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

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"):

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 созданной короны).

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

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

#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

Last updated