using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; using System.Linq; namespace vnxbqy.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] float scaleTime = 0.2f; [Header("有寻宝道具")] [SerializeField] GameObject container_XBTool; [SerializeField] Text haveToolText; [SerializeField] Button makeUseToolBtn; [SerializeField] GameObject selectUseToolImg; [Header("消耗金钱或道具")] [SerializeField] GameObject costMoneyObj; [SerializeField] GameObject costToolObj; [SerializeField] GameObject costManyMoneyObj; [SerializeField] GameObject costManyToolObj; [SerializeField] Text costToolNumText; [SerializeField] Text costToolManyText; //Money_Type_1 [SerializeField] Image costImage; [SerializeField] Image costImage2; [SerializeField] Image toolImage; [SerializeField] Image toolImage2; [SerializeField] Image toolImage3; HappyXBModel XBModel { get { return ModelCenter.Instance.GetModel(); } } PackModel playerPack { get { return ModelCenter.Instance.GetModel(); } } List GetItemlist = new List(); List getItemBasiclist = new List(); List xbItemlist; int oneMoney = 0; int manyMoney = 0; bool isHaveXBTool = false; bool isCostToolMany = false; XBGetItemConfig xbItemConfig = null; protected override void BindController() { } protected override void AddListeners() { backBtn.AddListener(ClickBackBtn); xbBtn.AddListener(ClickXBBtn); xbManyBtn.AddListener(ClickXBManyBtn); makeUseToolBtn.AddListener(ClickMakeUseTool); } protected override void OnPreOpen() { XBModel.StartXBEvent += OnStartXB; getItem.SetActive(false); InitUI(); } protected override void OnAfterOpen() { CheckHaveXBTool(); UpdateCostType(); } protected override void OnPreClose() { XBModel.StartXBEvent -= OnStartXB; XBModel.rangelist.Clear(); DestroyGetItemlist(); GetItemlist.Clear(); getItemBasiclist.Clear(); } protected override void OnAfterClose() { } private void InitUI() { xbItemConfig = XBModel.GetXBItemConfigByType((int)XBModel.title); CreateGetItem(); xbScoreText.text = XBModel.addXBScore.ToString(); for(int i = 0; i < xbItemlist.Count; i++) { var xbItem = xbItemlist[i]; int count = playerPack.GetItemCountByID(PackType.Treasure,xbItemlist[i].itemId); if(count > 0) { XBModel.RefreshXBWarehouse(); } } } private void ClickMakeUseTool() { bool isToolXB = !selectUseToolImg.activeInHierarchy; XBModel.SetUseToolXB(isToolXB); UpdateCostType(); } private void CheckHaveXBTool() { int xbToolCnt = 0; int needToolCnt = 0; isHaveXBTool = XBModel.IsHaveManyXBTool((int)XBModel.title, out xbToolCnt, out needToolCnt); isCostToolMany = xbToolCnt >= needToolCnt; haveToolText.text = StringUtility.Contact("x",xbToolCnt); } private void UpdateCostType() { bool isToolXB = selectUseToolImg.activeInHierarchy; int[] xbIDArr = TreasurePavilionModel.Instance.xbIDArr; costMoneyObj.SetActive(!isHaveXBTool || !isToolXB); costToolObj.SetActive(isHaveXBTool && isToolXB); costManyMoneyObj.SetActive(!isCostToolMany || !isToolXB); costManyToolObj.SetActive(isCostToolMany && isToolXB); XBFuncSet funcSet = XBModel.GetXBFuncSet((int)XBModel.title); if (funcSet != null) { oneMoney = funcSet.xbPrices[0]; manyMoney = funcSet.xbPrices[1]; if (isHaveXBTool && isToolXB) { xbBtnText.text = Language.Get("HappyXB107", funcSet.xbNums[0]); costToolNumText.text = Language.Get("HappyXB108", funcSet.costToolNums[0]); } else { xbBtnText.text = Language.Get("HappyXB103", funcSet.xbNums[0]); xbMoneyText.text = oneMoney.ToString(); } if(isCostToolMany && isToolXB) { xbManyBtnText.text = Language.Get("HappyXB107", funcSet.xbNums[1]); costToolManyText.text = Language.Get("HappyXB108", funcSet.costToolNums[1]); ; } else { xbManyBtnText.text = Language.Get("HappyXB103", funcSet.xbNums[1]); xbManyMoneyText.text = manyMoney.ToString(); } } if (XBModel.title == HappXBTitle.Best) { costImage.SetSprite("Money_Type_1"); costImage2.SetSprite("Money_Type_1"); } else if (XBModel.title == HappXBTitle.Rune) { costImage.SetSprite("Money_Type_2"); costImage2.SetSprite("Money_Type_2"); } else if (XBModel.title == HappXBTitle.Gubao1) { int treasureID = xbIDArr[0]; int type = XBGetItemConfig.Get(treasureID).TreasureType; int costMoneyType = TreasureSetConfig.Get(type).CostMoneyType; int itemID = TreasureSetConfig.Get(type).CostItemID; costImage.SetSprite("Money_Type_"+ costMoneyType); costImage2.SetSprite("Money_Type_"+ costMoneyType); toolImage.SetSprite(ItemConfig.Get(itemID).IconKey); toolImage2.SetSprite(ItemConfig.Get(itemID).IconKey); toolImage3.SetSprite(ItemConfig.Get(itemID).IconKey); } else if (XBModel.title == HappXBTitle.Gubao2) { int treasureID = xbIDArr[1]; int type = XBGetItemConfig.Get(treasureID).TreasureType; int costMoneyType = TreasureSetConfig.Get(type).CostMoneyType; costImage.SetSprite("Money_Type_" + costMoneyType); costImage2.SetSprite("Money_Type_" + costMoneyType); } else if (XBModel.title == HappXBTitle.Gubao3) { int treasureID = xbIDArr[2]; int type = XBGetItemConfig.Get(treasureID).TreasureType; int costMoneyType = TreasureSetConfig.Get(type).CostMoneyType; costImage.SetSprite("Money_Type_" + costMoneyType); costImage2.SetSprite("Money_Type_" + costMoneyType); } else if (XBModel.title == HappXBTitle.Gubao4) { int treasureID = xbIDArr[3]; int type = XBGetItemConfig.Get(treasureID).TreasureType; int costMoneyType = TreasureSetConfig.Get(type).CostMoneyType; costImage.SetSprite("Money_Type_" + costMoneyType); costImage2.SetSprite("Money_Type_" + costMoneyType); } else if (XBModel.title == HappXBTitle.GatherSoul) { int costMoneyType = TreasureSetConfig.Get(GatheringSoulModel.xbType).CostMoneyType; costImage.SetSprite("Money_Type_" + costMoneyType); costImage2.SetSprite("Money_Type_" + costMoneyType); toolImage.SetSprite(ItemConfig.Get(GatheringSoulModel.xbItemID).IconKey); toolImage2.SetSprite(ItemConfig.Get(GatheringSoulModel.xbItemID).IconKey); toolImage3.SetSprite(ItemConfig.Get(GatheringSoulModel.xbItemID).IconKey); } } 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.SetActive(true); XBGetItemCell itemBasic = item.transform.Find("CommonItemCell").GetComponent(); ItemCellModel cellModel = new ItemCellModel(xbItem.itemId, false, (ulong)xbItem.count); itemBasic.Init(cellModel); itemBasic.button.RemoveAllListeners(); itemBasic.button.AddListener(() => { ItemTipUtility.Show(xbItem.itemId); }); itemBasic.transform.localScale = Vector3.zero; itemBasic.transform.localPosition = Vector3.zero; GetItemlist.Add(item); itemBasic.SetActive(false); getItemBasiclist.Add(itemBasic); } 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(() => { getItemBasiclist[index].SetUIEffect(); index += 1; ShowGetItemCtrl(index); }); var xbItem = xbItemlist[index]; bool isJump = false; switch(XBModel.title) { case HappXBTitle.Best: if(XBModel.isJumpBestXB) { isJump = true; } break; case HappXBTitle.Rune: if (XBModel.isJumpRuneXB) { isJump = true; } break; case HappXBTitle.Gubao1: case HappXBTitle.Gubao2: case HappXBTitle.Gubao3: case HappXBTitle.Gubao4: if (XBModel.isJumpGubaoXB) { isJump = true; } break; case HappXBTitle.GatherSoul: if (XBModel.isJumpGatherSoulXB) { isJump = true; } break; } if (isJump && xbItem.gridIndex == TreasureSetConfig.Get(xbItemConfig.TreasureType).LuckyGridNum) { SoundPlayer.Instance.PlayUIAudio(67); } } } private void DestroyGetItemlist() { for(int i = 0; i < GetItemlist.Count; i++) { Destroy(GetItemlist[i]); } } private void ClickXBBtn() { SendXBQuest(0); if (XBModel.title == HappXBTitle.Gubao1 || XBModel.title == HappXBTitle.Gubao2 || XBModel.title == HappXBTitle.Gubao3 || XBModel.title == HappXBTitle.Gubao4 || XBModel.title == HappXBTitle.GatherSoul) { TreasurePavilionModel.Instance.isEffectPlaying = true; } } private void ClickXBManyBtn() { SendXBQuest(1); if (XBModel.title == HappXBTitle.Gubao1 || XBModel.title == HappXBTitle.Gubao2 || XBModel.title == HappXBTitle.Gubao3 || XBModel.title == HappXBTitle.Gubao4 || XBModel.title == HappXBTitle.GatherSoul) { TreasurePavilionModel.Instance.isEffectPlaying = true; } } public int GetCostType(int xbNum) { if(xbNum == 0) { bool isFreeXB = XBModel.IsHaveFreeXB((int)XBModel.title); if (isFreeXB) return 1; if (costMoneyObj.activeInHierarchy) return 0; } else { if (costManyMoneyObj.activeInHierarchy) return 0; } return 2; } public void SendXBQuest(int xbNum) { if (!XBModel.CheckIsEmptyGrid(PackType.Treasure)) return; int moneyType = XBModel.XBCostTypeDict[(int)XBModel.title]; int costType = GetCostType(xbNum); bool isMoneyEnough = true; if (xbNum == 0) { isMoneyEnough = UIHelper.GetMoneyCnt(moneyType) >= (ulong)oneMoney; } else { isMoneyEnough = UIHelper.GetMoneyCnt(moneyType) >= (ulong)manyMoney; } switch(costType) { case 0: if (!isMoneyEnough) { //WindowCenter.Instance.Open(); SysNotifyMgr.Instance.ShowTip("LackMoney", moneyType); return; } break; case 1: case 2: break; } switch (XBModel.title) { case HappXBTitle.Best: XBModel.SendXBQuest(1, xbNum, costType); break; case HappXBTitle.Rune: XBModel.SendXBQuest(2, xbNum, costType); break; case HappXBTitle.Gubao1: case HappXBTitle.Gubao2: case HappXBTitle.Gubao3: case HappXBTitle.Gubao4: int treasureID = TreasurePavilionModel.Instance.xbIDArr[TreasurePavilionModel.Instance.xbIndex]; int treasureType = XBGetItemConfig.Get(treasureID).TreasureType; XBModel.SendXBQuest(treasureType, xbNum, costType); break; case HappXBTitle.GatherSoul: XBModel.SendXBQuest(GatheringSoulModel.xbType, xbNum, costType); break; } } private void OnStartXB(int oneOrMany) { ClickBackBtn(); } private void ClickBackBtn() { CloseImmediately(); TreasurePavilionModel.Instance.isEffectPlaying = false; } } }