<aside> 📌

Компонент многоразового использования, предназначенный для обработки логики стрельбы снарядами или выполнения рейкаст-атак из персонажа или актора. Он инкапсулирует основные механики, стрельба разными режимами, управления боеприпасами, спавн снарядов и многое другое, что способствует повторному использованию кода и его удобству в поддержке.

</aside>

📑 Структура компонента

<aside>

⚙️ Настройки компонента

<aside>

🧩 Архитектурная роль

<aside>

1. Инкапсуляция основной логики стрельбы: Компонент несет полную ответственность за управление всеми аспектами стрельбы, создание снарядов или лучей, управление боеприпасами, и активацию эффектов.

2. Повторное использование и модульность: ShootingComponent разработан для добавления к любому Актеру, которому необходимо стрелять. Он не жестко связан с конкретным типом персонажа.

3. Коммуникация на основе событий: Компонент использует делегаты для передачи событий стрельбы другим частям системы. Например, OnFire сигнализирует анимационной системе о необходимости воспроизвести анимацию стрельбы, или OnAmmoChanged уведомляет элемент UI обновить отображение боеприпасов.

</aside>

📌 Свойства

Название Тип Доступность Описание
AvailableFireModes TArray<EFireMode> private Определяет доступные режимы стрельбы.
FireMode EFireMode private Текущий режим стрельбы оружия. Определяет, как происходит выстрел (одиночный, автоматический, очередь и т.д.).
FireType EFireType private Определяет основной тип стрельбы данного оружия. Рейкаст или проджектайлами.
FireRate float private Скорострельность оружия в выстрелах в секунду.
BulletsPerShot int32 private Количество снарядов-пуль, выпускаемых за один выстрел.
HitscanRange float private Максимальная дистанция, на которую действует выстрел при использовании техники "хитскан".
HitscanTraceType TEnumAsByte<ETraceTypeQuery> private Тип трейса хитскана.
MuzzleSocketName FName private Имя сокета на сетке актера-владельца, откуда будет исходить выстрел.
DamageConfig FDamageConfig private Конфигурация, определяющая параметры урона, наносимого этим объектом.
ProjectileActorClass TSubclassOf<AActor> private Класс актера, который будет использоваться как снаряд.
Ammo FAmmoInfo private Информация о боеприпасах оружия, включая текущее количество в магазине и общий запас.
SpreadConfig FSpreadConfig private Информация о разбросе (спреде) пуль. Определяет, насколько пули отклоняются от центральной линии при стрельбе.
FireSound USoundBase* private Звуковой эффект (SFX), воспроизводимый при выстреле.
MuzzleFlash UNiagaraSystem* private Визуальный эффект (VFX), воспроизводимый в точке выстрела (дуле оружия).
bDebug bool public Флаг, включающий/выключающий режим отладки.

📌 Функции

