36 lines
1.0 KiB
C#
36 lines
1.0 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
[RequireComponent(typeof(AudioSource))]
|
|
public abstract class Weapon : MonoBehaviour
|
|
{
|
|
[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 abstract bool CanShoot { get; }
|
|
public abstract float ReloadPercent { get; }
|
|
|
|
|
|
//Методы
|
|
public abstract void Shoot();
|
|
|
|
/// <summary>
|
|
/// Вызывает событие выстрела для внешних систем. Списывает 1 снаряд.
|
|
/// </summary>
|
|
public void PerformShoot(AbstractProjectile projectile)
|
|
{
|
|
Ammo -= 1;
|
|
LastShootTime = Time.time;
|
|
ShootAudio?.Play();
|
|
OnShoot?.Invoke(projectile);
|
|
}
|
|
} |