Files
JJBB/Assets/Project/Script/GUI/BackPack/CangKuLogic.cs
2024-08-23 15:49:34 +08:00

578 lines
18 KiB
C#
Raw Permalink 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 UnityEngine.UI;
using System.Collections;
using Module.Log;
using GCGame;
using Games.Item;
using System.Collections.Generic;
using GCGame.Table;
public class CangKuLogic : MonoBehaviour
{
const int MAX_ITEM_PAGE = 25; //每页最大格子数量
const int MAX_PAGE = 4; //最大页数
private static CangKuLogic m_Instance = null;
public static CangKuLogic Instance()
{
return m_Instance;
}
void Awake()
{
m_Instance = this;
}
void OnEnable()
{
m_Instance = this;
InitCangKu();
InitBackPack();
_PagePanel.SetActive(false);
}
void OnDisable()
{
m_Instance = null;
if(MessageBoxLogic.Instance())
{
UIManager.CloseUI(UIInfo.MessageBox);
}
}
void InitCangKu()
{
ReqCangKuPackData();
UpdateCangKu();
}
void ReqCangKuPackData()
{
CG_ASK_UPDATE_STORAGEPACK pak = (CG_ASK_UPDATE_STORAGEPACK)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ASK_UPDATE_STORAGEPACK);
pak.SetType(1);
pak.SetOpentype((IsFastOPen ? 1 : 0));
pak.SendPacket();
}
public void UpdateCangKu()
{
if (!gameObject.activeInHierarchy)
return;
UpdateCangKu_Page(_SelectedPage);
}
#region pages
public const string LOCKED_STR = "Locked";
public const int _PageLayoutCnt = 3;
public UISubScollMenu _PageMenu;
List<string> _PageList = new List<string>();
public GameObject _PagePanel;
//public Text _ShowingPage;
public Sprite[] pageSprites;
public Image showingPageImage;
public GridLayoutGroup _GridLayout;
public bool IsFastOPen = false; // 是否是快捷打开仓库此值在Inspector中被设为true不知为何在外赋值
public GameObject PointObjClone;
public GameObject PagePoints;
private int _SelectedPage = 0;
public int SelectedPage
{
get
{
return _SelectedPage;
}
}
List<GameObject> PointObjs = new List<GameObject>();
void CheckPointShow()
{
if (GameManager.gameManager.PlayerDataPool.StoragePack.CangkuPage <= 1)
{
PagePoints.SetActive(false);
return;
}
PagePoints.SetActive(true);
if (PointObjs.Count != GameManager.gameManager.PlayerDataPool.StoragePack.CangkuPage)
{
for (int i = 0; i < PointObjs.Count; i++)
{
PointObjs[i].SetActive(false);
PointObjs[i].transform.SetParent(null);
GameObject.Destroy(PointObjs[i]);
}
PointObjs.Clear();
for (int i=0;i< GameManager.gameManager.PlayerDataPool.StoragePack.CangkuPage;i++)
{
GameObject newMenuObj = Utils.CloneObj(PointObjClone);
if (newMenuObj == null)
continue;
PointObjs.Add(newMenuObj);
Transform point1 = newMenuObj.transform.Find("point1");
if (point1 != null)
{
point1.gameObject.SetActive(true);
}
Transform point2 = newMenuObj.transform.Find("point2");
if (point2 != null)
{
point2.gameObject.SetActive(false);
}
}
}
ShowPoint();
}
void ShowPoint()
{
if (_SelectedPage < PointObjs.Count)
{
for (int i = 0; i < PointObjs.Count; i++)
{
GameObject newMenuObj = PointObjs[i];
Transform point1 = newMenuObj.transform.Find("point1");
if (point1 != null)
{
point1.gameObject.SetActive(_SelectedPage != i);
}
Transform point2 = newMenuObj.transform.Find("point2");
if (point2 != null)
{
point2.gameObject.SetActive(_SelectedPage == i);
}
}
}
}
public void OnCangkuPagePanelOpen()
{
_PagePanel.SetActive(true);
_PageList.Clear();
_PageMenu.Clear();
for (int i = 0; i < GameManager.gameManager.PlayerDataPool.StoragePack.CangkuPage; ++i)
{
string title = StrDictionary.GetClientDictionaryString("#{3903}") + (i + 1).ToString();
_PageList.Add(title);
}
int pageCount = TableManager.GetCangKuUnlock().Count;
if (GameManager.gameManager.PlayerDataPool.StoragePack.CangkuPage < pageCount)
{
_PageList.Add(LOCKED_STR);
}
for (int i = 0; i < _PageList.Count; i++)
{
_PageMenu.PushMenu(_PageList[i]);
if (i==SelectedPage)
{
_PageMenu.HightLightMenu(_PageList[i]);
}
}
InitItemLockIcon();
}
public void InitItemLockIcon()
{
foreach (var item in _PageMenu.SubBtns)
{
if(item.Key.MenuObj.Equals(LOCKED_STR))
{
item.Key.OpenSubGO();
item.Key._MenuText.gameObject.SetActive(false);
}else
{
item.Key.CloseSubGO();
item.Key._MenuText.gameObject.SetActive(true);
}
}
}
public void OnCangkuPageClick(object pageObj)
{
string pageStr = pageObj as string;
if (LOCKED_STR == pageStr)
{
int page = _PageList.Count;
Tab_CangKuUnlock line = TableManager.GetCangKuUnlockByID(page, 0);
if (line != null)
{
string str = StrDictionary.GetClientDictionaryString("#{5003}", PlayerData.MONEY.GetMoneyStr((MONEYTYPE)line.ConsumeSubType), line.ConsumeNum);
MessageBoxLogic.OpenOKCancelBox(str, "", OnClickUnLock_OK, OnClickUnLock_Cancel);
}
else
{
GUIData.AddNotifyData("#{2699}", false);
}
}
else
{
//_ShowingPage.text = pageStr;
_SelectedPage = _PageList.IndexOf(pageStr);
showingPageImage.overrideSprite = pageSprites[_SelectedPage];
UpdateCangKu_Page(_SelectedPage);
}
_PagePanel.SetActive(false);
}
public void OnChangkuPagePanelClose()
{
_PagePanel.SetActive(false);
}
void OnClickUnLock_OK()
{
CG_STORAGEPACK_UNLOCK unlock = (CG_STORAGEPACK_UNLOCK)PacketDistributed.CreatePacket(MessageID.PACKET_CG_STORAGEPACK_UNLOCK);
unlock.SetUnlocknum(1);
unlock.SendPacket();
}
void OnClickUnLock_Cancel()
{
}
#endregion
#region items
public UIContainerSelect _PackItemContainer;
public UIContainerSelect _CangkuItemContainer;
private List<CommonItemBackPackItem.BackPackItem> _ShowItems = new List<CommonItemBackPackItem.BackPackItem>();
// 显示后一页
public void PointClick_ShowNext()
{
int showPage = _SelectedPage;
showPage++;
if (showPage >= GameManager.gameManager.PlayerDataPool.StoragePack.CangkuPage)
showPage = 0;
UpdateCangKu_Page(showPage);
}
// 显示前一页
public void PointClick_ShowLast()
{
int showPage = _SelectedPage;
showPage--;
if (showPage < 0)
showPage = GameManager.gameManager.PlayerDataPool.StoragePack.CangkuPage - 1;
UpdateCangKu_Page(showPage);
}
void UpdateCangKu_Page(int page)
{
if (page < 0 || page >= CangkuContainer.MAX_CANGKU_PAGE)
{
return;
}
UpdateCangKu_Item(page);
_SelectedPage = page;
//_ShowingPage.text = StrDictionary.GetClientDictionaryString("#{3903}") + (_SelectedPage + 1).ToString();
if (_SelectedPage >= 0 && _SelectedPage < pageSprites.Length)
{
showingPageImage.overrideSprite = pageSprites[_SelectedPage];
}
CheckPointShow();
}
//获取当前特权等级下最大的解锁个数
private Dictionary<int, int> _pageUnlockCountDic;
void GetCurPrivilegeVipUnLockCountDic()
{
//应为开启之后就不再撤销,这边以服务器记录的最大值为主
var totalUnLockCount = GameManager.gameManager.PlayerDataPool.SlotTotalUnLockCount;
//foreach (var info in TableManager.GetPrivilegeFunction())
//{
// if(info.Value[0].PrivilegeId == 1) //解锁仓库
// {
// //拥有当前特权
// if(GameManager.gameManager.PlayerDataPool.PrivilegeTypeStateDic.ContainsKey(info.Value[0].PrivilegeVipType)
// && GameManager.gameManager.PlayerDataPool.PrivilegeTypeStateDic[info.Value[0].PrivilegeVipType])
// {
// if (int.Parse(info.Value[0].GetVipbyIndex(GameManager.gameManager.PlayerDataPool.VipCost)) >= totalUnLockCount)
// totalUnLockCount = int.Parse(info.Value[0].GetVipbyIndex(GameManager.gameManager.PlayerDataPool.VipCost));
// }
// }
//}
_pageUnlockCountDic = new Dictionary<int, int>();
for(int indedx = 1; indedx <= TableManager.GetCangKuUnlock().Count; indedx++)
{
var cangKuTab = TableManager.GetCangKuUnlockByID(indedx, 0);
if (cangKuTab == null)
continue;
if(totalUnLockCount > cangKuTab.CellNum)
{
_pageUnlockCountDic.Add(indedx, cangKuTab.CellNum);
totalUnLockCount -= cangKuTab.CellNum;
}
else
{
_pageUnlockCountDic.Add(indedx, totalUnLockCount);
totalUnLockCount = 0;
}
}
}
void UpdateCangKu_Item(int page)
{
GameItemContainer itemContainer = GameManager.gameManager.PlayerDataPool.StoragePack;
_ShowItems.Clear();
int startPos = page * CangkuContainer.MAX_ITEM_COUNT_CANGKU_PAGE;
int vipLv = GameManager.gameManager.PlayerDataPool.VipCost;
List<GameItem> itempack = ItemTool.GetPageItem(itemContainer, startPos, startPos + CangkuContainer.MAX_ITEM_COUNT_CANGKU_PAGE);
// 获得当前页数的解锁条件列表
Tab_CangKuUnlock tabCangku = TableManager.GetCangKuUnlockByID(page + 1, 0);
// totalUnlock - 该页总的开启数tabCangKu.UnlockNum - 该页默认开启数目
int totalUnlock = tabCangku.UnlockNum;
//这边必须要每次都判断了应为VIP可能有变化
GetCurPrivilegeVipUnLockCountDic();
if (_pageUnlockCountDic.ContainsKey(page +1))
totalUnlock = _pageUnlockCountDic[page + 1];
for (int nIndex = 0; nIndex < itempack.Count; ++nIndex)
{
if (nIndex < totalUnlock)
{
_ShowItems.Add(new CommonItemBackPackItem.BackPackItem() { GameItem = itempack[nIndex], IsPosLock = false });
}
else
{
_ShowItems.Add(new CommonItemBackPackItem.BackPackItem() { GameItem = null, IsPosLock = true });
}
}
_CangkuItemContainer.InitSelectContent(_ShowItems, null, CandkuItemClick);
}
public void OnBtnCangKuSort()
{
CG_REQ_TIDY_PACK packet = (CG_REQ_TIDY_PACK)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_TIDY_PACK);
packet.PackType = 3;
packet.IsSort = 1;
packet.SendPacket();
//_BtnSortTime.SetBtnDisableTime(_BtnSortDisableTime);
//LogModule.DebugLog("Send sort Storagepack");
}
private float LastClickTime1 = 0;
private CommonItemBackPackItem.BackPackItem LastPackItem1 = null;
public void CandkuItemClick(object obj)
{
CommonItemBackPackItem.BackPackItem backPackItem = obj as CommonItemBackPackItem.BackPackItem;
if (!backPackItem.IsPosLock)
{
if (backPackItem.GameItem != null && backPackItem.GameItem.IsValid())
{
if (Time.time - LastClickTime1 < 0.2f && LastPackItem1 == backPackItem)
{
LastPackItem1 = null;
LastClickTime1 = 0;
Singleton<ObjManager>.Instance.MainPlayer.CangKuTakeOut(backPackItem.GameItem);
StopCoroutine(ItemClick(backPackItem, true));
}
else
{
LastPackItem1 = backPackItem;
LastClickTime1 = Time.time;
StartCoroutine(ItemClick(backPackItem, true));
}
}
}
else
{
int idx = _ShowItems.IndexOf(backPackItem);
if (idx < 0)
return;
// _SelectedPage 从 0 开始,表格是从 1 开始。
Tab_CangKuUnlock curPagaVipTab = TableManager.GetCangKuUnlockByID(_SelectedPage + 1, 0);
int selectLine =(idx - 10) / 5;
int needVip = curPagaVipTab.GetVIPRestrictbyIndex(selectLine);
GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{5004}", needVip));
}
}
// backPackItem 被点击的物品信息
// isInBackPack 被点击的物品是否现在仓库
IEnumerator ItemClick(CommonItemBackPackItem.BackPackItem backPackItem, bool isInCangKu)
{
yield return new WaitForSeconds(0.25f);
ShowTooltips(backPackItem.GameItem, isInCangKu);
}
private float LastClickTime = 0;
private CommonItemBackPackItem.BackPackItem LastPackItem = null;
public void CandkuBackPackItemClick(object obj)
{
CommonItemBackPackItem.BackPackItem backPackItem = obj as CommonItemBackPackItem.BackPackItem;
if (!backPackItem.IsPosLock)
{
if (backPackItem.GameItem != null && backPackItem.GameItem.IsValid())
{
if (Time.time - LastClickTime < 0.2f && LastPackItem == backPackItem)
{
LastPackItem = null;
LastClickTime = 0;
Singleton<ObjManager>.Instance.MainPlayer.CangKuPutIn(backPackItem.GameItem);
StopCoroutine(ItemClick(backPackItem, false));
}
else
{
LastPackItem = backPackItem;
LastClickTime = Time.time;
StartCoroutine(ItemClick(backPackItem, false));
}
}
}
}
private void ShowTooltips(GameItem gameItem, bool isCangku)
{
if (gameItem != null && gameItem.IsValid())
{
if (gameItem.IsEquipMent())
{
if (isCangku)
{
EquipTooltipsLogic.ShowEquipTooltip(gameItem, ItemTooltipsLogic.ShowType.CangKu, transform.position);
}
else
{
EquipTooltipsLogic.ShowEquipTooltip(gameItem, ItemTooltipsLogic.ShowType.CangKuBackPack, transform.position);
}
}
else if (gameItem.IsMagicMent())
{
if (isCangku)
{
MagicTooltipLogic.ShowEquipTooltip(gameItem, ItemTooltipsLogic.ShowType.CangKu);
}
else
{
MagicTooltipLogic.ShowEquipTooltip(gameItem, ItemTooltipsLogic.ShowType.CangKuBackPack);
}
}
else
{
if (isCangku)
{
ItemTooltipsLogic.ShowItemTooltip(gameItem, ItemTooltipsLogic.ShowType.CangKu, transform.position);
}
else
{
ItemTooltipsLogic.ShowItemTooltip(gameItem, ItemTooltipsLogic.ShowType.CangKuBackPack, transform.position);
}
}
}
}
/// <summary>
/// 初始化背包部分
/// </summary>
void InitBackPack()
{
//UIManager.LoadItem(UIInfo.CangKuBackItem, OnLoadBackPackItem);
UpdateBackPack();
}
/// <summary>
/// 刷新背包部分
/// </summary>
public void UpdateBackPack()
{
UpdateBackPack_Item();
UpdateBackPack_Money();
UpdateBackPack_Size();
}
public void OnBtnBackpackSort()
{
CG_REQ_TIDY_PACK packet = (CG_REQ_TIDY_PACK)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_TIDY_PACK);
packet.PackType = 0;
packet.IsSort = 1;
packet.SendPacket();
//_BtnSortTime.SetBtnDisableTime(_BtnSortDisableTime);
LogModule.DebugLog("Send sort packet");
}
void UpdateBackPack_Item()
{
GameItemContainer BackPack = GameManager.gameManager.PlayerDataPool.BackPack;
//List<GameItem> itemlist = ItemTool.ItemFilter(BackPack, 0);
List<GameItem> itemlist = BackPack.Items;
List<CommonItemBackPackItem.BackPackItem> showItems = new List<CommonItemBackPackItem.BackPackItem>();
for (int nIndex = 0; nIndex < GameItemContainer.MAXSIZE_BACKPACK; ++nIndex)
{
if (nIndex < BackPack.ContainerSize)
{
if (nIndex < itemlist.Count)
{
showItems.Add(new CommonItemBackPackItem.BackPackItem() { GameItem = itemlist[nIndex], IsPosLock = false });
}
else
{
showItems.Add(new CommonItemBackPackItem.BackPackItem() { GameItem = null, IsPosLock = false });
}
}
else
{
showItems.Add(new CommonItemBackPackItem.BackPackItem() { GameItem = null, IsPosLock = true });
}
}
_PackItemContainer.InitSelectContent(showItems, null, CandkuBackPackItemClick);
}
public void UpdateBackPack_Money()
{
//m_Moneyinfo_CoinLable.text = Utils.ConvertLargeNumToString(GameManager.gameManager.PlayerDataPool.Money.GetMoney_Coin());
//m_Moneyinfo_YuanBaoLable.text = GameManager.gameManager.PlayerDataPool.Money.GetMoney_YuanBao().ToString();
//m_Moneyinfo_YuanBaoBindLable.text = GameManager.gameManager.PlayerDataPool.Money.GetMoney_YuanBaoBind().ToString();
}
void UpdateBackPack_Size()
{
// 更新背包大小
//GameItemContainer BackPack = GameManager.gameManager.PlayerDataPool.BackPack;
//m_BackPakcSize.text = string.Format("{0}/{1}", BackPack.GetItemCount(), BackPack.ContainerSize);
}
public void OnClickClose()
{
UIManager.CloseUI(UIInfo.CangKu);
}
#endregion
}