JJBB/Assets/Project/Script/GUI/Advance/AdvanceItemPanelCtr.cs
2024-08-23 15:49:34 +08:00

415 lines
14 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}
/// <summary>
/// 检测并更新进阶界面红点信息(不包括菜单)
/// </summary>
/// <returns>
/// true有红点信息
/// fasle: 无红点信息,或存在错误
/// </returns>
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);
}
}