using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; using TableConfig; using System.Linq; namespace Snxxz.UI { public class HappyXBGetItemWin : Window { [SerializeField] GameObject getItem; [SerializeField] RectTransform getItemParent; [SerializeField] Button backBtn; [SerializeField] Button xbBtn; [SerializeField] Text xbBtnText; [SerializeField] Text xbMoneyText; [SerializeField] Button xbManyBtn; [SerializeField] Text xbManyBtnText; [SerializeField] Text xbManyMoneyText; [SerializeField] Text xbScoreText; [SerializeField] Text freeXBTimeText; [SerializeField] float scaleTime = 0.2f; HappyXBModel XBModel { get { return ModelCenter.Instance.GetModel(); } } PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel(); } } ItemTipsModel _itemTipsModel; ItemTipsModel itemTipsModel { get { return _itemTipsModel ?? (_itemTipsModel = ModelCenter.Instance.GetModel()); } } bool isHaveFreeTime = false; int xbOneMoney = 0; int xbManyMoney = 0; List GetItemlist = new List(); List getItemBasiclist = new List(); List xbItemlist; protected override void BindController() { } protected override void AddListeners() { backBtn.AddListener(ClickBackBtn); xbBtn.AddListener(ClickXBBtn); xbManyBtn.AddListener(ClickXBManyBtn); } protected override void OnPreOpen() { XBModel.StartXBEvent += OnStartXB; getItem.SetActive(false); isHaveFreeTime = XBModel.IsHaveFreeXBTime((int)XBModel.title); InitUI(); TimeDownMgr.CoolTimeData data; switch (XBModel.title) { case HappXBTitle.Best: XBModel.RefreshBestXBTimeAct += RefreshFreeTime; if (TimeDownMgr.Instance.Get(TimeDownMgr.CoolTimeType.HappyFreeBestXB, out data)) { data.func = RefreshFreeTime; RefreshFreeTime(Mathf.CeilToInt(data.duration - data.time)); } else { RefreshFreeTime(0); } break; case HappXBTitle.Rune: XBModel.RefreshRuneXBTimeAct += RefreshFreeTime; if (TimeDownMgr.Instance.Get(TimeDownMgr.CoolTimeType.HappyFreeRuneXB, out data)) { data.func = RefreshFreeTime; RefreshFreeTime(Mathf.CeilToInt(data.duration - data.time)); } else { RefreshFreeTime(0); } break; } } protected override void OnAfterOpen() { } protected override void OnPreClose() { switch (XBModel.title) { case HappXBTitle.Best: XBModel.RefreshBestXBTimeAct -= RefreshFreeTime; break; case HappXBTitle.Rune: XBModel.RefreshRuneXBTimeAct -= RefreshFreeTime; break; } XBModel.StartXBEvent -= OnStartXB; XBModel.rangelist.Clear(); DestroyGetItemlist(); GetItemlist.Clear(); getItemBasiclist.Clear(); } protected override void OnAfterClose() { } private void InitUI() { CreateGetItem(); XBFuncSet funcSet = XBModel.GetXBFuncSet((int)XBModel.title); if (funcSet != null) { xbBtnText.text = Language.Get("HappyXB103", funcSet.xbNums[0]); xbManyBtnText.text = Language.Get("HappyXB103", funcSet.xbNums[1]); xbMoneyText.text = funcSet.xbPrices[0].ToString(); xbManyMoneyText.text = funcSet.xbPrices[1].ToString(); xbOneMoney = funcSet.xbPrices[0]; xbManyMoney = funcSet.xbPrices[1]; } else { xbOneMoney = 0; xbManyMoney = 0; } xbScoreText.text = XBModel.addXBScore.ToString(); for(int i = 0; i < xbItemlist.Count; i++) { int count = playerPack.GetItemCountByID(PackType.rptTreasure,xbItemlist[i].itemId); if(count > 0) { XBModel.RefreshXBWarehouse(); } } } private void RefreshFreeTime(float time) { if (isHaveFreeTime) { if (XBModel.IsHaveFreeXB((int)XBModel.title)) { freeXBTimeText.gameObject.SetActive(false); } else { freeXBTimeText.gameObject.SetActive(true); freeXBTimeText.text = Language.Get("HappyXB102", TimeUtility.SecondsToHMSCHSRetain((int)time)); } } else { freeXBTimeText.gameObject.SetActive(false); } } private void CreateGetItem() { xbItemlist = XBModel.rangelist; for (int i = 0; i < xbItemlist.Count; i++) { XBGetItem xbItem = xbItemlist[i]; GameObject item = Instantiate(getItem); item.transform.SetParent(getItemParent); item.transform.localPosition = Vector3.zero; item.transform.localScale = Vector3.one; item.name = StringUtility.Contact("CommonItemCell", i); item.gameObject.SetActive(true); XBGetItemCell itemBasic = item.transform.Find("CommonItemCell").GetComponent(); ItemCellModel cellModel = new ItemCellModel(xbItem.itemId, false, (ulong)xbItem.count, xbItem.isBind); itemBasic.Init(cellModel); itemBasic.cellBtn.RemoveAllListeners(); itemBasic.cellBtn.AddListener(() => { ItemAttrData attrData = new ItemAttrData(xbItem.itemId, false, (ulong)xbItem.count, -1, xbItem.isBind); itemTipsModel.SetItemTipsModel(attrData); }); itemBasic.transform.localScale = Vector3.zero; itemBasic.transform.localPosition = Vector3.zero; GetItemlist.Add(item); itemBasic.gameObject.SetActive(false); getItemBasiclist.Add(itemBasic); } ShowGetItemCtrl(0); } private void ShowGetItemCtrl(int index) { if (index < getItemBasiclist.Count) { getItemBasiclist[index].gameObject.SetActive(true); getItemBasiclist[index].transform.DOScale(new Vector3(1, 1, 1), scaleTime).OnComplete(() => { getItemBasiclist[index].SetUIEffect(); index += 1; ShowGetItemCtrl(index); }); } } private void DestroyGetItemlist() { for(int i = 0; i < GetItemlist.Count; i++) { Destroy(GetItemlist[i]); } } private void ClickXBBtn() { switch (XBModel.title) { case HappXBTitle.Best: XBModel.SendOneXBQuest(PackType.rptTreasure, 1); break; case HappXBTitle.Rune: XBModel.SendOneXBQuest(PackType.rptTreasure, 2); break; } } private void ClickXBManyBtn() { switch (XBModel.title) { case HappXBTitle.Best: XBModel.SendXBManyQuest(PackType.rptTreasure, 1); break; case HappXBTitle.Rune: XBModel.SendXBManyQuest(PackType.rptTreasure, 2); break; } } private void OnStartXB(int oneOrMany) { ClickBackBtn(); } private void ClickBackBtn() { CloseImmediately(); } } }