2025-06-04 05:02:57 +08:00

425 lines
11 KiB
Plaintext

AdventureFoodPage = class("AdventureFoodPage", SubView)
autoImport("AdventureCookPage");
autoImport("AdventureTastePage");
autoImport("AdventureFoodItemCell");
autoImport("AdventureFoodPageCombineItemCell");
autoImport("FoodScoreTip");
AdventureFoodPage.Category = {
CookPage = 1,
TastePage = 2,
}
AdventureFoodPage.MaxCategory = { id = 99999999,value = {}}
AdventureFoodPage.CheckHashSelected = "AdventureCookPage_CheckHashSelected"
function AdventureFoodPage:Init()
self:AddViewEvts();
self:initView();
end
function AdventureFoodPage:AddViewEvts()
self:AddListenEvt(ServiceEvent.SceneFoodNewFoodDataNtf,self.Server_NewFoodDataNtf)
end
function AdventureFoodPage:initView()
self.gameObject = self:FindGO("AdventureFoodPage")
self:AddTabChangeEvent(self:FindGO("categoryCook"),self:FindGO("AdventureCookPage"),AdventureFoodPage.Category.CookPage)
self:AddTabChangeEvent(self:FindGO("categoryTaste"),self:FindGO("AdventureTastePage"),AdventureFoodPage.Category.TastePage)
self.AdventureCookPage = self:AddSubView("categoryCook",AdventureCookPage)
self.AdventureTastePage = self:AddSubView("categoryTaste",AdventureTastePage)
local cookDes = self:FindComponent("cookDes",UILabel)
local tasteDes = self:FindComponent("tasteDes",UILabel)
local tasteName = self:FindComponent("tasteName",UILabel)
local cookName = self:FindComponent("cookName",UILabel)
cookDes.text = ZhString.AdventureFoodPage_FoodInstitul
tasteDes.text = ZhString.AdventureFoodPage_FoodInstitul
tasteName.text = ZhString.AdventureFoodPage_TasteTitleTitle
cookName.text = ZhString.AdventureFoodPage_CookTitleTitle
local itemContainer = self:FindGO("bag_itemContainer");
local pfbNum = 7
local wrapConfig = {
wrapObj = itemContainer,
pfbNum = pfbNum,
cellName = "AdventureBagCombineItemCell",
control = AdventureFoodPageCombineItemCell,
dir = 1,
disableDragIfFit = true,
};
self.wraplist = WrapCellHelper.new(wrapConfig);
self.wraplist:AddEventListener(AdventureFoodPage.CheckHashSelected, self.CheckHashSelected, self);
self.wraplist:AddEventListener(MouseEvent.MouseClick, self.HandleClickItem, self);
self.scrollView = self:FindComponent("CookScrollView", ROUIScrollView);
self.scrollView.OnStop = function ()
self:ScrollViewRevert();
end
self.tipHolderCt = self:FindGO("tipHolderCt")
self.tipHolder = self:FindGO("tipHolder")
self.profileCt = self:FindGO("profileCt")
local TasteIcon_Sprite = self:FindComponent("TasteIcon_Sprite",UISprite)
IconManager:SetItemIcon("task_certificate2",TasteIcon_Sprite)
local CookIcon_Sprite = self:FindComponent("CookIcon_Sprite",UISprite)
IconManager:SetItemIcon("task_certificate1",CookIcon_Sprite)
self.itemTabs = self:FindGO("ItemTabs"):GetComponent(UIPopupList)
self.ItemTabsBgSelect = self:FindGO("ItemTabsBgSelect"):GetComponent(UISprite)
EventDelegate.Add(self.itemTabs.onChange, function()
if self.selectTabData ~= self.itemTabs.data then
self.selectTabData = self.itemTabs.data
self:UpdateList()
end
end)
self.tasteTog = self:FindComponent("tasteTog",UIToggle)
self.cookTog = self:FindComponent("cookTog",UIToggle)
self.detailDesCt = self:FindGO("detailDesCt")
end
function AdventureFoodPage:Server_NewFoodDataNtf(date)
self:updateAllCookRecipe(true)
if(self.tobeUnlock)then
local cell = self:GetItemCellById(self.tobeUnlock)
if(cell)then
self:HandleClickItem(cell,true)
cell:PlayUnlockEffect()
end
end
end
function AdventureFoodPage:ScrollViewRevert(callback)
self.revertCallBack = callback;
self.scrollView:Revert();
end
function AdventureFoodPage:ShowSelf(viewdata)
self:Show()
self:initTabData()
self:updateAllCookRecipe()
self:UpdateList()
self.AdventureCookPage:ResetData()
self.AdventureTastePage:ResetData()
end
function AdventureFoodPage:updateAllCookRecipe(noResetPos)
self:UpdateList(noResetPos)
end
function AdventureFoodPage:initTabData()
self.itemTabs:Clear()
local tmpData = {}
tmpData.id = AdventureFoodPage.MaxCategory.id
tmpData.name = ZhString.AdventureFoodPage_AllFoods
self.itemTabs:AddItem(tmpData.name,tmpData)
for i=1,5 do
local single = {id = i,name = string.format(ZhString.AdventureFoodPage_FoodsTab,i)}
self.itemTabs:AddItem(single.name,single)
end
self.itemTabs.value = tmpData.name
end
function AdventureFoodPage:OnEnter( )
-- body
AdventureFoodPage.super.OnEnter(self)
if(self.viewMap ~=nil) then
for _, o in pairs(self.viewMap) do
o:OnEnter()
end
end
TimeTickManager.Me():CreateTick(0,300,self.checkSelect,self)
self:TabChangeHandler(AdventureFoodPage.Category.CookPage)
end
function AdventureFoodPage:checkSelect( )
-- body
if(self.itemTabs.isOpen)then
self:Show(self.ItemTabsBgSelect)
else
self:Hide(self.ItemTabsBgSelect)
end
end
function AdventureFoodPage:OnExit( )
-- body
if(self.viewMap ~=nil) then
for _, o in pairs(self.viewMap) do
o:OnExit()
end
end
self.selectTabData = nil
local cell = self:GetItemCellById(self.chooseItemId)
if(cell)then
cell:setIsSelected(false)
end
self.chooseItemId = nil
TimeTickManager.Me():ClearTick(self)
end
function AdventureFoodPage:handleCategoryClick( key )
-- body
self:handleCategorySelect(key)
if(key == AdventureFoodPage.Category.CookPage)then
self.AdventureCookPage:ResetData()
elseif(key == AdventureFoodPage.Category.TastePage)then
self.AdventureTastePage:ResetData()
end
end
function AdventureFoodPage:handleCategorySelect( key )
-- body
if(key == AdventureFoodPage.Category.CookPage)then
elseif(key == AdventureFoodPage.Category.TastePage)then
end
local cell = self:GetItemCellById(self.chooseItemId)
if(cell)then
cell:setIsSelected(false)
end
self:Hide(self.tipHolderCt)
self.chooseItemId = nil
self:ShowItemTip(nil)
self:Show(self.detailDesCt)
end
function AdventureFoodPage:TabChangeHandler(key)
-- body
if(self.currentKey ~= key)then
self:SuperTabChangeHandler(key)
self:handleCategoryClick(key)
self.currentKey = key
end
end
--標籤頁開始
function AdventureFoodPage:AddTabChangeEvent(obj,target,openCheck,callback)
if(not self.coreTabMap) then self.coreTabMap = {} end
local key = openCheck
if(type(openCheck)=="table" and openCheck.tab) then key = openCheck.tab end
if(not self.coreTabMap[key]) then
local toggle;
if(obj)then
local togs = GameObjectUtil.Instance:GetAllComponentsInChildren(obj,UIToggle,true);
toggle = togs and togs[1];
end
self.coreTabMap[key] = {check = openCheck,go = obj,tog = toggle,tar = target}
if(obj~=nil) then
self:AddClickEvent(obj,self:GetToggleEvent(callback))
end
end
end
function AdventureFoodPage:GetToggleEvent(callback)
if(not self.coreToggleEvent) then
self.coreToggleEvent = function(obj)
if(self.coreTabMap) then
for k,v in pairs(self.coreTabMap) do
if(v.go == obj) then
if(self:TabChangeHandler(k) and type(callback)=="function")then
callback();
end
return
end
end
end
end
end
return self.coreToggleEvent
end
function AdventureFoodPage:SuperTabChangeHandler(key)
if(self.coreTabMap) then
local tabObj = self.coreTabMap[key]
if(type(tabObj.check)=="table" and tabObj.check.id) then
if(not FunctionUnLockFunc.Me():CheckCanOpenByPanelId(tabObj.check.id,true)) then
if(tabObj.tog~=nil) then
tabObj.tog.value = false
end
return false
end
end
if(tabObj.tog~=nil) then
tabObj.tog.value = true
end
for k,v in pairs(self.coreTabMap) do
if(v.tar) then
v.tar.gameObject:SetActive(k==key)
end
end
return true
end
return nil
end
function AdventureFoodPage:HandleClickItem(cellCtl,noClickSound)
if(cellCtl and cellCtl.data)then
local data = cellCtl.data
self.tobeUnlock = nil
if(data.status == SceneFood_pb.EFOODSTATUS_ADD)then
ServiceSceneFoodProxy.Instance:CallClickFoodManualData(SceneFood_pb.EFOODDATATYPE_FOODCOOK,data.itemid)
self:PlayUISound(AudioMap.UI.maoxianshoucedianjijiesuo)
-- local cell = self:GetItemCellById(self.chooseItemId)
-- if(cell)then
-- cell:setIsSelected(false)
-- end
self.tobeUnlock = data.itemid
return
end
if(data.itemid ~= self.chooseItemId) then
local cell = self:GetItemCellById(self.chooseItemId)
if(cell)then
cell:setIsSelected(false)
end
if(not noClickSound)then
self:PlayUISound(AudioMap.UI.Click)
end
self:Hide(self.detailDesCt)
self.currentKey = nil
self.tasteTog.value = false
self.cookTog.value = false
if(self.tip)then
self.tip:SetData(data)
else
self:ShowItemTip(data);
end
self.chooseItemId=data.itemid
cellCtl:setIsSelected(true)
end
end
end
function AdventureFoodPage:ShowItemTip( data )
-- body
self:removeTip()
if(not data)then
return;
end
self:Show(self.tipHolderCt)
self.tip = FoodScoreTip.new(self.tipHolder);
self.tip:SetData(data);
end
function AdventureFoodPage:removeTip( )
-- body
if(self.tipHolder.transform.childCount >0)then
local tip = self.tipHolder.transform:GetChild(0)
if(tip and self.tip)then
self.tip:OnExit()
end
end
self.tip = nil
end
function AdventureFoodPage:CheckHashSelected( cellCtl )
if(cellCtl and cellCtl.data and self.chooseItemId)then
if(self.chooseItemId == cellCtl.data.itemid)then
cellCtl:setIsSelected(true)
else
cellCtl:setIsSelected(false)
end
else
if(cellCtl)then
cellCtl:setIsSelected(false)
end
end
end
function AdventureFoodPage:UpdateList(noResetPos)
local food_cook_info = FoodProxy.Instance.food_cook_info
local list = {}
local tabId = AdventureFoodPage.MaxCategory.id
if(self.selectTabData)then
tabId = self.selectTabData.id
end
for k,v in pairs(food_cook_info) do
if(v.itemData and v.itemData.staticData and
v.itemData.staticData.AdventureValue and
v.itemData.staticData.AdventureValue ~=0 and
AdventureItemData.CheckValid( v.itemData.staticData ))then
local foodData = Table_Food[k]
local hardLv = math.floor((foodData.CookHard+1)/2)
if(tabId == AdventureFoodPage.MaxCategory.id)then
list[#list+1] = v
elseif(hardLv == tabId)then
list[#list+1] = v
end
end
end
table.sort(list,function ( l,r )
-- body
return l.itemid < r.itemid
end)
self:SetData(list, noResetPos);
end
function AdventureFoodPage:SetData(datas, noResetPos)
local newdata = self:ReUnitData(datas, 5);
self.wraplist:UpdateInfo(newdata);
if(not noResetPos and self.gameObject.activeSelf)then
self.wraplist:ResetPosition()
end
end
function AdventureFoodPage:ReUnitData(datas, rowNum)
if(not self.unitData)then
self.unitData = {};
else
TableUtility.ArrayClear(self.unitData);
end
if(datas~=nil and #datas>0)then
for i = 1,#datas do
local i1 = math.floor((i-1)/rowNum)+1;
local i2 = math.floor((i-1)%rowNum)+1;
self.unitData[i1] = self.unitData[i1] or {};
if(datas[i] == nil)then
self.unitData[i1][i2] = nil;
else
self.unitData[i1][i2] = datas[i];
end
end
end
return self.unitData;
end
function AdventureFoodPage:GetItemCellById(id)
if(not id)then
return
end
local cells = self:GetItemCells()
if(cells and #cells>0)then
for i=1,#cells do
local single = cells[i]
if(single.data and single.data.itemid == id)then
return single
end
end
end
end
function AdventureFoodPage:GetItemCells()
local combineCells = self.wraplist:GetCellCtls();
local result = {};
for i=1,#combineCells do
local v = combineCells[i];
local childs = v:GetCells();
for i=1,#childs do
table.insert(result, childs[i]);
end
end
return result;
end