using UI.CommonGame; using System; using FairyGUI; using System.Collections.Generic; namespace GFGGame { public class BuyCountView : BaseWindow { private UI_BuyCountUI _ui; // private ClothingShopCfg _cfg; private float _selectTimeCount = 0;//长按时间 private int _consumeSelectIndex = 0;//0为减,1为加 private float _delay = 300; private float longpress = 900;//大于900毫秒才算长按 private int _itemId; private int _costId; private int _perCount; private int _perCostCount; private int _count; private int _maxCount; private bool _openSource; private bool _showTips; private Action _onSuccess; public override void Dispose() { base.Dispose(); } protected override void OnInit() { base.OnInit(); _ui = UI_BuyCountUI.Create(); this.viewCom = _ui.target; this.viewCom.Center(); this.modal = true; viewAnimationType = EnumViewAnimationType.ZOOM_CENTER; _ui.m_btnPlus.onClick.Add(OnClickBtnPlus); _ui.m_btnMinus.onClick.Add(OnClickBtnMinus); _ui.m_btnAll.onClick.Add(OnClickBtnAll); _ui.m_btnPlus.onTouchBegin.Add(OnTouchPlusBegin); _ui.m_btnMinus.onTouchBegin.Add(OnTouchMinusBegin); _ui.m_btnPlus.onTouchEnd.Add(() => { Timers.inst.Remove(OnTimedEvent); }); _ui.m_btnMinus.onTouchEnd.Add(() => { Timers.inst.Remove(OnTimedEvent); }); _ui.m_btnSure.onClick.Add(OnClickBtnSure); _ui.m_btnCancel.onClick.Add(OnClickBtnCancel); } /// /// /// /// 物品id /// 消耗品id /// 单位兑换数量 /// 单位消耗数量 /// 购买完成回调 /// 是否弹购买成功飘字,默认是 /// 是否打开来源界面。默认否 /// 兑换总量 public void SetParams(int itemId, int costId, int perCount, int perCostCount, int count, Action onSuccess = null, bool showTips = true, bool openSource = false, int maxCount = 9990) { _itemId = itemId; _costId = costId; _perCount = perCount; _perCostCount = perCostCount; _count = count; _onSuccess = onSuccess; _maxCount = maxCount; _openSource = openSource; _showTips = showTips; } protected override void OnShown() { base.OnShown(); _ui.m_txtCount.text = "" + _count; UpdateView(); GuideController.TryGuideBuyCountViewBtnSure(_ui.m_btnSure); } private void UpdateView() { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(_itemId); _ui.m_icon.url = ResPathUtil.GetIconPath(itemCfg); string itemName = itemCfg.name; _ui.m_txtName.text = itemName; if (ItemUtil.IsDressUpItem(_itemId)) { _ui.m_rarity.visible = true; RarityIconController.UpdateRarityIcon(_ui.m_rarity, _itemId, false); } else { _ui.m_rarity.visible = false; } ItemCfg costItemCfg = ItemCfgArray.Instance.GetCfg(_costId); _ui.m_iconPrice.url = "ui://CommonGame/" + costItemCfg.res; _ui.m_txtBuyTips.text = string.Format("消耗{0}{1},可兑换{2}{3}", _perCostCount, costItemCfg.name, _perCount, itemCfg.name); _ui.m_txtBuyTips.visible = false; UpdateCost(); } private void UpdateCost() { int count = int.Parse(_ui.m_txtCount.text.Trim()); int price = (int)Math.Ceiling((decimal)count / _perCount) * _perCostCount; // int price = ItemUtil.CostItemCount(_itemId, count); _ui.m_txtPrice.text = "" + price; SetBtnState(); } private void OnTouchPlusBegin() { _selectTimeCount = 0; _consumeSelectIndex = 1; Timers.inst.Add(_delay / 1000, 0, OnTimedEvent); } private void OnTouchMinusBegin() { _selectTimeCount = 0; _consumeSelectIndex = 0; Timers.inst.Add(_delay / 1000, 0, OnTimedEvent); } private void OnTimedEvent(object param) { _selectTimeCount += _delay; //_timer.Interval; if (_selectTimeCount >= longpress) { if (_consumeSelectIndex == 0) { if (!CommonUtil.Instance.CheckPointIsOnComponent(_ui.m_btnMinus, CommonUtil.Instance.GetMouseV2Point())) { Timers.inst.Remove(OnTimedEvent); return; } this.OnClickBtnMinus(); } else { if (!CommonUtil.Instance.CheckPointIsOnComponent(_ui.m_btnPlus, CommonUtil.Instance.GetMouseV2Point())) { Timers.inst.Remove(OnTimedEvent); return; } this.OnClickBtnPlus(); } } } private void OnClickBtnAll() { int costHasNum = ItemDataManager.GetItemNum(_costId); int value = (int)Math.Floor((decimal)(costHasNum / _perCostCount * _perCount)); // int value = ItemUtil.ItemExChangeCount(_itemId, costHasNum); value = Math.Min(_maxCount, value); _ui.m_txtCount.text = value.ToString(); UpdateCost(); } private void OnClickBtnPlus() { string inputStr = _ui.m_txtCount.text.Trim(); int value = _count; if (inputStr.Length > 0) { value = int.Parse(inputStr); } if (value < _maxCount) { value += _perCount; } _ui.m_txtCount.text = "" + value; UpdateCost(); } private void OnClickBtnMinus() { string inputStr = _ui.m_txtCount.text.Trim(); int value = _count; if (inputStr.Length > 0) { value = int.Parse(inputStr); } value -= _perCount; value = Math.Max(_count, value); _ui.m_txtCount.text = "" + value; UpdateCost(); } private void SetBtnState() { string inputStr = _ui.m_txtCount.text.Trim(); if (inputStr == null || int.Parse(inputStr) <= _count) { _ui.m_btnMinus.enabled = false; } else { _ui.m_btnMinus.enabled = true; } int costHasNum = ItemDataManager.GetItemNum(_costId); int maxCanBuy = (int)Math.Floor((decimal)(costHasNum / _perCostCount * _perCount)); // int maxCanBuy = ItemUtil.ItemExChangeCount(_itemId, costHasNum); if (inputStr != null && (int.Parse(inputStr) >= maxCanBuy)) { _ui.m_btnPlus.enabled = false; _ui.m_btnAll.enabled = false; } else { _ui.m_btnPlus.enabled = true; _ui.m_btnAll.enabled = true; } } private void OnClickBtnSure() { int count = int.Parse(_ui.m_txtCount.text.Trim()); int price = int.Parse(_ui.m_txtPrice.text.Trim()); if (count > 0) { if (price > ItemDataManager.GetItemNum(_costId)) { if (_openSource) { if (_itemId == ConstItemID.DIAMOND_RED) { ItemUtil.AddDiamondPurple(); } } else { ItemCfg costCfg = ItemCfgArray.Instance.GetCfg(_costId); PromptController.Instance.ShowFloatTextPrompt(string.Format("{0}不足!", costCfg.name)); } } else { int buyCount = price / _perCostCount * _perCount; ItemUtil.AddItemUseCost(_itemId, buyCount, _costId, price); // GuideController.HideGuide(); if (_onSuccess != null) { _onSuccess(); } if (_showTips) { PromptController.Instance.ShowFloatTextPrompt("购买成功", MessageType.SUCCESS); } } } else { PromptController.Instance.ShowFloatTextPrompt("购买异常", MessageType.ERR); } this.Hide(); } private void OnClickBtnCancel() { this.Hide(); } public void Reset() { _itemId = 0; _costId = 0; _perCount = 0; _perCostCount = 0; _count = 0; _maxCount = 0; } protected override void OnHide() { base.OnHide(); // _cfg = null; Reset(); } /// /// 是否显示购买提示 /// /// public bool showTxtBuyTips { set { _ui.m_txtBuyTips.visible = value; } } } }