sea-battle-vr/Assets/Scripts/Gameplay/ReplicasSystem.cs
2026-05-29 17:12:18 +03:00

97 lines
2.4 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
public class ReplicasSystem : MonoBehaviour
{
[Header("Ссылки")]
[SerializeField] ReplicasPlayer player;
private List<Weapon> 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<AudioClip> 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;
}
}