97 lines
2.4 KiB
C#
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;
|
|
}
|
|
} |