---@class KLTradeHomePanel:UIKmlLuaPanelBase ---@field view KLTradeHomePanelView local KLTradeHomePanel = class(UIKmlLuaPanelBase) local this =KLTradeHomePanel local CatalogueName = { {"全部",0}, {"公示区",100}, --{"货币",1}, {"装备",2}, {"技能书",3}, {"材料",4}, {"预购",200} } local CatalogueSubName = { ["全部"]={}, ["公示区"]={}, --["货币"]={{"奇迹币",1},{"钻石",2}}, ["装备"]={{"武器",1},{"头盔",2},{"铠甲",3},{"护腿",4},{"护手",5},{"鞋子",6},{"翅膀",7},{"大天使装备",8}}, ["技能书"]={}, ["材料"]={{"宝石",1},{"门票材料",2},{"翅膀材料",3},{"首饰材料",4},{"技能材料",5},{"荧光材料",6},{"大天使材料",7},{"叠加幸运石",8},{"活动材料",9}}, ["预购"]={} } local FilterLevelName = { "阶数","一阶","二阶","三阶","四阶","五阶","六阶","七阶","八阶","九阶","十阶","十一阶","十二阶" } local SortTypeName = { "排序","时间↑","时间↓","价格↑","价格↓" } local CareerTypeName = { "职业","剑士","法师","弓箭手" } local QualityTypeName = {"品质","白装","卓越","首饰","卓越套装"} ---@class TradeCatalogueItem ---@field isRoot boolean 是否是根节点 ---@field isCategory boolean 是否是分类节点 ---@field name string 名称 ---@field isCategoryExpand boolean 是否展开分类 ---@field children TradeCatalogueItem[] 子节点 ---@field parent TradeCatalogueItem 父节点 ---@field rootType string ---@field subType string ---创建时调用一次 function this:Init() GUI:OSAScrollView_Initialized(self.view.scrollview_catalogue,nil,self.CatalogueItemUpdateFun,self) ---@type TradeCatalogueItem[] self.catalogueDataList = {} for _, rootNameData in pairs(CatalogueName) do if (self.args == 3 and (_ == 3 or _ == 4 or _ == 5)) or self.args ~= 3 then local subNameData = CatalogueSubName[rootNameData[1]] ---@type TradeCatalogueItem local catalogueItem = {} catalogueItem.isRoot = true catalogueItem.name = rootNameData[1] if #subNameData ~= 0 then catalogueItem.isCategory = true catalogueItem.children = {} for _, data in ipairs(subNameData) do ---@type TradeCatalogueItem local child = {} child.name = data[1] child.isCategory = false child.isRoot = false child.parent = catalogueItem child.rootType = rootNameData[2] child.subType = data[2] table.insert(catalogueItem.children, child) end else catalogueItem.isCategory = false catalogueItem.rootType = rootNameData[2] catalogueItem.subType = 0 end table.insert(self.catalogueDataList, catalogueItem) end end self.selectedItemData = self.catalogueDataList[1] self.selectedFilterLevel = 0 self.selectedSortType = 0 self.selectedCareerType = 0 self.selectedFilterQuality = 0 end function this:GetCurGoodsPanel() if not self.curGoodsPanel then if self.args == 1 then ---@type KLTradeCommonGoodsPanel self.curGoodsPanel = GUI:UIPanel_Open("dev/outui/Trade/Panel/KLTradeCommonGoods/KLTradeCommonGoodsPanel") elseif self.args == 2 then ---@type KLTradeUnionGoodsPanel self.curGoodsPanel = GUI:UIPanel_Open("dev/outui/Trade/Panel/KLTradeUnionGoods/KLTradeUnionGoodsPanel") elseif self.args == 3 then ---@type KLTradeCrossServerGoodsPanel self.curGoodsPanel = GUI:UIPanel_Open("dev/outui/Trade/Panel/KLTradeCrossServerGoods/KLTradeCrossServerGoodsPanel") end end return self.curGoodsPanel end ---@param item UIKmlLuaControl function this:CatalogueItemUpdateFun(item,index) local catalogueData = self.catalogueDataList[index+1] local txtName = GUI:GetChildById(item,"txt_name") local content = GUI:GetChildById(item,"btn_content") GUI:Text_setString(txtName,catalogueData.name) if catalogueData.isCategory then GUI:AddOnClickEvent(content,self,self.CatalogueGroupOnClick,catalogueData) else GUI:AddOnClickEvent(content,self,self.CatalogueItemOnToggle,catalogueData) end if catalogueData.isRoot then GUI:Image_loadTexture(content,self:IsSelectedCatalogueData(catalogueData) and "button_interface_window23" or "button_interface_window20","Atlas/Common.spriteatlas") --GUI:Toggle_setSrc(item,"Atlas/Common.spriteatlas","button_interface_window20","button_interface_window23") GUI:setContentSize(content,160,48) else GUI:Image_loadTexture(content,self:IsSelectedCatalogueData(catalogueData) and "ty_btn_click_sideeffect" or "ty_btn_click_side_n","Atlas/Common.spriteatlas") --GUI:Toggle_setSrc(item,"Atlas/Common.spriteatlas","bg1","ty_btn_light") GUI:setContentSize(content,160,40) end end function this:IsSelectedCatalogueData(catalogueData) return self.selectedCatalogueData == catalogueData or self.selectedItemData == catalogueData end ---@param data TradeCatalogueItem function this:CatalogueGroupOnClick(_, data) data.isCategoryExpand = not data.isCategoryExpand self:RefreshCatalogueDataList() self.selectedCatalogueData = data self.selectedItemData = self.selectedCatalogueData.children[1] self:RequestRefreshGoodsList() GUI:OSAScrollView_RefreshList(self.view.scrollview_catalogue,#self.catalogueDataList) end ---@param data TradeCatalogueItem function this:CatalogueItemOnToggle(_,data) if data.isRoot then self.selectedCatalogueData = nil else self.selectedCatalogueData = data.parent end self.selectedItemData = data GUI:OSAScrollView_RefreshList(self.view.scrollview_catalogue,#self.catalogueDataList) self:RequestRefreshGoodsList() end function this:RefreshCatalogueDataList() local newCatalogueDataList = {} for _, v in pairs(self.catalogueDataList) do if v.isRoot then table.insert(newCatalogueDataList, v) if v.isCategory and v.isCategoryExpand then if v.children then for _, child in pairs(v.children) do table.insert(newCatalogueDataList, child) end end end end end self.catalogueDataList = newCatalogueDataList end ---注册UI事件和服务器消息 function this:RegistEvents() GUI:AddOnClickEvent(self.view.btn_filter_level,self,self.BtnFilterLevelOnClick) GUI:AddOnClickEvent(self.view.btn_sort,self,self.BtnSortOnClick) GUI:AddOnClickEvent(self.view.btn_filter_career,self,self.BtnFilterCareerOnClick) GUI:AddOnClickEvent(self.view.btn_filter_quality,self,self.BtnFilterQualityOnClick) GUI:AddOnClickEvent(self.view.btn_dropdown_mask,self,self.BtnDropdownMaskOnClick) for i = 0, 12 do GUI:AddOnClickEvent(self.view["btn_filter_level_" .. i],self,self.BtnFilterLevelItemOnClick,i) end self.lastSelectedLevelItem = self.view["btn_filter_level_0"] for i = 0, 4 do GUI:AddOnClickEvent(self.view["btn_sort_" .. i],self,self.BtnSortItemOnClick,i) end self.lastSelectedSortItem = self.view["btn_sort_0"] for i = 0, 3 do GUI:AddOnClickEvent(self.view["btn_filter_career_" .. i],self,self.BtnFilterCareerItemOnClick,i) end self.lastSelectedCareerItem = self.view["btn_filter_career_0"] for i = 0, 4 do GUI:AddOnClickEvent(self.view["btn_filter_quality_".. i],self,self.BtnFilterQualityItemOnClick,i) end self.lastSelectedQualityItem = self.view["btn_filter_quality_0"] SL:RegisterLUAEvent(LUA_EVENT_TRADE_BUY_REQUEST,self.RequestRefreshGoodsList,self) SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_TRADE_MY_PRE_GOODS,self.RequestRefreshGoodsList,self) SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_TRADE_BUY_GOODS,self.RequestRefreshGoodsList,self) SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_TRADE_PRE_ORDER,self.RES_TRADE_PRE_ORDER,self) end function this:RES_TRADE_PRE_ORDER(_,message) if message then SL:onLUAEvent(LUA_EVENT_TRADE_BUY_REQUEST) end end function this:BtnFilterQualityItemOnClick(item,index) local qualityName = QualityTypeName[index+1] self.selectedFilterQuality = index GUI:Button_setTitleText(self.view.btn_filter_quality,qualityName) GUI:setVisible(self.view.dropdown_list_quality,false) GUI:setVisible(self.view.btn_dropdown_mask,false) self:RequestRefreshGoodsList() if self.lastSelectedQualityItem then GUI:setColor(self.lastSelectedQualityItem,"#00000000") end self.lastSelectedQualityItem = item GUI:setColor(item,"#FFFFFFFF") end function this:BtnFilterCareerItemOnClick(item,index) local careerName = CareerTypeName[index+1] self.selectedCareerType = index GUI:Button_setTitleText(self.view.btn_filter_career,careerName) GUI:setVisible(self.view.dropdown_list_career,false) GUI:setVisible(self.view.btn_dropdown_mask,false) self:RequestRefreshGoodsList() if self.lastSelectedCareerItem then GUI:setColor(self.lastSelectedCareerItem,"#00000000") end self.lastSelectedCareerItem = item GUI:setColor(item,"#FFFFFFFF") end function this:BtnSortItemOnClick(item,index) local sortName = SortTypeName[index+1] self.selectedSortType = index GUI:Button_setTitleText(self.view.btn_sort,sortName) GUI:setVisible(self.view.dropdown_list_order,false) GUI:setVisible(self.view.btn_dropdown_mask,false) self:RequestRefreshGoodsList() if self.lastSelectedSortItem then GUI:setColor(self.lastSelectedSortItem,"#00000000") end self.lastSelectedSortItem = item GUI:setColor(item,"#FFFFFFFF") end function this:BtnFilterLevelItemOnClick(item,index) local levelName = FilterLevelName[index+1] self.selectedFilterLevel = index GUI:Button_setTitleText(self.view.btn_filter_level,levelName) GUI:setVisible(self.view.dropdown_list_level,false) GUI:setVisible(self.view.btn_dropdown_mask,false) self:RequestRefreshGoodsList() if self.lastSelectedLevelItem then GUI:setColor(self.lastSelectedLevelItem,"#00000000") end self.lastSelectedLevelItem = item GUI:setColor(item,"#FFFFFFFF") end function this:BtnFilterLevelOnClick() self:CloseAllDropdownList(self.view.dropdown_list_level) local visible = GUI:getVisible(self.view.dropdown_list_level) GUI:setVisible(self.view.dropdown_list_level,not visible) GUI:setVisible(self.view.btn_dropdown_mask,not visible) end function this:BtnSortOnClick() self:CloseAllDropdownList(self.view.dropdown_list_order) local visible = GUI:getVisible(self.view.dropdown_list_order) GUI:setVisible(self.view.dropdown_list_order,not visible) GUI:setVisible(self.view.btn_dropdown_mask,not visible) end function this:BtnFilterQualityOnClick() self:CloseAllDropdownList(self.view.dropdown_list_quality) local visible = GUI:getVisible(self.view.dropdown_list_quality) GUI:setVisible(self.view.dropdown_list_quality,not visible) GUI:setVisible(self.view.btn_dropdown_mask,not visible) end function this:BtnFilterCareerOnClick() self:CloseAllDropdownList(self.view.dropdown_list_career) local visible = GUI:getVisible(self.view.dropdown_list_career) GUI:setVisible(self.view.dropdown_list_career,not visible) GUI:setVisible(self.view.btn_dropdown_mask,not visible) end function this:BtnDropdownMaskOnClick() self:CloseAllDropdownList() GUI:setVisible(self.view.btn_dropdown_mask,false) end function this:CloseAllDropdownList(except) if except ~= self.view.dropdown_list_career then GUI:setVisible(self.view.dropdown_list_career,false) end if except ~= self.view.dropdown_list_order then GUI:setVisible(self.view.dropdown_list_order,false) end if except ~= self.view.dropdown_list_quality then GUI:setVisible(self.view.dropdown_list_quality,false) end if except ~= self.view.dropdown_list_level then GUI:setVisible(self.view.dropdown_list_level,false) end end ---创建或者刷新界面数据时调用 function this:Refresh() GUI:OSAScrollView_RefreshList(self.view.scrollview_catalogue,#self.catalogueDataList) if self.args == 1 then GUI:UIPanel_Close("dev/outui/Trade/Panel/KLTradeUnionGoods/KLTradeUnionGoodsPanel") elseif self.args == 2 then GUI:UIPanel_Close("dev/outui/Trade/Panel/KLTradeCommonGoods/KLTradeCommonGoodsPanel") elseif self.args == 3 then GUI:UIPanel_Close("dev/outui/Trade/Panel/KLTradeCommonGoods/KLTradeCommonGoodsPanel") end self:RequestRefreshGoodsList() end function this:Close() GUI:UIPanel_Close("dev/outui/Trade/Panel/KLTradeCommonGoods/KLTradeCommonGoodsPanel") GUI:UIPanel_Close("dev/outui/Trade/Panel/KLTradeUnionGoods/KLTradeUnionGoodsPanel") GUI:UIPanel_Close("dev/outui/Trade/Panel/KLTradeCrossServerGoods/KLTradeCrossServerGoodsPanel") end function this:RequestRefreshGoodsList() self:GetCurGoodsPanel():RequestRefreshGoodsList(self.selectedItemData.rootType,self.selectedItemData.subType,self.selectedSortType,self.selectedCareerType,self.selectedFilterLevel,self.selectedFilterQuality) --SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_TRADE_GOODS,{self.selectedItemData.rootType,self.selectedItemData.subType,self.selectedSortType,self.selectedCareerType,self.selectedFilterLevel,self.selectedFilterQuality}) end return this