using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
|
namespace vnxbqy.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<SelectEquipModel>()); }
|
}
|
ComposeWinModel _composeWinModel;
|
ComposeWinModel composeWinModel
|
{
|
get { return _composeWinModel ?? (_composeWinModel = ModelCenter.Instance.GetModel<ComposeWinModel>()); }
|
}
|
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<int> 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();
|
}
|
}
|
}
|