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 _PageList = new List(); 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 PointObjs = new List(); 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 _ShowItems = new List(); // 显示后一页 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 _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(); 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 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.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.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); } } } } /// /// 初始化背包部分 /// void InitBackPack() { //UIManager.LoadItem(UIInfo.CangKuBackItem, OnLoadBackPackItem); UpdateBackPack(); } /// /// 刷新背包部分 /// 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 itemlist = ItemTool.ItemFilter(BackPack, 0); List itemlist = BackPack.Items; List showItems = new List(); 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 }