using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class AlchemyDrugProgressBehaviour : MonoBehaviour { [SerializeField] AlchemyType m_AlchemyType; [SerializeField] Image m_Progress; [SerializeField] Button m_Goto; int alchemyId = 0; AlchemyModel model { get { return ModelCenter.Instance.GetModel(); } } private void Awake() { m_Goto.AddListener(Goto); } public void Initialize() { model.alchemyStateRefresh -= AlchemyStateRefresh; model.alchemyStateRefresh += AlchemyStateRefresh; Display(); } private void AlchemyStateRefresh() { Display(); } void Display() { var isAlcheming = false; alchemyId = 0; if (model.IsStoveAlcheming(m_AlchemyType, out alchemyId)) { isAlcheming = model.GetStoveState(alchemyId) == 1; } this.SetActive(isAlcheming); if (isAlcheming) { DisplayProgress(); } } void DisplayProgress() { AlchemyTime alchemyTime; if (model.TryGetAlchemyStartTime(alchemyId, out alchemyTime)) { var config = AlchemyConfig.Get(alchemyId); var startTime = TimeUtility.GetTime(alchemyTime.startTick); var seconds = (float)(TimeUtility.ServerNow - startTime).TotalSeconds; m_Progress.fillAmount = 1 - Mathf.Clamp01(seconds / (config.NeedTime * alchemyTime.count)); } } private void LateUpdate() { if (alchemyId != 0) { if (model.GetStoveState(alchemyId) != 1) { alchemyId = 0; this.SetActive(false); return; } DisplayProgress(); } } private void Goto() { switch (m_AlchemyType) { case AlchemyType.Normal: WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.AlchemyNormal); break; case AlchemyType.Fairy: WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.AlchemyFairy); break; } } public void UnInitialize() { model.alchemyStateRefresh -= AlchemyStateRefresh; } } }