Короны
Работа с коронами в plugin-sdk.
Работа с коронами в 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 modified 1yr ago