using System; using System.Collections.Generic; using UnityEngine; public class ReplicasSystem : MonoBehaviour { [Header("Ссылки")] [SerializeField] ReplicasPlayer player; private List weapons; private bool initialized = false; [Header("Реплики")] [SerializeField] ReplicasSequence reloadedReplicas; [SerializeField] ReplicasSequence enemyShipDefeated; [SerializeField] ReplicasSequence enemyShipDamaged; public void Init() { player.Init(); weapons = G.WeaponModel.Weapons; weapons[0].OnReloaded += Weapon_OnReloaded; weapons[1].OnReloaded += Weapon_OnReloaded; EnemyShip.ShipDefeated += EnemyShip_ShipDefeated; EnemyShip.ShipDamaged += EnemyShip_ShipDamaged; ; initialized = true; } private void EnemyShip_ShipDamaged(EnemyShip obj) { player.EnqueueReplica(enemyShipDamaged); } private void EnemyShip_ShipDefeated(EnemyShip obj) { player.EnqueueReplica(enemyShipDefeated); } void OnDestroy() { if(initialized) { weapons[0].OnReloaded -= Weapon_OnReloaded; weapons[1].OnReloaded -= Weapon_OnReloaded; EnemyShip.ShipDefeated -= EnemyShip_ShipDefeated; } } private void Weapon_OnReloaded(Weapon weapon) { Debug.Log("перезарядка"); if(weapon == G.WeaponModel.CurrentWeapon) { Debug.Log("Отдаю реплику в плеер"); player.EnqueueReplica(reloadedReplicas); } } } [Serializable] public struct Replica { public AudioClip clip; public float lifetime; public bool playParallel; [Range(0, 1)] public float probability; [HideInInspector] public float creationTime; } [Serializable] public struct ReplicasSequence // для набора однообразных реплик { public List clips; public float lifetime; public bool playParallel; [Range(0, 1)] public float probability; public Replica GetRandomReplica() { if (clips == null || clips.Count == 0) return default(Replica); var clip = clips[UnityEngine.Random.Range(0, clips.Count)]; var replica = new Replica(); replica.clip = clip; replica.lifetime = lifetime; replica.playParallel = playParallel; replica.probability = probability; return replica; } }