Files
JJBB/Assets/Project/Script/GUI/BackPack/CangKuLogic.cs

578 lines
18 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
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
}