using UnityEngine; using System.Collections; using UnityEngine.UI; using Games.Item; using GCGame.Table; using System.Collections.Generic; using Games.Events; using Module.Log; public class AdvanceItemPanelCtr : MonoBehaviour { public AdvancePanelCtr advancePanelCtr; public Image itemIcon; public Text needCostValue; public Text curOwnValue; public Toggle autoAdvanceToggle; public GameObject canAdvanceRedIcon; public Image quality; private int type; //当前进阶类型 //private int curOwnItemCount = 0; private int curAdvanceNeedCostCount = 0; private int curNeedCostItemId = -1; private int curNeedCostGoodItemId = -1; [HideInInspector] public int curNeedCostItemPrice = -1; [HideInInspector] public int lackItemCount; //private GameItemContainer bagPack; private int curAdvanceLevel = -1; private int curAdvanceGrade = -1; public GameObject _GainBtn; public Text btnDesc; private void Awake() { Hashtable calbackMoveparam1 = new Hashtable(); calbackMoveparam1["name"] = "OnItemUsed"; MessageEventCallBack fun1 = OnItemUsed; calbackMoveparam1.Add("callFun", fun1); Games.Events.EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.FRESHSAMEUSETIP, calbackMoveparam1); } private void OnDestroy() { Games.Events.EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.FRESHSAMEUSETIP, "OnItemUsed"); } private void OnDisable() { _IsConfirmConsumeMoney = false; _IsAutoAdvance = false; } private int _AdvanceRemainCount = 0; public void InitItemPanel(AdvanceInfo info) { _IsOutsideSetting = false; type = info.type; _AdvanceRemainCount = info._RemainAdvanceItemCount; Tab_AdvanceBase advanceBase = TableManager.GetAdvanceBaseByID(info.baseId + 1, 0); //本级升下级 读取下级的消耗 if(advanceBase == null || (advanceBase.Id - advanceBase.Level) / 1000 - 1 != type) { this.gameObject.SetActive(false); return; } //var bagPack = GameManager.gameManager.PlayerDataPool.GetItemContainer(GameItemContainer.Type.TYPE_BACKPACK); //if (bagPack == null) // return; //curOwnValue.text = bagPack.GetItemCountByDataId(advanceBase.AdvanceCostItemId) + ""; Tab_CommonItem commonItem = TableManager.GetCommonItemByID(advanceBase.AdvanceCostItemId, 0); if(commonItem == null) { return; } //设置图片 LoadAssetBundle.Instance.SetImageSprite(itemIcon, commonItem.Icon); LoadAssetBundle.Instance.SetImageSprite(quality, GCGame.Utils.GetItemQualityFrame(commonItem.Quality)); if (commonItem.QualityEffect > 0) { CommonItemContainerItem.ShowQualityEffect(true, commonItem.QualityEffect, itemIcon.transform); } else { CommonItemContainerItem.ShowQualityEffect(false, commonItem.QualityEffect, itemIcon.transform); } curNeedCostItemId = advanceBase.AdvanceCostItemId; needCostValue.text = advanceBase.AdvanceCostItemNum.ToString(); curAdvanceNeedCostCount = advanceBase.AdvanceCostItemNum; curAdvanceLevel = advanceBase.Level; //记录当前的level curAdvanceGrade = advanceBase.Grade; //记录当前的Grade RefreshOwnItemInfo(); GetCostItemGoodInfo(); } public void RefreshOwnItemInfo() { //bagPack = GameManager.gameManager.PlayerDataPool.GetItemContainer(GameItemContainer.Type.TYPE_BACKPACK); //if (bagPack == null) // return; //curOwnItemCount = bagPack.GetItemCountByDataId(curNeedCostItemId); curOwnValue.text = _AdvanceRemainCount >= curAdvanceNeedCostCount ? _AdvanceRemainCount.ToString() : StrDictionary.GetClientDictionaryString("#{1997}", _AdvanceRemainCount.ToString()); _GainBtn.gameObject.SetActive(_AdvanceRemainCount < curAdvanceNeedCostCount); } public void OnGetBtnClick() { ItemTooltipsLogic.ShowItemTooltip(curNeedCostItemId, ItemTooltipsLogic.ShowType.GetPath, _GainBtn.transform.position); } public void RefreshNeedCostPanel(int baseId) { Tab_AdvanceBase advanceBase = TableManager.GetAdvanceBaseByID(baseId, 0); if(advanceBase == null) { return; } curAdvanceNeedCostCount = advanceBase.AdvanceCostItemNum; needCostValue.text = advanceBase.AdvanceCostItemNum.ToString(); } private bool _IsOutsideSetting = false; public void SetOutsideSetting() { _IsOutsideSetting = true; } public void OnToggleClick(bool isOn) { if(isOn) { if(!_IsOutsideSetting) { MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{42693}"), "", delegate () { UIManager.CloseUI(UIInfo.MessageBox); OnAdvanceBtnClick(); }, delegate () { autoAdvanceToggle.isOn = false; UIManager.CloseUI(UIInfo.MessageBox); }); } }else { if(isOnAdvance) { isOnAdvance = false; SetAdvanceBtnState(); } } } //获取当前升阶所需物品价格 public void GetCostItemGoodInfo() { foreach (var item in TableManager.GetYuanBaoShop().Values) { if (item.ItemID == curNeedCostItemId && item.MoneyType == (int)MONEYTYPE.MONEYTYPE_YUANBAO) { curNeedCostGoodItemId = item.Id; curNeedCostItemPrice = item.PriceWeek; break; } } } //获取当前进阶的等级,刷新界面的物品数量 public void RefreshPanelInfo(int baseId, int curWish, int remainCount) { _AdvanceRemainCount = remainCount; Tab_AdvanceBase advanceBase = TableManager.GetAdvanceBaseByID(baseId + 1, 0); //需要读取的是下一级的消耗 所以这边加1 if(advanceBase == null) { return; } //bagPack = GameManager.gameManager.PlayerDataPool.GetItemContainer(GameItemContainer.Type.TYPE_BACKPACK); //if (bagPack == null) // return; Tab_CommonItem commonItem = TableManager.GetCommonItemByID(advanceBase.AdvanceCostItemId, 0); if (commonItem == null) { return; } curNeedCostItemId = advanceBase.AdvanceCostItemId; //curOwnItemCount = bagPack.GetItemCountByDataId(advanceBase.AdvanceCostItemId); curAdvanceNeedCostCount = advanceBase.AdvanceCostItemNum; curOwnValue.text = _AdvanceRemainCount >= curAdvanceNeedCostCount ? _AdvanceRemainCount.ToString() : StrDictionary.GetClientDictionaryString("#{1997}", _AdvanceRemainCount.ToString()); Tab_AdvanceBase curAdvanceBase = TableManager.GetAdvanceBaseByID(baseId, 0); //需要读取的是下一级的消耗 所以这边加1 if (advanceBase == null) { return; } if (curAdvanceBase.Level > curAdvanceLevel) { curAdvanceLevel = curAdvanceBase.Level; } if (curAdvanceBase.Grade > curAdvanceGrade) //等阶提升的时候关闭当前的自动进阶 { isOnAdvance = false; curAdvanceGrade = curAdvanceBase.Grade; return; } else { if (isOnAdvance) { Invoke("ReqAdvancePacket", 0.2f); isOnAdvance = true; } } } public bool isOnAdvance = false; //正在进阶 private bool ClickStop = false; //当按钮是停止的时候,点击不会再发协议。 public void SetAdvanceBtnState() { if(isOnAdvance) { ClickStop = true; btnDesc.text = StrDictionary.GetClientDictionaryString("#{43011}"); AskForAdvance(); } else { ClickStop = false; autoAdvanceToggle.isOn = false; btnDesc.text = StrDictionary.GetClientDictionaryString("#{43010}"); } } public void ReqAdvancePacket() { if (isOnAdvance) { AskForAdvance(); } } public void OnAdvanceBtnClick() { if (autoAdvanceToggle.isOn) { isOnAdvance = !isOnAdvance; SetAdvanceBtnState(); } else { if (_AdvanceRemainCount < curAdvanceNeedCostCount) { GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{42674}")); return; } AskForAdvance(); } //ShowCanAdvanceOrNotRedIcon(false); //点击之后隐藏可以升级的RedIcon } // 控制红点状态 public void SetRedTips(bool isShow) { // 优化:不同时才更新 if(canAdvanceRedIcon.activeSelf != isShow) { canAdvanceRedIcon.SetActive(isShow); } } /// /// 检测并更新进阶界面红点信息(不包括菜单) /// /// /// true:有红点信息 /// fasle: 无红点信息,或存在错误 /// public bool UpdateRedPoint() { if (advancePanelCtr == null) { LogModule.ErrorLog("Can't get AdvancePanelCtr.Instance, can't update red point tips !!!"); return false; } if(AdvancePanelCtr.Instance == null) { advancePanelCtr.PreInit(); } var advanceBase = TableManager.GetAdvanceBaseByID(AdvancePanelCtr.Instance.CurAdvanceBaseId, 0); if (advanceBase == null) return false; if (advanceBase.DayDecWishValuePercent > 0) { SetRedTips(false); return false; } // 未到达最大等级 且 (物品足够 或 金钱足够代替物品) if (advancePanelCtr.CurAdvanceLevel < advancePanelCtr.MaxAdvanceBase.Level) { int lackItemCount = curAdvanceNeedCostCount - _AdvanceRemainCount; //bool moneyEnought = GameManager.gameManager.PlayerDataPool.Money.GetMoneyByType(MONEYTYPE.MONEYTYPE_YUANBAO) >= lackItemCount * curNeedCostItemPrice; if (lackItemCount <= 0) { SetRedTips(true); return true; } } if (AdvanceMountPanelCtr.Instance != null) { AdvanceMountPanelCtr.Instance.UpdateAdvanceRedPoint(); } SetRedTips(false); return false; } public void OnItemUsed(Hashtable addParam = null, Hashtable sendParam = null) { UpdateRedPoint(); } private bool _IsAutoAdvance = false; //道具足够的时候是false,道具不足需要消耗金钱的时候确定之后置为true private bool _IsConfirmConsumeMoney = false; // shigfo public void AskForAdvance() { CG_REQ_ADVANCE req = (CG_REQ_ADVANCE)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_ADVANCE); if (_AdvanceRemainCount >= curAdvanceNeedCostCount) { req.SetOptionType((int)AdvanceBase.ReqType.ADVANCE_OPTION); req.SetType(type); req.SetParam1(_IsAutoAdvance ? 1 : 0); req.SetParam2(0); req.SendPacket(); } else { if(!_IsConfirmConsumeMoney) { ClickStop = false; autoAdvanceToggle.isOn = false; MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{42723}"), "", delegate () { if (!_IsAutoAdvance) _IsAutoAdvance = true; _IsConfirmConsumeMoney = true; _IsOutsideSetting = true; ClickStop = true; autoAdvanceToggle.isOn = true; isOnAdvance = true; SetAdvanceBtnState(); UIManager.CloseUI(UIInfo.MessageBox); }, delegate () { if (_IsAutoAdvance) _IsAutoAdvance = false; ClickStop = false; autoAdvanceToggle.isOn = false; isOnAdvance = false; SetAdvanceBtnState(); UIManager.CloseUI(UIInfo.MessageBox); }); }else { //判断当前金钱是否足够 if (isOnAdvance) { int lackItemCount = curAdvanceNeedCostCount - _AdvanceRemainCount; if (JudgeMoneyLogic.IsMoneyEnoughWhenSwitch(lackItemCount * curNeedCostItemPrice)) { req.SetOptionType((int)AdvanceBase.ReqType.ADVANCE_OPTION); req.SetType(type); req.SetParam1(autoAdvanceToggle.isOn ? 1 : 0); req.SetParam2(0); req.SendPacket(); } else { GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{42600}")); isOnAdvance = false; SetAdvanceBtnState(); } } else { GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{42674}")); } } } } public void OnItemIconClick() { ItemTooltipsLogic.ShowItemTooltip(curNeedCostItemId, ItemTooltipsLogic.ShowType.Info, transform.position); } }