using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; namespace Snxxz.UI { public class BoxGetItemWin : Window { [SerializeField] GameObject getItem; [SerializeField] RectTransform getItemParent; [SerializeField] CommonItemBaisc box; [SerializeField] Button backBtn; [SerializeField] Button useBtn; [SerializeField] Text useBtnText; [SerializeField] Text getCoinsText; [SerializeField] UIEffect fireEffect; PackModel _playerPack; PackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel()); } } ItemModel itemModel; List getItemBasiclist = new List(); List GetItemlist = new List(); BoxGetItemModel boxModel; BoxGetItemModel BoxModel { get { return boxModel ?? (boxModel = ModelCenter.Instance.GetModel()); } } ItemTipsModel _itemTipsModel; ItemTipsModel itemTipsModel { get { return _itemTipsModel ?? (_itemTipsModel = ModelCenter.Instance.GetModel()); } } FairylandCeremonyModel ceremonyModel { get { return ModelCenter.Instance.GetModel(); } } [SerializeField] float scaleTime = 0.3f; Vector3 startPos = Vector3.zero; protected override void BindController() { } protected override void AddListeners() { } protected override void OnPreOpen() { startPos = getItemParent.anchoredPosition3D; WindowCenter.Instance.Close(); //playerPack.ItemCntReduceAct += RefreshUI; getItem.SetActive(false); BoxModel.RefreshGetItemAct += RefreshGetIem; backBtn.AddListener(ClickBackBtn); ShowUICtrl(); } protected override void OnActived() { UpdateFireEffect(); } protected override void OnAfterOpen() { this.transform.SetAsLastSibling(); } protected override void OnPreClose() { // playerPack.ItemCntReduceAct -= RefreshUI; BoxModel.RefreshGetItemAct -= RefreshGetIem; backBtn.RemoveAllListeners(); useBtn.RemoveAllListeners(); WindowCenter.Instance.Open(); DestroyGetItemlist(); GetItemlist.Clear(); getItemBasiclist.Clear(); } protected override void OnAfterClose() { } private void RefreshGetIem(int useId, int useCnt, BoxGetItemInfo[] info) { ShowUICtrl(); } private void UpdateFireEffect() { if (BoxModel.getItems == null) return; bool isFireBox = false; foreach (var key in ceremonyModel.fireDict.Keys) { StoreConfig storeConfig = StoreConfig.Get(ceremonyModel.fireDict[key]); if (storeConfig != null) { if (storeConfig.ItemID == BoxModel.itemId) { isFireBox = true; if (!fireEffect.IsPlaying) { fireEffect.Play(); return; } } } } if(!isFireBox) { fireEffect.Stop(); } } private void ShowUICtrl() { if(BoxModel.getItems != null) { CreateGetItem(); } itemModel = playerPack.GetItemByGuid(BoxModel.guid); ItemCellModel cellModel = new ItemCellModel(BoxModel.itemId); box.Init(cellModel); useBtn.RemoveAllListeners(); int count = 0; if (itemModel != null) { count = itemModel.count; useBtnText.text = Language.Get("OpenBoxUseBtn1"); useBtn.AddListener(ClickUseBtn); } else { useBtnText.text = Language.Get("L1001"); useBtn.AddListener(ClickBackBtn); } box.countText.text = count.ToString(); box.countText.gameObject.SetActive(true); if(BoxModel.getCoinsType != 0 && BoxModel.getCoinsCnt > 0) { getCoinsText.gameObject.SetActive(true); getCoinsText.text = Language.Get("BoxGetCoinsText",BoxModel.getCoinsType,BoxModel.getCoinsCnt); } else { getCoinsText.gameObject.SetActive(false); } } private void RefreshUI(PackType type, int index, int id) { ItemModel itemModel = playerPack.GetItemByIndex(type, index); if (itemModel != null && itemModel.guid == BoxModel.guid) { ShowUICtrl(); } } private void CreateGetItem() { getItemParent.anchoredPosition3D = startPos; DestroyGetItemlist(); GetItemlist.Clear(); getItemBasiclist.Clear(); CreateGetItem(0); 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(() => { index += 1; ShowGetItemCtrl(index); }); } } private void CreateGetItem(int index) { int length = BoxModel.getItems.Length; DebugEx.Log("CreateGetItem:" + length); if (index < length) { GameObject item = Instantiate(getItem); item.transform.SetParent(getItemParent); item.transform.localPosition = Vector3.zero; item.transform.localScale = Vector3.one; item.name = StringUtility.Contact("CommonItemCell", index); item.gameObject.SetActive(true); BoxGetItemInfo itemInfo = BoxModel.getItems[index]; PackType type = PackType.Deleted; ItemConfig itemConfig = ItemConfig.Get(itemInfo.ItemID); if(itemConfig != null) { if(itemConfig.Type == 70 || (itemConfig.EquipPlace >= 101 && itemConfig.EquipPlace <= 105)) { type = PackType.DogzItem; } } CommonItemBaisc itemBasic = item.transform.Find("CommonItemCell").GetComponent(); ItemCellModel cellModel = new ItemCellModel(itemInfo.ItemID, false, (ulong)itemInfo.Count, itemInfo.IsBind, "", type, false, ConfigParse.Analysis(itemInfo.UserData)); itemBasic.Init(cellModel); itemBasic.cellBtn.RemoveAllListeners(); itemBasic.cellBtn.AddListener(()=> { ItemAttrData attrData = new ItemAttrData(itemInfo.ItemID,false, (ulong)itemInfo.Count,-1, itemInfo.IsBind, false,type,"", ConfigParse.Analysis(itemInfo.UserData)); itemTipsModel.SetItemTipsModel(attrData); }); itemBasic.transform.localScale = Vector3.zero; itemBasic.transform.localPosition = Vector3.zero; itemBasic.gameObject.SetActive(false); GetItemlist.Add(item); getItemBasiclist.Add(itemBasic); index += 1; CreateGetItem(index); } } private void DestroyGetItemlist() { for(int i = 0; i < GetItemlist.Count; i++) { Destroy(GetItemlist[i]); } } private void ClickUseBtn() { if (itemModel == null) return; int useCnt = BoxModel.GetUseCntByID(itemModel.itemId); ItemOperateUtility.Instance.UseItem(itemModel.itemPlace, 1); } private void ClickBackBtn() { CloseImmediately(); } } }