//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, October 11, 2017 //-------------------------------------------------------- using EnhancedUI.EnhancedScroller; using System; using System.Collections; using System.Collections.Generic; using System.Text.RegularExpressions; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class RealmDungeonWin : Window { [SerializeField] Text additionAttr1; [SerializeField] Text additionAttr2; [SerializeField] Text additionTip1; [SerializeField] Button inspireBtn; [SerializeField] Text inspireBtnText; [SerializeField] ScrollerController helpCtrl; private int surplusTime = 0; private float m_Time = 0; private bool hasInspire = false; [SerializeField] Text destText; RealmModel m_Model; RealmModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } #region Built-in protected override void BindController() { } private bool OnGetDynamicSize(ScrollerDataType type, int index, out float height) { height = 0; PlayerRealmData.RealmHelpData data = PlayerDatas.Instance.realm.realmHelpList[index]; int additionValue1 = 0; int additionValue2 = 0; switch ((PlayerRealmData.RealmHelpType)data.type) { case PlayerRealmData.RealmHelpType.Self: additionValue1 = model.GetRealmHelperAttr(data.type, 0) / 100; break; case PlayerRealmData.RealmHelpType.Normal: additionValue1 = model.GetRealmHelperAttr(data.type, 0) / 100; break; case PlayerRealmData.RealmHelpType.High: additionValue1 = model.GetRealmHelperAttr(data.type, 0) / 100; additionValue2 = model.GetRealmHelperAttr(data.type, 1); break; } if (data.type == 0) { destText.text = Language.Get("RealmWin_Bewrite_19", additionValue1); } else { destText.text = Language.Get("RealmWin_Bewrite_20", data.name, additionValue1); if (additionValue2 != 0) { destText.text += Language.Get("RealmWin_Bewrite_22", additionValue2); } } if (destText.font == null) { destText.font = FontUtility.preferred; } height = destText.cachedTextGeneratorForLayout.GetPreferredHeight(destText.text, destText.GetGenerationSettings(new Vector2(destText.rectTransform.rect.size.x, 0.0f))) / destText.pixelsPerUnit; return true; } private void OnRefreshCell(ScrollerDataType type, CellView cell) { int index = cell.index; if (index < PlayerDatas.Instance.realm.realmHelpList.Count) { PlayerRealmData.RealmHelpData data = PlayerDatas.Instance.realm.realmHelpList[index]; int additionValue1 = 0; int additionValue2 = 0; switch ((PlayerRealmData.RealmHelpType)data.type) { case PlayerRealmData.RealmHelpType.Self: additionValue1 = model.GetRealmHelperAttr(data.type, 0) / 100; break; case PlayerRealmData.RealmHelpType.Normal: additionValue1 = model.GetRealmHelperAttr(data.type, 0) / 100; break; case PlayerRealmData.RealmHelpType.High: additionValue1 = model.GetRealmHelperAttr(data.type, 0) / 100; additionValue2 = model.GetRealmHelperAttr(data.type, 1); break; } Text text = cell.GetComponent(); if (data.type == 0) { text.text = Language.Get("RealmWin_Bewrite_19", additionValue1); } else { text.text = Language.Get("RealmWin_Bewrite_20", data.name, additionValue1); if (additionValue2 != 0) { text.text += Language.Get("RealmWin_Bewrite_22", additionValue2); } } } } protected override void AddListeners() { inspireBtn.onClick.AddListener(OnInspireBtn); helpCtrl.OnRefreshCell += OnRefreshCell; helpCtrl.OnGetDynamicSize += OnGetDynamicSize; } private void OnInspireBtn() { if (!hasInspire) { CA508_tagCMDoFBAction inspirepack = new CA508_tagCMDoFBAction(); inspirepack.ActionType = 1; inspirepack.ActionInfo = 0; GameNetSystem.Instance.SendInfo(inspirepack); hasInspire = true; surplusTime = model.realmInspireCoolDownTime; RefreshInspireBtnText(); } } protected override void OnPreOpen() { PlayerRealmData.OnRefreshHelpInfo += OnRefreshHelpInfo; surplusTime = 0; hasInspire = false; InitData(); } private float GetHeight(int _index = 0) { PlayerRealmData.RealmHelpData data = PlayerDatas.Instance.realm.realmHelpList[_index]; int additionValue1 = 0; int additionValue2 = 0; switch ((PlayerRealmData.RealmHelpType)data.type) { case PlayerRealmData.RealmHelpType.Self: additionValue1 = model.GetRealmHelperAttr(data.type, 0) / 100; break; case PlayerRealmData.RealmHelpType.Normal: additionValue1 = model.GetRealmHelperAttr(data.type, 0) / 100; break; case PlayerRealmData.RealmHelpType.High: additionValue1 = model.GetRealmHelperAttr(data.type, 0) / 100; additionValue2 = model.GetRealmHelperAttr(data.type, 1); break; } string _value = string.Empty; if (data.type == 0) { _value = Language.Get("RealmWin_Bewrite_19", additionValue1); } else { _value = Language.Get("RealmWin_Bewrite_20", data.name, additionValue1); if (additionValue2 != 0) { _value += Language.Get("RealmWin_Bewrite_22", additionValue2); } } if (destText.font == null) { destText.font = FontUtility.preferred; } return destText.cachedTextGeneratorForLayout.GetPreferredHeight(_value, destText.GetGenerationSettings(new Vector2(destText.rectTransform.rect.size.x, 0.0f))) / destText.pixelsPerUnit; } private void OnRefreshHelpInfo() { int addtionValue1 = 0; int addtionValue2 = 0; var list = PlayerDatas.Instance.realm.realmHelpList; helpCtrl.lockType = list.Count > 2 ? EnhanceLockType.KeepVertical2 : EnhanceLockType.LockVerticalTop; helpCtrl.Refresh(); for (int i = 0; i < list.Count; i++) { PlayerRealmData.RealmHelpData data = list[i]; switch ((PlayerRealmData.RealmHelpType)data.type) { case PlayerRealmData.RealmHelpType.Self: addtionValue1 += model.GetRealmHelperAttr(data.type, 0) / 100; break; case PlayerRealmData.RealmHelpType.Normal: addtionValue1 += model.GetRealmHelperAttr(data.type, 0) / 100; break; case PlayerRealmData.RealmHelpType.High: addtionValue1 += model.GetRealmHelperAttr(data.type, 0) / 100; addtionValue2 += model.GetRealmHelperAttr(data.type, 1); break; } helpCtrl.AddCell(ScrollerDataType.Header, i); } helpCtrl.Restart(); if (list.Count > 2) { helpCtrl.JumpIndex(-GetHeight() - 10, 0.3f, EnhancedScroller.TweenType.linear); } addtionValue1 = Mathf.Min(addtionValue1, model.realmHoleLimit / 100); if (addtionValue1 >= model.realmHoleLimit / 100) { surplusTime = 0; hasInspire = false; inspireBtnText.text = Language.Get("RealmWin_Bewrite_18"); inspireBtn.interactable = false; } else { inspireBtn.interactable = true; RefreshInspireBtnText(); } additionAttr1.text = StringUtility.Contact(Language.Get("RealmWin_Bewrite_44"), "", addtionValue1, "%", ""); additionAttr2.text = StringUtility.Contact(Language.Get("RealmWin_Bewrite_21"), "", addtionValue2, ""); additionTip1.text = Language.Get("RealmWin_Bewrite_23", model.realmHoleLimit / 100); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { PlayerRealmData.OnRefreshHelpInfo -= OnRefreshHelpInfo; } protected override void LateUpdate() { if (hasInspire) { m_Time += Time.deltaTime; int _surplus = Mathf.CeilToInt(model.realmInspireCoolDownTime - m_Time); _surplus = Mathf.Max(_surplus, 0); if (_surplus != surplusTime) { surplusTime = _surplus; RefreshInspireBtnText(); } if (m_Time >= model.realmInspireCoolDownTime) { hasInspire = false; m_Time = 0; } } } #endregion private void InitData() { RefreshInspireBtnText(); OnRefreshHelpInfo(); } private void RefreshInspireBtnText() { if (surplusTime == 0) { inspireBtnText.text = Language.Get("RealmWin_Bewrite_16"); } else { inspireBtnText.text = Language.Get("RealmWin_Bewrite_17", surplusTime); } } } }