456 lines
12 KiB
Plaintext
456 lines
12 KiB
Plaintext
RuneMainPage = class("RuneMainPage", SubView)
|
|
|
|
autoImport("ItemNormalList");
|
|
autoImport("BagCombineDragItemCell");
|
|
autoImport("QuestPackagePart");
|
|
autoImport("FoodPackagePart");
|
|
autoImport("PetPackagePart");
|
|
|
|
local petAdventureItemId = 5504
|
|
function RuneMainPage:Init()
|
|
self:AddViewEvts();
|
|
self:InitUI();
|
|
end
|
|
|
|
function RuneMainPage:OnEnter()
|
|
RuneMainPage.super.OnEnter(self);
|
|
|
|
self:UpdateCoins();
|
|
|
|
self.itemlist:ChooseTab(1);
|
|
-- self.itemlist:UpdateList(false, 1);
|
|
end
|
|
|
|
|
|
local tabDatas = {};
|
|
local addGreyDatas = {};
|
|
function RuneMainPage:InitUI()
|
|
self.normalStick = self:FindComponent("NormalStick", UISprite);
|
|
-- 揹包裝備列表 ItemNormalList
|
|
local listObj = self:FindGO("ItemNormalList");
|
|
self.itemlist = ItemNormalList.new(listObj, BagCombineDragItemCell, nil, PullStopScrollView);
|
|
self.itemlist:AddEventListener(ItemEvent.ClickItem, self.ClickItem, self);
|
|
self.itemlist:AddEventListener(ItemEvent.DoubleClickItem, self.DoubleClickItem, self);
|
|
self.itemlist.GetTabDatas = RuneMainPage.GetTabDatas;
|
|
self.itemlist.scrollView.onDragStarted = function ()
|
|
self:ShowItemTip()
|
|
end
|
|
|
|
self.itemCells = self.itemlist:GetItemCells();
|
|
-- 揹包界面的角色貨幣資訊
|
|
--local coins = self:FindChild("TopCoins");
|
|
--self.lottery = self:FindChild("Lottery", coins);
|
|
--self.lotterylabel = self:FindComponent("Label", UILabel, self.lottery);
|
|
--local icon = self:FindComponent("symbol", UISprite, self.lottery);
|
|
--IconManager:SetItemIcon(Table_Item[151].Icon, icon);
|
|
--self.userRob = self:FindChild("Silver", coins);
|
|
--self.robLabel = self:FindComponent("Label", UILabel, self.userRob);
|
|
|
|
local storeButton = self:FindGO("StoreButton");
|
|
self:AddClickEvent(storeButton, function (go)
|
|
self:TryeDoQuick();
|
|
end);
|
|
local saleButton = self:FindGO("SaleButton");
|
|
self:AddClickEvent(saleButton, function (go)
|
|
self:DoSaleButton();
|
|
end);
|
|
local rearrayButton = self:FindGO("RearrayButton");
|
|
self:AddClickEvent(rearrayButton, function (go)
|
|
self:DoRearrayButton();
|
|
end);
|
|
end
|
|
|
|
function RuneMainPage:TryeDoQuick()
|
|
self.st = ReusableTable.CreateArray();
|
|
BagProxy.Instance:CollectQuickStorageItems(self.st);
|
|
|
|
if(#self.st == 0)then
|
|
TableUtility.ArrayClear(self.st)
|
|
ReusableTable.DestroyArray(self.st);
|
|
MsgManager.ShowMsgByIDTable(25426);
|
|
return;
|
|
end
|
|
|
|
local dont = LocalSaveProxy.Instance:GetDontShowAgain(25424)
|
|
if(dont == nil)then
|
|
MsgManager.DontAgainConfirmMsgByID(25424, function ()
|
|
self:DoQuickStore();
|
|
end, nil, nil)
|
|
else
|
|
self:DoQuickStore();
|
|
end
|
|
end
|
|
|
|
function RuneMainPage:DoQuickStore()
|
|
helplog("Do QuickStore");
|
|
self.st = ReusableTable.CreateArray();
|
|
BagProxy.Instance:CollectQuickStorageItems(self.st);
|
|
|
|
local items = ReusableTable.CreateArray();
|
|
for i=1,#self.st do
|
|
local item = self.st[i];
|
|
|
|
local sitem = SceneItem_pb.SItem()
|
|
sitem.guid, sitem.count = item.id, item.num or 0;
|
|
table.insert(items, sitem);
|
|
end
|
|
|
|
ServiceItemProxy.Instance:CallQuickStoreItemCmd(items);
|
|
|
|
ReusableTable.DestroyArray(items);
|
|
|
|
TableUtility.ArrayClear(self.st)
|
|
ReusableTable.DestroyArray(self.st);
|
|
end
|
|
|
|
function RuneMainPage:DoSaleButton()
|
|
helplog("DoSaleButton In");
|
|
self:sendNotification(UIEvent.JumpPanel, {view = PanelConfig.CollectSaleConfirmPopUp});
|
|
end
|
|
|
|
function RuneMainPage:DoRearrayButton()
|
|
helplog("DoRearrayButton In");
|
|
ServiceItemProxy.Instance:CallPackageSort(SceneItem_pb.EPACKTYPE_MAIN);
|
|
end
|
|
|
|
function RuneMainPage:GetQuestPackageBord()
|
|
if(self.init_questPacakgeBord)then
|
|
return self.questPackageBord
|
|
end
|
|
self.init_questPacakgeBord = true;
|
|
|
|
local qpParent = self:FindGO("QuestPackageParent");
|
|
self.questPackageBord = QuestPackagePart.new();
|
|
self.questPackageBord:CreateSelf(qpParent);
|
|
self.questPackageBord:Hide();
|
|
|
|
return self.questPackageBord;
|
|
end
|
|
|
|
function RuneMainPage:GetFoodPackageBord()
|
|
if(self.init_foodPacakgeBord)then
|
|
return self.foodPackageBord
|
|
end
|
|
self.init_foodPacakgeBord = true;
|
|
|
|
local qpParent = self:FindGO("QuestPackageParent");
|
|
self.foodPackageBord = FoodPackagePart.new();
|
|
self.foodPackageBord:CreateSelf(qpParent);
|
|
self.foodPackageBord:Hide();
|
|
|
|
return self.foodPackageBord;
|
|
end
|
|
|
|
function RuneMainPage:GetPetPackageBord()
|
|
if(self.init_petPackageBord)then
|
|
return self.petPackageBord
|
|
end
|
|
self.init_petPackageBord = true;
|
|
|
|
local qpParent = self:FindGO("QuestPackageParent");
|
|
self.petPackageBord = PetPackagePart.new();
|
|
self.petPackageBord:CreateSelf(qpParent);
|
|
-- self.petPackageBord:Hide();
|
|
|
|
return self.petPackageBord;
|
|
end
|
|
|
|
function RuneMainPage.GetTabDatas(tabConfig)
|
|
TableUtility.ArrayClear(tabDatas);
|
|
|
|
local bagData = BagProxy.Instance.bagData;
|
|
local datas = bagData:GetItems(tabConfig);
|
|
for i=1,#datas do
|
|
table.insert(tabDatas, datas[i]);
|
|
end
|
|
|
|
-- 新增上限空格
|
|
local uplimit = bagData:GetUplimit();
|
|
if(uplimit>0)then
|
|
for i=#tabDatas+1, uplimit do
|
|
table.insert(tabDatas, BagItemEmptyType.Empty);
|
|
end
|
|
elseif(uplimit == 0)then
|
|
local leftEmpty = (5-#tabDatas%5)%5;
|
|
for i=1, leftEmpty do
|
|
table.insert(tabDatas, BagItemEmptyType.Empty);
|
|
end
|
|
end
|
|
|
|
local unlockData = BagProxy.Instance:GetBagUnlockSpaceData();
|
|
if(unlockData)then
|
|
-- for i=1,unlockData.pack do
|
|
table.insert(tabDatas, {id = BagItemEmptyType.Unlock, unlockData=unlockData});
|
|
-- end
|
|
end
|
|
|
|
-- 湊足5的倍數
|
|
local leftEmpty = (5-#tabDatas%5)%5;
|
|
for i=1, 10+leftEmpty do
|
|
table.insert(tabDatas, BagItemEmptyType.Grey);
|
|
end
|
|
-- 格子拼滿
|
|
for i=#tabDatas+1, 35 do
|
|
table.insert(tabDatas, BagItemEmptyType.Grey);
|
|
end
|
|
return tabDatas;
|
|
end
|
|
|
|
function RuneMainPage:RemoveReArrageSafeLT()
|
|
if(self.reArrageSafeLT)then
|
|
self.reArrageSafeLT:cancel();
|
|
self.reArrageSafeLT = nil;
|
|
end
|
|
end
|
|
|
|
function RuneMainPage:PullDownPackage()
|
|
self:RemoveReArrageSafeLT();
|
|
self.reArrageSafeLT = LeanTween.delayedCall(3, function ()
|
|
self:HandleItemReArrage();
|
|
end);
|
|
|
|
ServiceItemProxy.Instance:CallPackageSort(SceneItem_pb.EPACKTYPE_MAIN);
|
|
end
|
|
|
|
function RuneMainPage:ClickItem(cellCtl)
|
|
local data = cellCtl and cellCtl.data;
|
|
if(data == BagItemEmptyType.Empty or
|
|
data == BagItemEmptyType.Grey)then
|
|
data = nil;
|
|
end
|
|
|
|
if(data ~= nil and data.id == BagItemEmptyType.Unlock)then
|
|
MsgManager.ShowMsgByIDTable(3107, {data.unlockData.id, data.unlockData.pack})
|
|
return;
|
|
end
|
|
|
|
local go = cellCtl and cellCtl.gameObject;
|
|
local newChooseId = data and data.id or 0;
|
|
if(self.chooseId~=newChooseId)then
|
|
self.chooseId = newChooseId;
|
|
|
|
if(type(data) == "table")then
|
|
local sid = data.staticData.id;
|
|
if(sid == 5045)then
|
|
self:CloseOtherPackage("quest")
|
|
self:ShowQuestPackage();
|
|
elseif(sid == 5047)then
|
|
self:CloseOtherPackage("food")
|
|
self:ShowFoodPackage();
|
|
elseif(sid == 5640)then
|
|
self:CloseOtherPackage("pet")
|
|
self:ShowPetPackage();
|
|
else
|
|
self:ShowPackageItemTip(data, {go});
|
|
end
|
|
else
|
|
self:ShowPackageItemTip(data, {go});
|
|
end
|
|
else
|
|
self.chooseId = 0;
|
|
self:ShowPackageItemTip();
|
|
end
|
|
for _,cell in pairs(self.itemCells) do
|
|
cell:SetChooseId(self.chooseId);
|
|
end
|
|
end
|
|
|
|
function RuneMainPage:DoubleClickItem(cellCtl)
|
|
local data = cellCtl.data;
|
|
if(data == BagItemEmptyType.Empty or
|
|
data == BagItemEmptyType.Grey)then
|
|
data = nil;
|
|
end
|
|
|
|
if(data ~= nil and data.id == BagItemEmptyType.Unlock)then
|
|
return;
|
|
end
|
|
|
|
if(data)then
|
|
local func, funcId;
|
|
if(self.container.viewState == PackageView.LeftViewState.BarrowBag)then
|
|
func, funcId = FunctionItemFunc.Me():GetFuncById(37), 37;
|
|
else
|
|
func, funcId = self.container:GetItemDefaultFunc(data, FunctionItemFunc_Source.MainBag);
|
|
end
|
|
|
|
if(func)then
|
|
-- 如果不處於人物裝備狀態 非時裝裝備裝備時需要切換回人物裝備面板
|
|
if(self.container.viewState ~= PackageView.LeftViewState.Default and funcId==4)then
|
|
self.container:SetLeftViewState(PackageView.LeftViewState.Default);
|
|
end
|
|
func(data);
|
|
end
|
|
|
|
self:ShowPackageItemTip();
|
|
self.chooseId = 0;
|
|
for _,cell in pairs(self.itemCells) do
|
|
cell:SetChooseId(self.chooseId);
|
|
end
|
|
end
|
|
end
|
|
|
|
function RuneMainPage:ShowPackageItemTip(data, ignoreBounds)
|
|
if(data == nil)then
|
|
self:ShowItemTip();
|
|
return;
|
|
end
|
|
|
|
local callback = function ()
|
|
self.chooseId = 0;
|
|
for _,cell in pairs(self.itemCells) do
|
|
cell:SetChooseId(self.chooseId);
|
|
end
|
|
end;
|
|
local sdata = {
|
|
itemdata = data,
|
|
showUpTip = true,
|
|
funcConfig = self.container:GetDataFuncs(data),
|
|
ignoreBounds = ignoreBounds,
|
|
callback = callback,
|
|
};
|
|
|
|
|
|
local comps, offset = {}, {-210,0};
|
|
if(self.container.viewState ~= PackageView.LeftViewState.BarrowBag)then
|
|
if(data.equipInfo or data:IsMount())then
|
|
local site = data.equipInfo:GetEquipSite();
|
|
-- if(data:IsMount())then
|
|
-- site = GameConfig.EquipType[13].site;
|
|
-- else
|
|
-- site = data.equipInfo:GetEquipSite();
|
|
-- end
|
|
for i=1,#site do
|
|
local comp = BagProxy.Instance.roleEquip:GetEquipBySite(site[i]);
|
|
if(comp)then
|
|
table.insert(comps, comp);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
sdata.compdata1 = comps[1];
|
|
sdata.compdata2 = comps[2];
|
|
if(comps[1])then
|
|
offset = {0,0};
|
|
end
|
|
self:ShowItemTip(sdata, self.normalStick, nil, offset);
|
|
end
|
|
|
|
function RuneMainPage:ShowQuestPackage()
|
|
local bord = self:GetQuestPackageBord();
|
|
bord:UpdateInfo();
|
|
bord:Show();
|
|
end
|
|
|
|
function RuneMainPage:ShowFoodPackage()
|
|
local bord = self:GetFoodPackageBord();
|
|
bord:UpdateInfo();
|
|
bord:Show();
|
|
end
|
|
|
|
function RuneMainPage:ShowPetPackage()
|
|
local bord = self:GetPetPackageBord();
|
|
bord:UpdateInfo();
|
|
bord:Show();
|
|
end
|
|
|
|
function RuneMainPage:SetItemDragEnabled(b)
|
|
for i=1,#self.itemCells do
|
|
self.itemCells[i]:CanDrag(b)
|
|
end
|
|
end
|
|
|
|
function RuneMainPage:UpdateList()
|
|
self.itemlist:UpdateList(true);
|
|
end
|
|
|
|
function RuneMainPage:UpdateCoins()
|
|
-- self.goldLabel.text = StringUtil.NumThousandFormat(MyselfProxy.Instance:GetGold());
|
|
--self.robLabel.text = StringUtil.NumThousandFormat(MyselfProxy.Instance:GetROB());
|
|
--self.lotterylabel.text = StringUtil.NumThousandFormat(MyselfProxy.Instance:GetLottery());
|
|
end
|
|
|
|
function RuneMainPage:AddViewEvts()
|
|
self:AddListenEvt(ItemEvent.ItemUpdate,self.HandleItemUpdate);
|
|
self:AddListenEvt(ItemEvent.EquipUpdate,self.HandleItemUpdate);
|
|
self:AddListenEvt(ItemEvent.ItemReArrage,self.HandleItemReArrage);
|
|
self:AddListenEvt(MyselfEvent.MyDataChange,self.UpdateCoins);
|
|
self:AddListenEvt(MyselfEvent.MyProfessionChange, self.HandleItemUpdate);
|
|
self:AddListenEvt(ServiceEvent.ItemPackSlotNtfItemCmd, self.HandleItemUpdate);
|
|
self:AddListenEvt(ServiceEvent.ItemPackageSort, self.HandleItemUpdate);
|
|
end
|
|
|
|
function RuneMainPage:HandleItemUpdate(note)
|
|
self:UpdateList();
|
|
end
|
|
|
|
--裝備更新
|
|
function RuneMainPage:HandleItemReArrage(note)
|
|
local arrageType = note.body
|
|
|
|
if arrageType == SceneItem_pb.EPACKTYPE_PET then
|
|
if self.petPackageBord then
|
|
self.petPackageBord:UpdateInfo()
|
|
end
|
|
elseif arrageType == SceneItem_pb.EPACKTYPE_FOOD then
|
|
if self.foodPackageBord then
|
|
self.foodPackageBord:UpdateInfo()
|
|
end
|
|
elseif arrageType == SceneItem_pb.EPACKTYPE_QUEST then
|
|
if self.questPackageBord then
|
|
self.questPackageBord:UpdateInfo()
|
|
end
|
|
elseif arrageType == SceneItem_pb.EPACKTYPE_RUNE then
|
|
if self.runePackageBord then
|
|
self.runePackageBord:UpdateInfo()
|
|
end
|
|
else
|
|
self:RemoveReArrageSafeLT();
|
|
|
|
AudioUtility.PlayOneShot2D_Path( ResourcePathHelper.AudioSEUI(AudioMap.UI.ReArrage) )
|
|
local callback = function ()
|
|
self:UpdateList();
|
|
end
|
|
self.itemlist:ScrollViewRevert(callback);
|
|
end
|
|
end
|
|
|
|
function RuneMainPage:CloseOtherPackage( package )
|
|
if self.petPackageBord and self.petPackageBord.gameObject.activeSelf and "pet" ~= package then
|
|
self.petPackageBord:Hide()
|
|
end
|
|
|
|
if self.foodPackageBord and self.foodPackageBord.gameObject.activeSelf and "food" ~= package then
|
|
self.foodPackageBord:Hide()
|
|
end
|
|
|
|
if self.questPackageBord and self.questPackageBord.gameObject.activeSelf and "quest" ~= package then
|
|
self.questPackageBord:Hide()
|
|
end
|
|
end
|
|
|
|
function RuneMainPage:OnShow()
|
|
if(self.itemlist == nil)then
|
|
return;
|
|
end
|
|
|
|
if(self.itemlist.panel)then
|
|
self.itemlist.panel:SetDirty();
|
|
end
|
|
self.itemlist:ResetPosition();
|
|
end
|
|
|
|
function RuneMainPage:OnExit()
|
|
self:RemoveReArrageSafeLT();
|
|
-- cancel choose
|
|
self.chooseId = 0;
|
|
self:ShowPackageItemTip();
|
|
for _,cell in pairs(self.itemCells) do
|
|
cell:SetChooseId(self.chooseId);
|
|
end
|
|
|
|
RuneMainPage.super.OnExit(self);
|
|
end
|
|
|
|
-- Test
|