using UnityEngine;
namespace Game
{
    /// 
    ///     音效池化管理
    /// 
    public class AudioPoolItem : ObjectPoolItemBase
    {
        public AudioSource AudioSource;
        public GameObject GameObject;
        protected override void OnDestroy()
        {
            base.OnDestroy();
            GameObject.transform.SetParent(AudioPoolManager.Instance.Root.transform);
        }
    }
    public class AudioPoolManager : ObjectPoolBase
    {
        public override void Update()
        {
            foreach (var pool in ObjectPool)
            foreach (var item in pool.Value)
            {
                if (!item.IsAlive) continue;
                if (((AudioPoolItem)item).AudioSource.isPlaying) item.Destroy();
            }
        }
        public void CreateSound(Transform transform, AudioClip audioClip)
        {
            var audioNew = Create($"Audio{audioClip.name}", item =>
            {
                item.GameObject = new GameObject("Audio");
                item.AudioSource = item.GameObject.AddComponent();
            });
            audioNew.GameObject.transform.parent = transform;
            var audioSource = audioNew.GameObject.GetComponent();
            audioSource.PlayOneShot(audioClip);
        }
    }
}
namespace Game
{
    public abstract partial class Util
    {
        public static void CreateSound(GameEntity entity, AudioClip audioClip)
        {
            var trans = entity.view.TransformViewOther;
            AudioPoolManager.Instance.CreateSound(trans, audioClip);
        }
    }
}