2026-05-18 17:49:37 +03:00

47 lines
1.3 KiB
C#

using System;
using UnityEngine;
[RequireComponent(typeof(AudioSource))]
public abstract class Weapon : MonoBehaviour
{
public event Action<int> AmmoAdded;
[Header("Ссылки")]
[SerializeField] protected GameObject ProjectilePrefab;
[SerializeField] protected Transform ShootPoint;
[SerializeField] protected GameObject Owner;
[SerializeField] protected AudioSource ShootAudio;
public int Ammo = 20;
protected float LastShootTime = -1000;
//События
public event Action<AbstractProjectile> OnShoot;
public event Action<int> AmmoChanged;
//Свойства
public abstract bool CanShoot { get; }
public abstract float ReloadPercent { get; }
//Методы
public abstract void Shoot();
/// <summary>
/// Вызывает событие выстрела для внешних систем. Списывает 1 снаряд.
/// </summary>
public void PerformShoot(AbstractProjectile projectile)
{
Ammo -= 1;
AmmoChanged?.Invoke(Ammo);
LastShootTime = Time.time;
ShootAudio?.Play();
OnShoot?.Invoke(projectile);
}
public void AddAmmo(int ammoToAdd)
{
Ammo += ammoToAdd;
AmmoChanged?.Invoke(Ammo);
AmmoAdded?.Invoke(ammoToAdd);
}
}