using Snxxz.UI; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class BuyWingsTip : MonoBehaviour { #region TopUI [SerializeField] Button closeBtn; [SerializeField] Text titleText; [SerializeField] Text equipScoreDes; [SerializeField] Text equipScoreValue; [SerializeField] Text conditionText; [SerializeField] Image conditionValueText; [SerializeField] Text dateText; [SerializeField] ItemCell itemCell; #endregion #region MidUI [SerializeField] RectTransform attrContent; [SerializeField] ScrollRect scrollRect; [SerializeField] LayoutElement scrollLayout; [SerializeField] GameObject basicAttr; [SerializeField] Text basicTitleText; [SerializeField] Text basicAttrDes; [SerializeField] GameObject legendAttr; [SerializeField] Text legendTitleText; [SerializeField] Text legendCntPreview; [SerializeField] Text legendAttrDes; [SerializeField] List attrCutLinelist = new List(); #endregion #region BottomUI [SerializeField] GameObject bottomPart; [SerializeField] EquipSource equipSource; [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; #endregion [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()); } } ItemAttrData itemAttrData; BuyItemPopModel buyItem; BuyShopItemLimit shopItemLimit; int canBuyCnt = 0; int buyCnt = 0; int curVipIndex = -1; bool isVipBuy = false; private int curAttrTypeNum = 0; public void InitModel(ItemAttrData attrData) { curAttrTypeNum = 0; itemAttrData = attrData; buyItem = BuyItemPopModel.Instance; shopItemLimit = m_storeModel.GetBuyShopLimit((uint)buyItem.storeConfig.ID); InitUI(); 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); } private void OnEnable() { bottomPart.gameObject.SetActive(false); StartCoroutine(SetScrollSize()); } private void OnDisable() { closeBtn.RemoveAllListeners(); buyBtn.RemoveAllListeners(); reduceBtn.RemoveAllListeners(); plusBtn.RemoveAllListeners(); buyCountBtn.RemoveAllListeners(); numKeyboard.onConfirm.RemoveAllListeners(); numKeyboard.onValueChange.RemoveAllListeners(); } IEnumerator SetScrollSize() { yield return null; yield return null; attrContent.anchoredPosition3D = new Vector3(attrContent.anchoredPosition3D.x, 0, 0); SetMidUIHeight(attrContent.rect.height); StartCoroutine(ShowBottomPart()); } IEnumerator ShowBottomPart() { yield return null; SetBottomUI(); StartCoroutine(SetPanelScale()); } IEnumerator SetPanelScale() { yield return null; if(itemAttrData.isCompare) { if (itemAttrData.packType != PackType.rptEquip) { itemTipsModel.SetCurTips(this.GetComponent()); } else { itemTipsModel.SetCompareTips(this.GetComponent()); } } else { itemTipsModel.SetCurTips(this.GetComponent()); } tipAlpha.alpha = 1; } private void InitUI() { #region 设置TopUI titleText.text = itemTipsModel.GetItemTipsTitle(itemAttrData); titleText.color = UIHelper.GetUIColor(itemAttrData.itemConfig.ItemColor); ItemCellModel cellModel = new ItemCellModel(itemAttrData.itemId,itemAttrData.isPreview , (ulong)itemAttrData.count, itemAttrData.isBind, itemAttrData.guid,itemAttrData.packType ,itemAttrData.isCompare, itemAttrData.useDataDict); itemCell.Init(cellModel); equipScoreDes.text = Language.Get("EquipWin_EquipPointText_1"); equipScoreValue.text = itemAttrData.score.ToString(); if (itemAttrData.isHavePutLimit) { conditionText.gameObject.SetActive(true); conditionValueText.gameObject.SetActive(true); var _realmLv = itemAttrData.itemConfig.RealmLimit; var _realmCfg = Config.Instance.Get(_realmLv); if (PlayerDatas.Instance.baseData.realmLevel < _realmLv) { conditionText.text = UIHelper.GetTextColorByItemColor(TextColType.Red, Language.Get("RealmLimit1")); if (_realmLv != 0) { conditionValueText.SetSprite(_realmCfg.Img); } else { conditionText.gameObject.SetActive(false); conditionValueText.gameObject.SetActive(false); } } else { if(_realmLv != 0) { conditionText.text = StringUtility.Contact("", Language.Get("RealmLimit1"), ""); conditionValueText.SetSprite(_realmCfg.Img); } else { conditionText.gameObject.SetActive(false); conditionValueText.gameObject.SetActive(false); } } } else { conditionText.gameObject.SetActive(false); conditionValueText.gameObject.SetActive(false); } if (itemAttrData.itemConfig.ExpireTime > 0) { SetDateLimitUI(itemAttrData.itemConfig.ExpireTime); } else { dateText.gameObject.SetActive(false); } #endregion #region 设置MidUI SetBasicAttrUI(); SetLegendAttrUI(); for (int i = 0; i < attrCutLinelist.Count; i++) { if (i == curAttrTypeNum - 1) { attrCutLinelist[curAttrTypeNum - 1].SetActive(false); } else { attrCutLinelist[i].SetActive(true); } } #endregion } 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"); } } #region 设置属性UI private void SetBasicAttrUI() { basicAttr.SetActive(true); basicTitleText.text = Language.Get("RolePanel_BaseAttrText_1"); basicAttrDes.text = itemTipsModel.GetBasicAttr(itemAttrData); curAttrTypeNum = 1; } private void SetLegendAttrUI() { if(itemAttrData.legendDataDict == null) { legendAttr.SetActive(false); return; } curAttrTypeNum = 2; legendAttr.SetActive(true); legendTitleText.text = Language.Get("EquipWin_LegendPropObj_Text_1"); legendAttrDes.text = itemTipsModel.GetLegendAttr(itemAttrData); if (itemAttrData.isPreview) { legendCntPreview.gameObject.SetActive(true); legendCntPreview.text = itemTipsModel.GetWingsLegendAttrCntPreview(itemAttrData); } else { legendCntPreview.gameObject.SetActive(false); } } 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; } } #endregion private void SetBottomUI() { bottomPart.gameObject.SetActive(true); SetBottomText(equipSource); 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 (itemAttrData.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 void SetBottomText(EquipSource source) { source.jobTitleText.text = Language.Get("EquipWin_JobTitleText_1"); source.jobText.text = itemTipsModel.GetEquipJobName(itemAttrData); source.partTitleText.text = Language.Get("EquipWin_PartTitleText_1"); source.partText.text = Language.Get("KnapS125"); source.itemDesText.text = itemAttrData.itemConfig.Description; } 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() { KnapSackEventMgr.Instance.HideItemPopWin(); } #endregion } }