wangguan
2020-12-29 452c75675679c44cc39b04bdb7d330d7c5c14d5c
Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs
@@ -14,20 +14,22 @@
{
    public class EndlessBuffSelect : Singleton<EndlessBuffSelect>
    {
        public Text Prompt;
        public List<SelectBuffIcon> IconList;
        public List<Sprite> SpriteList;
        /// <summary>
        /// buff是否选中完成
        /// </summary>
        private bool isCompleted;
        public event Action<int> BuffSelectCompleted;
        private int SelectedIndex;
        /// <summary>
        /// 当前选择的索引,-1表示还未选中其中一个
        /// </summary>
        private int SelectedIndex = -1;
        public Button SelectBtn;
        public GameObject EffectPrefabObject;
        private GameObject effectObj;
        private Vector3[] effectPosArr = { new Vector3(-21.6f, 0, 6.6f), new Vector3(0, 0, 6.6f), new Vector3(21.6f, 0, 6.6f) };
        // Start is called before the first frame update
        private void Start()
@@ -36,65 +38,111 @@
            {
                IconList[i].OnSelectBuffCompleted += OnClick;
            }
            SelectBtn.onClick.AddListener(OnClickSelectBtn);
        }
        private void OnEnable()
        {
            isCompleted = false;
            Prompt.text = "点击选择buff";
            SelectedIndex = -1;
            for (int i = 0; i < IconList.Count; ++i)
            {
                IconList[i].SetIcon(SpriteList[i]);
                IconList[i].SetState(EndlessBuffSelectState.Normal);
                IconList[i].Reset();
            }
        }
        private void OnDisable()
        {
            if (effectObj != null)
                Destroy(effectObj);
        }
        public void OnClick(int index)
        {
            if (isCompleted) return;
            // 如果点击同一个直接返回
            if (index == SelectedIndex) return;
            isCompleted = true;
            // 如果已经选择过了,设置一个之前选择的item
            if (SelectedIndex != -1)
                IconList[SelectedIndex].SetState(false);
            SelectedIndex = index;
            Prompt.text = "选择buff成功";
            IconList[index].SetState(true);
            for (int i = 0; i < IconList.Count; ++i)
            //PlayEffect();
        }
        private void PlayEffect()
        {
            if (effectObj == null)
            {
                if (index == i)
                    IconList[i].SetState(EndlessBuffSelectState.Selected);
                else
                    IconList[i].SetState(EndlessBuffSelectState.Unselected);
                effectObj = Instantiate(EffectPrefabObject);
                GameObject particleSystemObject = GameObject.Find("ParticleSystemObject");
                effectObj.transform.SetParent(particleSystemObject.transform, false);
                effectObj.transform.localScale = new Vector3(1.5f, 1.5f, 1.5f);
            }
            effectObj.transform.localPosition = effectPosArr[SelectedIndex];
            ParticleSystem ps = effectObj.transform.GetChild(0).GetComponent<ParticleSystem>();
            ps.Play();
        }
            StartCoroutine(DelayToClose());
        private void StopEffect()
        {
            if (effectObj != null)
            {
                ParticleSystem ps = effectObj.transform.GetChild(0).GetComponent<ParticleSystem>();
                ps.Stop();
                ps.Clear();
            }
        }
        /// <summary>
        /// 点击了选择按钮
        /// </summary>
        public void OnClickSelectBtn()
        {
            if (SelectedIndex == -1) return;
            int index = SelectedIndex;
            AudioSourceManager.Ins.Play(AudioEnum.UI);
            HideBuffUI();
            IconList[index].Fly();
            EndlessRandomTower.instance.SetCountDown(true,true);
            if (BuffSelectCompleted != null)
                BuffSelectCompleted(index);
        }
        public void ShowBuffUI()
        {
            EndlessMaskUI.instance.Show();
            gameObject.SetActive(true);
            AudioSourceManager.Ins?.Play(AudioEnum.ChooseBuff);
        }
        public void HideBuffUI()
        {
            EndlessMaskUI.instance.Hide();
            StopEffect();
            gameObject.SetActive(false);
        }
        private IEnumerator DelayToClose()
        {
            yield return new WaitForSeconds(0.5f);
            HideBuffUI();
            if (BuffSelectCompleted != null)
                BuffSelectCompleted(SelectedIndex);
        }
        public void Refresh(List<EndlessBuffConfig> list)
        {
            for (int i = 0; i < IconList.Count; ++i)
            {
                IconList[i].SetIcon(list[i].Config.image);
                IconList[i].SetQuality(list[i].Config.rare);
                IconList[i].SetName(list[i].Config.name);
                IconList[i].SetEffect(list[i].Config.brief);
                IconList[i].SetRare(list[i].Config.rare);
                IconList[i].SetIsGold(list[i].EffectType == EndlessBuffEffectType.GoldAdd);
            }
        }
    }