using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; using UnityEditor; namespace vnxbqy.UI { public class BoxGetItemWin : Window { [SerializeField] GameObject getItem; [SerializeField] RectTransform getItemParent; [SerializeField] CommonItemBaisc box; [SerializeField] Button backBtn; [SerializeField] Button useBtn; [SerializeField] Button useBtnTen; [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()); } } 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(); getItemParent.anchoredPosition3D = new Vector3(0, getItemParent.anchoredPosition3D.y, 0); } protected override void OnAfterClose() { } private void RefreshGetIem(int useId, int useCnt, BoxGetItemInfo[] info) { ShowUICtrl(); } private void UpdateFireEffect() { if (BoxModel.getItems == null) return; if (!fireEffect.IsPlaying) { fireEffect.Play(); 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(); useBtnTen.RemoveAllListeners(); useBtnTen.SetActive(false); int count = 0; if (itemModel != null) { count = itemModel.count; useBtnText.text = Language.Get("OpenBoxUseBtn1"); useBtn.AddListener(ClickUseBtn); //showType 代表有展现并且可以10连开 //if (ChestsConfig.Has(BoxModel.itemId)&& ChestsConfig.Get(BoxModel.itemId).OpenShow == 2 && count >= 10) //{ // useBtnTen.SetActive(true); // useBtnTen.AddListener(ClickUseBtnTen); //} } else { useBtnText.text = Language.Get("L1001"); useBtn.AddListener(ClickBackBtn); } bool isRandom = ItemConfig.Has(BoxModel.itemId) && ItemConfig.Get(BoxModel.itemId).BatchUse != 0; bool isSelectItem = BoxModel.IsSelectItemByID(BoxModel.itemId, out var selectDict); bool isShow = isRandom || isSelectItem; box.SetActive(!isShow); useBtn.SetActive(!isShow); box.countText.text = count.ToString(); box.countText.SetActive(true); if (BoxModel.getCoinsType != 0 && BoxModel.getCoinsCnt > 0) { getCoinsText.SetActive(true); getCoinsText.text = Language.Get("BoxGetCoinsText", BoxModel.getCoinsType, BoxModel.getCoinsCnt); } else { getCoinsText.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].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.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; Dictionary> useDataDic = ConfigParse.Analysis(itemInfo.UserData); int count = 0; if (useDataDic != null && useDataDic.TryGetValue((int)ItemUseDataKey.itemCount, out List list) && list != null && list.Count > 0) { count = list[0]; cellModel = new ItemCellModel(itemInfo.ItemID, false, (ulong)count, "", type, false, useDataDic); } else { cellModel = new ItemCellModel(itemInfo.ItemID, false, (ulong)itemInfo.Count, "", type, false, ConfigParse.Analysis(itemInfo.UserData)); } itemBasic.Init(cellModel); itemBasic.button.RemoveAllListeners(); itemBasic.button.AddListener(() => { ShowItem(itemInfo); }); itemBasic.transform.localScale = Vector3.zero; itemBasic.transform.localPosition = Vector3.zero; itemBasic.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; bool isSelectItem = BoxModel.IsSelectItemByID(itemModel.itemId, out var selectDict); if (isSelectItem) { ModelCenter.Instance.GetModel().OpenChooseItemsWin(); return; } int useCnt = BoxModel.GetUseCntByID(itemModel.itemId); ItemOperateUtility.Instance.UseItem(itemModel.guid, 1); } private void ClickUseBtnTen() { if (itemModel == null) return; if (_playerPack.GetEmptyGridCount(PackType.Item) < 10) { SysNotifyMgr.Instance.ShowTip("GeRen_chenxin_676165", (int)PackType.Item); return; } int useCnt = BoxModel.GetUseCntByID(itemModel.itemId); ItemOperateUtility.Instance.UseItem(itemModel.guid, 10); } private void ClickBackBtn() { CloseImmediately(); } private void ShowItem(BoxGetItemInfo info) { if (ItemLogicUtility.Instance.IsDogzEquip(info.ItemID) || ItemLogicUtility.Instance.IsRealmEquip(info.ItemID)) { var useDataDict = ConfigParse.Analysis(info.UserData); List legendProperties = null; List equipSkillList = null; if (useDataDict != null) { var count = 0; if (useDataDict.ContainsKey((int)ItemUseDataKey.legendAttrID) && useDataDict.ContainsKey((int)ItemUseDataKey.legendAttrValue)) { legendProperties = new List(); count = Mathf.Min(useDataDict[(int)ItemUseDataKey.legendAttrID].Count, useDataDict[(int)ItemUseDataKey.legendAttrValue].Count); } for (var i = 0; i < count; i++) { var x = useDataDict[(int)ItemUseDataKey.legendAttrID][i]; var y = useDataDict[(int)ItemUseDataKey.legendAttrValue][i]; legendProperties.Add(new Int2(x, y)); } if (useDataDict.ContainsKey((int)ItemUseDataKey.equipSkills)) { equipSkillList = useDataDict[(int)ItemUseDataKey.equipSkills]; } } var config = ItemConfig.Get(info.ItemID); ItemTipUtility.ShowCustomEquip(new ItemTipUtility.CustomEquipInfo() { job = PlayerDatas.Instance.baseData.Job, itemId = info.ItemID, score = ItemLogicUtility.Instance.GetEquipScore(info.ItemID, useDataDict), legendProperties = legendProperties, isEquiped = false, equipSkillList = equipSkillList, }); } else { ItemTipUtility.Show(info.ItemID); } } } }