using AssetKits.ParticleImage;
using System.Collections;
using UnityEngine;
using UnityEngine.Events;
/// 
/// 材料效果
/// 
public class StuffEffects : MonoBehaviour
{
    /// 
    /// 生成音效次数
    /// 
    private int generateAudioNumber;
    /// 
    /// 到达音效次数
    /// 
    private int arriveAudioNumber;
    /// 
    /// UI粒子
    /// 
    public ParticleImage particleImage;
    /// 
    /// 结束事件
    /// 
    private UnityAction endAction;
    /// 
    /// 材料类型
    /// 
    private E_StuffType e_StuffType;
    /// 
    /// 初始化
    /// 
    /// 图标
    /// 目标
    public void Init(E_StuffType e_StuffType, Transform targtet,UnityAction callBack, float number, bool isTrails,int generateAudioNumber,int arriveAudioNumber)
    {
        this.generateAudioNumber = generateAudioNumber;
        this.arriveAudioNumber = arriveAudioNumber;
        particleImage.attractorTarget = targtet;
        particleImage.rateOverTime = number;
        this.e_StuffType = e_StuffType;
        endAction = callBack;
        SetSprite();
        SetScale();
        SetTrails(isTrails);
    }
    /// 
    /// 设置图片
    /// 
    private void SetSprite()
    {
        switch (e_StuffType)
        {
            case E_StuffType.Money:
                YooAssetManager.Instance.LoadAssetAsync(PackagesName.GameData, MyConstant.MoneyIcon, (sprite) =>
                {
                    particleImage.sprite = sprite;
                });
                break;
        }
    }
    /// 
    /// 设置拖尾
    /// 
    private void SetTrails(bool isTrails)
    {
        particleImage.trailsEnabled = isTrails;
        Color color=Color.white;
        switch (e_StuffType)
        {
            case E_StuffType.Money:
                color = MyConstant.Green;
                break;
        }
        particleImage.trailColorOverLifetime = new ParticleSystem.MinMaxGradient(color);
    }
    /// 
    /// 设置缩放
    /// 
    private void SetScale()
    {
        Vector3 scale=Vector3.zero;
        switch (e_StuffType)
        {
            case E_StuffType.Money:
                scale = Vector3.one;
                break;
        }
        transform.localScale = scale;
    }
    /// 
    /// 生成
    /// 
    public void Generate()
    {
        switch (e_StuffType)
        {
            case E_StuffType.Money:
                PlayAudio(5, MyConstant.GenerateMoneyAudio);
                break;
        }
    }
    /// 
    /// 到达终点
    /// 
    public void ReachEndPoint()
    {
        switch (e_StuffType)
        {
            case E_StuffType.Money:
                PlayAudio(arriveAudioNumber, MyConstant.ArriveMoneyAudio);
                break;
        }
        endAction?.Invoke();
    }
    /// 
    /// 播放音效
    /// 
    /// 
    public void PlayAudio(int number, string audio)
    {
        StartCoroutine(E_PlayAudio(number, YooAssetManager.Instance.LoadAssetSync(PackagesName.GameData, audio)));
    }
    /// 
    ///播放音效协程
    /// 
    private IEnumerator E_PlayAudio(int number, AudioClip audioClip)
    {
        for (int i = 0; i < number; i++)
        {
            AudioManager.Instance.PlaySound(audioClip);
            yield return new WaitForSeconds(0.08f);
        }
    }
    /// 
    /// 回收
    /// 
    public void Reclaim()
    {
        CachePoolManager.Instance.Put(this.gameObject);
    }
}