using System; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class GuardComposeConfirmWin : Window { [SerializeField] Button popConfirmBtn; [SerializeField] RichText popConfirmInfo; [SerializeField] Text popConfirmTitle; [SerializeField] Button closeBtn; SelectEquipModel _selectModel; SelectEquipModel selectModel { get { return _selectModel ?? (_selectModel = ModelCenter.Instance.GetModel()); } } ComposeWinModel _composeWinModel; ComposeWinModel composeWinModel { get { return _composeWinModel ?? (_composeWinModel = ModelCenter.Instance.GetModel()); } } ItemModel itemModel = null; #region Built-in protected override void BindController() { } protected override void AddListeners() { closeBtn.AddListener(CloseClick); popConfirmBtn.AddListener(ClickGuardCompose); } protected override void OnPreOpen() { KnapsackTimeCDMgr.Instance.RefreshItemOverdueTimeAct += UpdateRemainTime; SetDisplay(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { KnapsackTimeCDMgr.Instance.RefreshItemOverdueTimeAct -= UpdateRemainTime; } protected override void OnAfterClose() { } #endregion private void SetDisplay() { var unfixeAddDict = selectModel.GetHaveUnfixedSelectItem(); var modellist = unfixeAddDict.Values.ToList(); modellist.Sort(CompareByOverdueTime); itemModel = modellist.Count > 0 ? modellist[0] : null; if(itemModel != null) { UpdateRemainTime(itemModel.guid); } } private void UpdateRemainTime(string guid) { if (composeWinModel.CurComposeModel == null || itemModel == null) return; if (itemModel.guid == guid) { int remainTime = 0; bool isRemain = TryGetRemainTime(itemModel, out remainTime); if (isRemain) { ItemConfig itemConfig = ItemConfig.Get(composeWinModel.CurComposeModel.makeID[0]); popConfirmInfo.text = Language.Get("Compose111", SecondsToHM(remainTime), itemConfig.ItemName); } } } public string SecondsToHM(int _seconds) { string timeStr = string.Empty; int hours = _seconds / 3600; int mins = _seconds % 3600 / 60; if (hours > 0) { timeStr = StringUtility.Contact(hours, Language.Get("Hour")); } if (mins > 0) { timeStr = StringUtility.Contact(timeStr, mins, Language.Get("Minute")); } return timeStr; } private int CompareByOverdueTime(ItemModel start, ItemModel end) { int remainTime1 = 0; int remainTime2 = 0; bool isRemain1 = TryGetRemainTime(start, out remainTime1); bool isRemain2 = TryGetRemainTime(end, out remainTime2); if (isRemain1.CompareTo(isRemain2) != 0) return -isRemain1.CompareTo(isRemain2); if (remainTime1.CompareTo(remainTime2) != 0) return remainTime1.CompareTo(remainTime2); return 0; } private bool TryGetRemainTime(ItemModel model, out int seconds) { seconds = 0; if (model.config.EquipPlace != (int)RoleEquipType.Guard || model.config.ExpireTime <= 0) return false; ItemCDCool cool = KnapsackTimeCDMgr.Instance.GetItemCoolById(model.guid); bool isShow = model.config.ExpireTime > 0; if (isShow) { List itemEffectTime = model.GetUseData((int)ItemUseDataKey.createTime); seconds = model.config.ExpireTime; if (itemEffectTime != null && itemEffectTime[0] != 0 && model.guid != "") { seconds = cool == null ? 0 : (int)cool.GetRemainTime(); } return true; } return false; } private void ClickGuardCompose() { composeWinModel.SetUpdateSendComposeEvent(); CloseClick(); } } }