//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, May 24, 2018 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using TableConfig; namespace Snxxz.UI { public class DailyQuestRealmPracticeBehaviour : MonoBehaviour { [SerializeField] RectTransform m_ContainerPractice; [SerializeField] Button m_GotoRealm; [SerializeField] Slider m_PracticePointSlider; [SerializeField] RectTransform m_RealmContainer; [SerializeField] Text m_RealmStateDescription; [SerializeField] Image m_Realm; [SerializeField] Text m_PracticePoint; [SerializeField] Text m_PractivePointNeed; [SerializeField] Text m_GotoRealmLevelUpHint; [SerializeField] Text m_UnGetPracticePoint; [SerializeField] Button m_GetPracticePoint; [SerializeField] UIEffect m_GetPracicePointEffect; [SerializeField] RectTransform m_ContainerUnLock; [SerializeField] Text m_UnLockCondition; [SerializeField] Text m_AccumulatedPractice; int piontBuf = 0; DailyQuestModel dailyquestModel { get { return ModelCenter.Instance.GetModel(); } } RealmModel realmModel { get { return ModelCenter.Instance.GetModel(); } } public void Display() { var isOpen = FuncOpen.Instance.IsFuncOpen(12); m_ContainerPractice.gameObject.SetActive(isOpen); m_ContainerUnLock.gameObject.SetActive(!isOpen); dailyquestModel.realmPointUpdateEvent -= UpdateAccumulatedPracticePoint; dailyquestModel.realmPointUpdateEvent -= UpdateUnGetPraceticePoint; PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= OnPlayerDataRefresh; m_GotoRealm.RemoveAllListeners(); m_GetPracticePoint.RemoveAllListeners(); if (isOpen) { piontBuf = PlayerDatas.Instance.extersion.realmPoint; UpdatePraceticePoint(true); UpdateUnGetPraceticePoint(); m_GotoRealm.AddListener(GotoRealm); m_GetPracticePoint.AddListener(GetPracticePoint); dailyquestModel.realmPointUpdateEvent += UpdateUnGetPraceticePoint; PlayerDatas.Instance.PlayerDataRefreshInfoEvent += OnPlayerDataRefresh; } else { UpdateAccumulatedPracticePoint(); var config = Config.Instance.Get(12); m_UnLockCondition.text = Language.Get("DailyquestOpenFunc", config.LimitLV); dailyquestModel.realmPointUpdateEvent += UpdateAccumulatedPracticePoint; } } public void Dispose() { StopAllCoroutines(); m_GotoRealm.RemoveAllListeners(); m_GetPracticePoint.RemoveAllListeners(); dailyquestModel.realmPointUpdateEvent -= UpdateAccumulatedPracticePoint; dailyquestModel.realmPointUpdateEvent -= UpdateUnGetPraceticePoint; PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= OnPlayerDataRefresh; } private void OnPlayerDataRefresh(PlayerDataRefresh _refreshType) { if (_refreshType == PlayerDataRefresh.RealmPoint) { UpdatePraceticePoint(false); } } private void UpdatePraceticePoint(bool _rightNow) { var isMaxRealm = realmModel.realmMaxLevel == PlayerDatas.Instance.baseData.realmLevel; var realmConfig = Config.Instance.Get(PlayerDatas.Instance.baseData.realmLevel); var pointNeed = realmConfig.NeedPoint; var pointOwn = PlayerDatas.Instance.extersion.realmPoint; if (isMaxRealm) { m_GotoRealmLevelUpHint.gameObject.SetActive(false); realmConfig = Config.Instance.Get(PlayerDatas.Instance.baseData.realmLevel); m_RealmStateDescription.text = Language.Get("DailyquestHighestRealm"); } else { m_GotoRealmLevelUpHint.gameObject.SetActive(true); if (pointOwn >= pointNeed) { m_GotoRealmLevelUpHint.text = Language.Get("DailyquestRealm2"); } else { m_GotoRealmLevelUpHint.text = Language.Get("RealmCollecting", pointNeed - pointOwn); } m_RealmStateDescription.text = Language.Get("DailyquestNextRealm"); } var nextRealmConfig = Config.Instance.Get(PlayerDatas.Instance.baseData.realmLevel + (isMaxRealm ? 0 : 1)); m_RealmContainer.gameObject.SetActive(nextRealmConfig != null && nextRealmConfig.Lv > 0); if (nextRealmConfig != null && nextRealmConfig.Lv > 0) { m_Realm.SetSprite(nextRealmConfig.Img); } m_PractivePointNeed.text = StringUtility.Contact("/", pointNeed); if (_rightNow) { m_PracticePointSlider.value = pointOwn / (float)pointNeed; m_PracticePoint.text = pointOwn.ToString(); } else { StartCoroutine(Co_PointIncreasePerformance(new PointPerformance() { startPoint = piontBuf, endPoint = pointOwn })); piontBuf = pointOwn; } } private void UpdateUnGetPraceticePoint() { m_UnGetPracticePoint.text = Language.Get("DailyQuestwin5", dailyquestModel.gotableRealmPoint); } private void GotoRealm() { WindowJumpMgr.Instance.ClearJumpData(); WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.RealmFunc1); } private void GetPracticePoint() { if (dailyquestModel.gotableRealmPoint > 0) { dailyquestModel.RequestGetRealmPoint(); } else { SysNotifyMgr.Instance.ShowTip("DailyquestNothingToGet"); } } private void UpdateAccumulatedPracticePoint() { m_AccumulatedPractice.text = Language.Get("DailyquestXiuxingdian", dailyquestModel.gotableRealmPoint); } IEnumerator Co_PointIncreasePerformance(PointPerformance _pointPerformance) { m_GetPracicePointEffect.Play(); yield return WaitingForSecondConst.WaitMS1000; var timer = 0f; var duration = 2f; var realmConfig = Config.Instance.Get(PlayerDatas.Instance.baseData.realmLevel); var pointNeed = realmConfig.NeedPoint; while (timer < duration) { timer += Time.deltaTime; var t = timer / duration; var progress = Mathf.Lerp(_pointPerformance.startPoint / (float)pointNeed, _pointPerformance.endPoint / (float)pointNeed, t); var point = (int)(progress * pointNeed); m_PracticePointSlider.value = progress; m_PracticePoint.text = point.ToString(); yield return null; } m_PracticePointSlider.value = _pointPerformance.endPoint / (float)pointNeed; m_PracticePoint.text = _pointPerformance.endPoint.ToString(); } struct PointPerformance { public int startPoint; public int endPoint; } } }