using UnityEngine; using UnityEngine.UI; using System.Collections; using Snxxz.UI; using System.Collections.Generic; using System; using TableConfig; namespace Snxxz.UI { public class BuyBoxInfoWin : Window { [SerializeField] RectTransform bgObj; [SerializeField] Text titleText; [SerializeField] ItemCell itemCell; [SerializeField] Button closeBtn; [SerializeField] Text dateText; [SerializeField] Text conditionText; [SerializeField] Text needLvText; [SerializeField] Text realmTitleText; [SerializeField] Image realmImg; [SerializeField] Text itemTypeText; [SerializeField] Text itemDesText; [SerializeField] RectTransform itemDesContent; [SerializeField] ScrollRect scrollRect; [SerializeField] LayoutElement scrollLayout; [SerializeField] GameObject bottomPart; [SerializeField] RectTransform numberGo; [SerializeField] Text vipInfoText; [SerializeField] Text buyCountText; [SerializeField] Text buyPriceText; [SerializeField] RectTransform moneyRect; [SerializeField] Image moneyIcon; [SerializeField] Button reduceBtn; [SerializeField] Button plusBtn; [SerializeField] Button buyCountBtn; [SerializeField] Button buyBtn; [SerializeField] Text buyBtnText; [SerializeField] NumKeyBoard numKeyboard; [SerializeField] CanvasGroup tipAlpha; ItemTipsModel _itemTipsModel; ItemTipsModel itemTipsModel { get { return _itemTipsModel ?? (_itemTipsModel = ModelCenter.Instance.GetModel()); } } StoreModel _storeModel; StoreModel m_storeModel { get { return _storeModel ?? (_storeModel = ModelCenter.Instance.GetModel()); } } BuyItemPopModel buyItem; BuyShopItemLimit shopItemLimit; int canBuyCnt = 0; int buyCnt = 0; int curVipIndex = -1; bool isVipBuy = false; Color32 conditionColor = new Color32(255, 244, 205, 255); Color32 conditionRedColor = new Color32(255, 1, 1, 255); protected override void BindController() { } protected override void AddListeners() { closeBtn.AddListener(OnClickCloseBtn); buyBtn.AddListener(OnClickBuyBtn); reduceBtn.onClick.AddListener(OnClickReduceBuyNum); plusBtn.onClick.AddListener(OnClickPlusBuyNum); buyCountBtn.onClick.AddListener(OnClickCountBtn); numKeyboard.onConfirm.AddListener(OnClickConfirmBtn); numKeyboard.onValueChange.AddListener(OnClickNum); } protected override void OnPreOpen() { buyItem = BuyItemPopModel.Instance; shopItemLimit = m_storeModel.GetBuyShopLimit((uint)buyItem.storeConfig.ID); tipAlpha.alpha = 0; bottomPart.SetActive(false); InitUI(); } protected override void OnAfterOpen() { StartCoroutine(SetScrollSize()); } protected override void OnPreClose() { } protected override void OnAfterClose() { } private void InitUI() { if (itemTipsModel.curAttrData == null) return; itemTypeText.text = itemTipsModel.curAttrData.itemConfig.ItemTypeName; titleText.text = itemTipsModel.curAttrData.itemConfig.ItemName; titleText.color = UIHelper.GetUIColor(itemTipsModel.curAttrData.itemConfig.ItemColor); ItemCellModel cellModel = new ItemCellModel(itemTipsModel.curAttrData.itemId, itemTipsModel.curAttrData.isPreview, (ulong)itemTipsModel.curAttrData.count,itemTipsModel.curAttrData.isBind ,itemTipsModel.curAttrData.guid, itemTipsModel.curAttrData.packType,false); itemCell.Init(cellModel); conditionText.gameObject.SetActive(false); needLvText.gameObject.SetActive(false); realmTitleText.gameObject.SetActive(false); realmImg.gameObject.SetActive(false); ChestsConfig chestsConfig = Config.Instance.Get(itemTipsModel.curAttrData.itemId); if (chestsConfig != null && chestsConfig.OpenMoney > 0) { conditionText.gameObject.SetActive(true); ulong haveMoney = UIHelper.GetMoneyCnt(1); if (haveMoney >= (ulong)chestsConfig.OpenMoney) { conditionText.text = Language.Get("OpenBoxCostMoney", UIHelper.GetTextColorByItemColor(TextColType.Green, chestsConfig.OpenMoney.ToString())); } else { conditionText.text = Language.Get("OpenBoxCostMoney", UIHelper.GetTextColorByItemColor(TextColType.Red, chestsConfig.OpenMoney.ToString())); } } else { CheckUselimit(); } itemDesText.text = itemTipsModel.curAttrData.itemConfig.Description; if (itemTipsModel.curAttrData.itemConfig.ExpireTime > 0) { SetDateLimitUI(itemTipsModel.curAttrData.itemConfig.ExpireTime); } else { dateText.gameObject.SetActive(false); } } private void CheckUselimit() { int[] uselimits = itemTipsModel.curAttrData.itemConfig.UseCondiType; if (uselimits == null) return; for (int i = 0; i < uselimits.Length; i++) { switch (uselimits[i]) { case 0: if (itemTipsModel.curAttrData.itemConfig.UseLV > 1) { conditionText.gameObject.SetActive(true); needLvText.gameObject.SetActive(true); } conditionText.text = Language.Get("KnapS110"); needLvText.text = itemTipsModel.curAttrData.itemConfig.UseLV.ToString(); if (PlayerDatas.Instance.baseData.LV >= itemTipsModel.curAttrData.itemConfig.UseLV) { conditionText.color = conditionColor; needLvText.color = conditionColor; } else { conditionText.color = conditionRedColor; needLvText.color = conditionRedColor; } break; case 1: realmTitleText.gameObject.SetActive(true); realmImg.gameObject.SetActive(true); realmTitleText.text = Language.Get("RealmLimit1"); RealmConfig realmConfig = Config.Instance.Get(itemTipsModel.curAttrData.itemConfig.RealmLimit); if (itemTipsModel.curAttrData.itemConfig.RealmLimit <= 0) { realmImg.SetSprite("NoRealm"); } else { if (realmConfig != null) { realmImg.SetSprite(realmConfig.Img); } } if (PlayerDatas.Instance.baseData.realmLevel >= itemTipsModel.curAttrData.itemConfig.RealmLimit) { realmTitleText.color = conditionColor; } else { realmTitleText.color = conditionRedColor; } break; case 2: break; } } } private void SetDateLimitUI(double time) { dateText.gameObject.SetActive(true); TimeSpan t = TimeSpan.FromSeconds(time); if (t.TotalDays > 1) { dateText.text = Language.Get("EquipInfo_OverdueDay", (int)t.TotalDays); } else if (t.TotalHours > 1) { dateText.text = Language.Get("EquipInfo_OverdueHour", (int)t.TotalHours); } else if (t.TotalMinutes > 1) { dateText.text = Language.Get("EquipInfo_OverdueMin", (int)t.TotalMinutes); } else if (t.TotalMinutes > 0) { dateText.text = Language.Get("EquipInfo_OverdueMin", 1); } else if (t.TotalSeconds <= 0) { dateText.text = Language.Get("EquipInfo_Overdued"); } } IEnumerator SetScrollSize() { yield return null; yield return null; itemDesContent.anchoredPosition3D = new Vector3(itemDesContent.anchoredPosition3D.x, 0, 0); SetMidUIHeight(itemDesContent.rect.height); StartCoroutine(ShowBottomPart()); } IEnumerator ShowBottomPart() { yield return null; SetBottomUI(); StartCoroutine(SetPanelScale()); } IEnumerator SetPanelScale() { yield return null; yield return null; bgObj.localPosition = Vector3.zero; //itemTipsModel.SetCommonTipPos(bgObj); tipAlpha.alpha = 1; } private void SetMidUIHeight(float midHeight) { scrollRect.enabled = false; if (midHeight < itemTipsModel.equipMidHeights[0]) { scrollLayout.preferredHeight = itemTipsModel.equipMidHeights[0]; } else if (midHeight > itemTipsModel.equipMidHeights[1]) { scrollRect.enabled = true; scrollLayout.preferredHeight = itemTipsModel.equipMidHeights[1]; } else { scrollLayout.preferredHeight = midHeight; } } private void SetBottomUI() { bottomPart.gameObject.SetActive(true); numKeyboard.gameObject.SetActive(false); curVipIndex = -1; int nextVipIndex = -1; isVipBuy = buyItem.CheckIsVipBuy(buyItem.storeConfig,out curVipIndex,out nextVipIndex); canBuyCnt = 0; int addBuyCnt = 0; bool isLimitCnt = buyItem.CheckIsLimitBuyCnt(buyItem.storeConfig,out canBuyCnt,out addBuyCnt); bool isReachUpper = false; buyCnt = 0; if (itemTipsModel.curAttrData.itemConfig.PackCount > 1) { numberGo.gameObject.SetActive(true); } else { numberGo.gameObject.SetActive(false); } if(isVipBuy) { if(nextVipIndex != -1) { vipInfoText.gameObject.SetActive(true); vipInfoText.text = Language.Get("StoreWin108",canBuyCnt, StringUtility.Contact("V",buyItem.storeConfig.VIPLV[nextVipIndex]),addBuyCnt); } else { vipInfoText.gameObject.SetActive(false); } if(curVipIndex != -1) { buyBtn.gameObject.SetActive(true); buyCnt = buyItem.GetCurBuyCnt(1, canBuyCnt,isVipBuy,out isReachUpper); } else { buyBtn.gameObject.SetActive(false); buyCnt = buyItem.GetCurBuyCnt(0, canBuyCnt, isVipBuy, out isReachUpper); } } else { vipInfoText.gameObject.SetActive(false); buyBtn.gameObject.SetActive(true); buyCnt = buyItem.GetCurBuyCnt(1, canBuyCnt, isVipBuy, out isReachUpper); } buyCountText.text = buyCnt.ToString(); RefreshBuyPrice(buyCnt); moneyIcon.SetIconWithMoneyType(buyItem.storeConfig.MoneyType); } private ulong _price; private void RefreshBuyPrice(int buyCnt) { if(buyCnt < 1) { _price = (ulong)buyItem.storeConfig.MoneyNumber; } else { _price = (ulong)buyItem.GetBuyPrice(buyItem.storeConfig,buyCnt); } if (!m_storeModel.MoneyIsEnough(buyItem.storeConfig.MoneyType, _price)) { buyPriceText.text = UIHelper.GetTextColorByItemColor(TextColType.Red, _price.ToString()); } else { buyPriceText.text = UIHelper.GetTextColorByItemColor(TextColType.Green, _price.ToString()); } if (_price <= 0) { numberGo.gameObject.SetActive(false); moneyRect.gameObject.SetActive(false); buyBtnText.text = Language.Get("MailReceive"); } else { numberGo.gameObject.SetActive(true); moneyRect.gameObject.SetActive(true); buyBtnText.text = Language.Get("ItemHandle_buy"); } } #region 点击事件 private void OnClickCountBtn() { numKeyboard.gameObject.SetActive(true); } private int GetRemainBuyCnt() { int haveBuyCnt = 0; if (shopItemLimit != null) { haveBuyCnt = shopItemLimit.BuyCnt; } int remainCnt = canBuyCnt - haveBuyCnt; if (remainCnt >= 0) { return remainCnt; } else { return 0; } } private void OnClickNum() { bool isReachUpper = false; buyCnt = buyItem.GetCurBuyCnt(int.Parse(numKeyboard.Value),GetRemainBuyCnt(), isVipBuy,out isReachUpper); RefreshBuyPrice(buyCnt); numKeyboard.Value = buyCnt.ToString(); if (isReachUpper) { MessageWin.Inst.ShowFixedTip(Language.Get("StoreWin109")); } } private void OnClickConfirmBtn(bool arg0) { if (arg0) { buyCountText.text = buyCnt.ToString(); numKeyboard.gameObject.SetActive(false); } } private void OnClickPlusBuyNum() { buyCnt += 1; bool isReachUpper = false; buyCnt = buyItem.GetCurBuyCnt(buyCnt, GetRemainBuyCnt(), isVipBuy, out isReachUpper); buyCountText.text = buyCnt.ToString(); RefreshBuyPrice(buyCnt); if (isReachUpper) { MessageWin.Inst.ShowFixedTip(Language.Get("StoreWin109")); } } private void OnClickReduceBuyNum() { buyCnt -= 1; bool isReachUpper = false; buyCnt = buyItem.GetCurBuyCnt(buyCnt, GetRemainBuyCnt(), isVipBuy,out isReachUpper); buyCountText.text = buyCnt.ToString(); RefreshBuyPrice(buyCnt); } private void OnClickBuyBtn() { if (shopItemLimit != null) { int remainNum = 0; if(isVipBuy) { remainNum = buyItem.storeConfig.PurchaseNumber[curVipIndex] - shopItemLimit.BuyCnt; } else { remainNum = buyItem.storeConfig.PurchaseNumber[0] - shopItemLimit.BuyCnt; } if (remainNum < 1) { MessageWin.Inst.ShowFixedTip(Language.Get("StoreWin109")); return; } } m_storeModel.SendBuyShopItem(buyItem.storeConfig,buyCnt); OnClickCloseBtn(); } private void OnClickCloseBtn() { CloseImmediately(); } #endregion } }