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);
}
}