using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class RealmPoolBehaviour : MonoBehaviour { [SerializeField] ImageEx m_Bottom; [SerializeField] ImageEx m_Word; [SerializeField] WaterWaveSlider m_WaterSlider; [SerializeField] Transform m_Lock; [SerializeField] Text m_Progress; [SerializeField] Button m_TakeExp; [SerializeField] UIEffect m_CollectEffect; [SerializeField] UIEffect m_FullEffect; int realmLevel = 0; RealmModel model { get { return ModelCenter.Instance.GetModel(); } } private void Awake() { m_TakeExp.AddListener(TakeExp); } public void Display(int realmLevel) { this.realmLevel = realmLevel; var config = RealmConfig.Get(realmLevel); var isOpen = config.expRate != 0; m_Bottom.gray = !isOpen; m_Word.gray = !isOpen; m_Lock.gameObject.SetActive(!isOpen); m_Progress.gameObject.SetActive(isOpen); m_WaterSlider.gameObject.SetActive(isOpen); if (isOpen) { DisplayProgress(); } DisplayEffect(); model.realmExpRefresh -= RealmExpRefresh; model.realmExpRefresh += RealmExpRefresh; GlobalTimeEvent.Instance.secondEvent -= PerSecond; GlobalTimeEvent.Instance.secondEvent += PerSecond; } public void DisplayProgress() { var config = RealmConfig.Get(realmLevel); var progress = Mathf.Clamp01((float)model.totalExp / config.expLimit); progress *= 100; m_Progress.text = StringUtility.Contact(progress.ToString("0.#"), "%"); DisplayWave(); DisplayEffect(); } public void DisplayWave() { var config = RealmConfig.Get(realmLevel); var progress = Mathf.Clamp01((float)model.exp / config.expLimit); m_WaterSlider.progress = progress; } private void TakeExp() { var config = RealmConfig.Get(realmLevel); var isOpen = config.expRate != 0; if (isOpen) { WindowCenter.Instance.Open(); } else { SysNotifyMgr.Instance.ShowTip("RealmPoolOpenLimit", UIHelper.GetRealmName(model.realmPoolOpenLevel)); } } void DisplayEffect() { var config = RealmConfig.Get(realmLevel); var isOpen = config.expRate != 0; var isFull = model.totalExp >= config.expLimit; if (!isOpen) { StopEffect(m_FullEffect); } else { if (isFull) { StopEffect(m_CollectEffect); PlayEffect(m_FullEffect); } else { StopEffect(m_FullEffect); PlayEffect(m_CollectEffect); } } } void StopEffect(UIEffect effect) { if (effect.IsPlaying) { effect.StopImediatly(); } } void PlayEffect(UIEffect effect) { if (!effect.IsPlaying) { effect.Play(); } } private void PerSecond() { DisplayProgress(); } private void RealmExpRefresh() { DisplayProgress(); } private void LateUpdate() { DisplayWave(); } public void Dispose() { model.realmExpRefresh -= RealmExpRefresh; GlobalTimeEvent.Instance.secondEvent -= PerSecond; } } }