Название Сигнатура Доступность Описание
StartFire void() public Пробует запустить процесс стрельбы.
FinishFire void() public Прекращает процесс стрельбы из оружия.
CanFire bool() public Проверяет, готово ли оружие к выполнению операции стрельбы в данный момент.
ConsumeAmmo void(int32 Amount) public Уменьшает боеприпасы.
SetAmmo void(FAmmoInfo NewAmmo) public Устанавливает новую информацию о боеприпасах для оружия.
SetFireType void(EFireType NewFireType) public Устанавливает тип стрельбы для оружия.
SetFireMode bool(EFireMode NewFireMode, bool bForce) public Устанавливает новый режим стрельбы для оружия.
SetAvailableFireModes void(const TArray<EFireMode>& NewAvailableFireModes) public Устанавливает новый список достпных режимов стрельбы для оружия.
SetFireRate void(float NewFireRate) public Устанавливает новую скорость стрельбы для оружия.
SetSpreadConfig void(FSpreadConfig NewSpreadConfig) public Устанавливает новую базовую информацию о разбросе для оружия.
SetSpreadScale void(float NewScale) public Устанавливает новое значение для масштаба разброса.
SetDamageConfig void(FDamageConfig NewDamageConfig) public Устанавливает конфикг урона, наносимый оружием.
SetHitscanRange void(float NewRange) public Устанавливает дальность действия трассировки луча (hitscan).
SetBulletPerShot void(int32 NewBulletPerShot) public Устанавливает количество "пуль" (трассировок), выпускаемых за один выстрел.
SetHitscanTraceType void(TEnumAsByte<ETraceTypeQuery> NewHitscanTraceType) public Устанавливает тип трассировки (trace type), который будет использоваться для hitscan-запросов.
SetProjectilePoolManager void(UObjectPoolComponent* NewManager, bool bRefresh) public Устанавливает менеджер пула для пуль (снарядов).
SetFireSound void(USoundBase* NewFireSound) public Устанавливает звук, который будет воспроизводиться во время выстрела.
SetMuzzleFlash void(UNiagaraSystem* NewMuzzleFlash) public Устанавливает визуальный эффект вспышки у дула оружия.
SetMesh void(USkeletalMeshComponent* NewMesh) public Устанавливает или обновляет ссылку на компонент меша, используемый для стрельбы.
GetDamageConfig FDamageConfig() public Возвращает конфиг урона.
GetFireMode EFireMode() public Возвращает текущий режим стрельбы оружия.
GetAvailableFireModes TArray<EFireMode>() public Возвращает доступные типы стрельбы.
GetFireRate float() public Возвращает скорострельность оружия.
GetAmmo FAmmoInfo() public Возвращает текущую информацию о боеприпасах оружия.
HasAmmoInMagazine bool() public Проверяет, есть ли патроны в текущем магазине.
IsFullAmmoInMagazine bool() public Проверяет, полностью ли заполнен магазин.
IsFiring bool() public Проверяет, стреляет ли оружие в данный момент.
GetSpreadConfig FSpreadConfig() public Возвращает базовую информацию о разбросе оружия.
GetSpreadScale float() public Возвращает текущий масштаб разброса.
GetLastHitResult FHitResult() public Возвращает результат последнего совершенного "хитскан" выстрела.
GetProjectilePoolManager UObjectPoolComponent*() public Возвращает текущий менеджер пула для пуль (снарядов).
GetMesh USkeletalMeshComponent*() public Получает ссылку на компонент меша, используемый для стрельбы.
RefreshMagazine void() public Обновляет состояние магазина, перенося патроны из общего запаса.
NextFireMode void() public Переключает на следующий FireMode.
CalculateSpread FVector() public Рассчитывает вектор направления выстрела с учетом разброса.
CalculateDamageByDistance float(float InDamage, float InDistance) public Рассчитывает величину урона в зависимости от пройденного расстояния.
GetFireLocation FVector() public Возвращает позицию, откуда будет произведен выстрел.
GetFireDirection FVector() public Возвращает базовое направление, в котором будет произведен выстрел.
GetMuzzleSocketLocation FVector() public Возвращает мировую позицию сокета "Muzzle" (дула) на сетке оружия.

📌 Делегаты

Название Сигнатура Описание
OnStartFire void() Делегат, который вызывается, когда стрельба фактически начинается.
OnFinishFire void() Делегат, который вызывается, когда стрельба завершается.
OnFire void() Делегат, который вызывается каждый раз, когда происходит фактический выстрел.
OnPostSpawnLineTrace void(const FHitResult& Hit) Делегат, который вызывается после выполнения трассировки луча (line trace) в процессе стрельбы.
OnTargetHit void(AActor* HitActor, float DamageAmount, const FHitResult& HitInfo, const FGameplayTag SurfaceTag) Делегат, который вызывается при попадание в цель.
OnAmmoUpdated void(const FAmmoInfo& NewAmmo) Делегат, который вызывается при обновление патрон.
OnFireModeChanged void(EFireMode NewFireMode) Делегат, который вызывается при смене режима огня.