PetCollectionView = PetCollectionView or BaseClass(BaseItem) local PetCollectionView = PetCollectionView function PetCollectionView:__init() self.base_file = "pet" self.layout_file = "PetCollectionView" self.model = PetModel:getInstance() self.full_screen = true self.ani_right = 400 self.ani_left = -200 self.cur_select_data = nil self.current_info_panel_tag = false--属性框:true 技能框:false self.skill_item_list = {}--技能itemlist self:Load() end function PetCollectionView:Load_callback() self.nodes = { "left/previewBtn:obj",--预览按钮 "left/storyBtn:obj",--故事按钮 "mid/raceIcon:img",--种族icon "con_model",--模型容器 "mid/name:tmp",--名字 "right/ScrollViewCollect/Viewport/Content","right/ScrollViewCollect",--图鉴scrollview "mid/con_info/con_attr/ScrollViewAttr/Viewport/ContentAttr",--属性框容器 "mid/con_info/con_attr/ScrollViewAttr",--属性框scrollview "mid/con_info/switchBtn:obj",--切换按钮 "mid/con_info/con_skill:obj","mid/con_info/con_attr:obj",--属性框技能框容器 "mid/con_info/fightText:txt",--战力 "right/rareTab2:img:obj", "right/rareTab3:img:obj", "right/rareTab1:img:obj", "right/rareTab4:img:obj", "right/rareTab2/rareRed2:obj", "right/rareTab3/rareRed3:obj", "right/rareTab1/rareRed1:obj", "right/rareTab4/rareRed4:obj", "right/rareTab2/tabText2:tmp", "right/rareTab3/tabText3:tmp", "right/rareTab1/tabText1:tmp", "right/rareTab4/tabText4:tmp", "mid/msgBg:img", "mid/con_info/fightLabel", "right/scrollBg:img", "mid/getWayCon:obj", "mid/getWayCon/goGetDes:obj", "mid/getWayCon/getDes:tmp", } self:GetChildren(self.nodes) -- lua_resM:setImageSprite(self,self.msgBg_img,"petExtra_asset","pet_collect_skill_di") lua_resM:setOutsideImageSprite(self, self.scrollBg_img, GameResPath.GetPetImage("pet_collection_di")) self:AddEvents() if self.need_refreshData then self:SetData(self.data) end end function PetCollectionView:AddEvents( ) local on_click = function ( click_obj ) if self.switchBtn_obj == click_obj then--切换按钮 self.current_info_panel_tag = not self.current_info_panel_tag self:UpdateAttrPanelSkillPanelSwitch() elseif self.previewBtn_obj == click_obj then--进化预览 self.model:Fire(PetConst.OPEN_PET_PREVIEW,self.show_pet_id) elseif self.storyBtn_obj == click_obj then--故事 self.model:Fire(PetConst.OPEN_PET_STORY_VIEW,self.show_pet_id) elseif self.rareTab1_obj == click_obj then self:UpdateCollectScrollView(1) elseif self.rareTab2_obj == click_obj then self:UpdateCollectScrollView(2) elseif self.rareTab3_obj == click_obj then self:UpdateCollectScrollView(3) elseif self.rareTab4_obj == click_obj then self:UpdateCollectScrollView(4) elseif self.goGetDes_obj == click_obj then self:OpenGetWay() end end AddClickEvent(self.switchBtn_obj, on_click) AddClickEvent(self.previewBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE) AddClickEvent(self.storyBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE) AddClickEvent(self.rareTab1_obj, on_click) AddClickEvent(self.rareTab2_obj, on_click) AddClickEvent(self.rareTab3_obj, on_click) AddClickEvent(self.rareTab4_obj, on_click) AddClickEvent(self.goGetDes_obj, on_click) local function on_ans_update_red_dot(tab_id) if not self.is_loaded then return end if tab_id == PetConst.RED_DOT_TYPE.Active then self:RefreshRed() end end self:BindEvent(self.model, PetConst.ANS_UPDATE_RED_DOT, on_ans_update_red_dot) end function PetCollectionView:OpenGetWay( ) if not self.cur_select_data then return end local goods_id = stringtotable(self.cur_select_data.cost)[1][2] UIToolTipMgr:getInstance():AppendGoodsTips(goods_id, nil, nil,nil,nil,nil,nil,true,true) end function PetCollectionView:RefreshRed( ) local red_1 = self.model:GetSingleRareActiveRedDot(1) local red_2 = self.model:GetSingleRareActiveRedDot(2) local red_3 = self.model:GetSingleRareActiveRedDot(3) local red_4 = red_1 or red_2 or red_3 self.rareRed1_obj:SetActive(red_1) self.rareRed2_obj:SetActive(red_2) self.rareRed3_obj:SetActive(red_3) self.rareRed4_obj:SetActive(red_4) end function PetCollectionView:UpdateView( ) -- self:UpdateCollectScrollView(self.model:GetPetBySort()) self:UpdateCollectScrollView(4) self:UpdateAttrPanelSkillPanelSwitch() self:RefreshRed() end --刷新图鉴scrollview function PetCollectionView:UpdateCollectScrollView(index) for i=1,4 do if index ~= i then lua_resM:setImageSprite(self, self["rareTab"..i.."_img"], "uiComponent_asset","com_empty") self["tabText"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("9eb3cf") SetTMPSharedMaterial(self["tabText"..i.."_tmp"], ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault) else lua_resM:setImageSprite(self, self["rareTab"..i.."_img"], "pet_asset","pet_top_bar_select") self["tabText"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("ffffff") SetTMPSharedMaterial(self["tabText"..i.."_tmp"], ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBlueTab) end end local pet_list = {} if index == 4 then pet_list = self.model:GetPetBySort() else pet_list = self.model:GetPetRareCfg(index) end --图鉴item的点击回调函数 local function select_callback(data) self.show_pet_id = data.pet_id--记录当前展示中的宠物id self:UpdatePetInfo(data) self:UpdateCollectAttrPanel(stringtotable(data.attr_list))--刷新属性框 self:UpdateCollectSkillPanel(data.pet_id)--刷新技能框 end if not self.item_list_com then self.item_list_com = self:AddUIComponent(UI.ItemListCreator) end self.item_list_com:Reset() self.model.select_collect_item_id = 0 --找到最前面那个可以解锁的宠物index local jump_index = 1 for i,v in ipairs(pet_list) do local can_active = self.model:GetSingleActiveRedDot(v.pet_id) if can_active then jump_index = i break end end local info = { data_list = pet_list, item_con = self.Content, item_class = PetCollectItem, item_width = 112, item_height = 112+5, space_x = 10, space_y = 12-5, start_x = 15.5, start_y = -6.5, scroll_view = self.ScrollViewCollect, create_frequency = 0.01, on_update_item = function(item, i, v) item:SetData(i,v,select_callback,#pet_list) -- self.item_list_com:IterateItems(function( item, i ) -- item:OnClick(1)--每次进入scrollview时默认选中第一个 -- end) end, final_callback = function() if jump_index ~= 1 then self.item_list_com:ScrollToItem(jump_index,0) end end, } self.item_list_com:UpdateItems(info) self.item_list_com:IterateItems(function( item, i ) item:OnClick(1) end) end --设置属性框和技能框的切换显示 function PetCollectionView:UpdateAttrPanelSkillPanelSwitch() if self.current_info_panel_tag then--显示属性框 self.con_attr_obj:SetActive(true) -- self.con_skill_obj:SetActive(false) else--显示技能框 self.con_attr_obj:SetActive(false) -- self.con_skill_obj:SetActive(true) end end --刷新属性框 function PetCollectionView:UpdateCollectAttrPanel(attr_list) local need_attr_list = {} for k,v in pairs(attr_list) do local data = {v[1],v[2]} table.insert(need_attr_list,data) end --刷新战力 self.fightText_txt.text = GetFighting(need_attr_list) SetAnchoredPositionX(self.fightLabel,52-self.fightText_txt.preferredWidth/2-45) local is_base_attr = true if not self.attr_list_com then self.attr_list_com = self:AddUIComponent(UI.ItemListCreator) end local info = { data_list = attr_list, item_con = self.ContentAttr, item_class = PetCollectAttrItem, -- item_width = 180, item_height = 47, -- space_x = -3, space_y = -3, start_y = 0, start_x = 0, scroll_view = self.ScrollViewAttr, create_frequency = 0.01, on_update_item = function(item, i, v) item:SetData(i,v,is_base_attr) end, } self.attr_list_com:UpdateItems(info) end --刷新技能框 function PetCollectionView:UpdateCollectSkillPanel(pet_id)--pet_id local skill_table = {} for i=1,4 do local data = self.model:GetPetSkillCfg(pet_id,i)--通过id和槽位获取技能配置 if data then table.insert(skill_table,data) end end local pet_data = self.model:GetPetListById(pet_id) local pet_stage = pet_data and pet_data.pet_stage or 0 local pet_star = pet_data and pet_data.pet_star or 0 for k,v in pairs(self.skill_item_list) do v:SetVisible(false) end for i,v in ipairs(skill_table) do local item = self.skill_item_list[i] if not item then item = PetCollectSkillItem.New(self.con_skill) self.skill_item_list[i] = item end item:SetVisible(true) item:SetData(v,pet_id,1) item:SetPosition(17+95*(i-1),-6) end end --刷新形象、名字等的显示 function PetCollectionView:UpdatePetInfo(pet_data) self.cur_select_data = pet_data and pet_data or nil lua_resM:setImageSprite(self, self.raceIcon_img, "pet_asset", "pet_race_"..pet_data.pet_race,true) local get_des_cfg = PetConst.PetGetWayDes[pet_data.pet_id] if get_des_cfg then self.getWayCon_obj:SetActive(true) self.getDes_tmp.text = get_des_cfg.des SetAnchoredPositionX(self.goGetDes,-45+self.getDes_tmp.preferredWidth/2+45) else self.getWayCon_obj:SetActive(false) end --设置姓名 local pet_stage = 1 local show_figure_id = pet_data.figure_id --取当前最高表现的资源id -- local my_pet_data = self.model:GetPetListById(pet_data.pet_id) -- if my_pet_data then -- pet_stage = my_pet_data.pet_stage -- show_figure_id = self.model:GetPetCfg(my_pet_data.pet_id,my_pet_data.pet_star).figure_id -- end self.name_tmp.text = Trim(pet_data.pet_name) SetAnchoredPositionX(self.raceIcon,15-self.name_tmp.preferredWidth/2-20) local res_data = { father_node = self, transform = self.con_model, fashion_type = FuncOpenModel.TypeId.Pet, figure_id = show_figure_id, ui_model_type = UIModelCommon.ModelType.BackModel, use_green_screen = true, green_screen_camera_type = 3, -- camera_type:1 主摄像机 2 UI摄像机 3 UIModel摄像机 } local function delay_method( ) FuncOpenModel:getInstance():SetModelRes(res_data) end setTimeout(delay_method, 0.02) end function PetCollectionView:SetData( data ) self.data = data if self.is_loaded then self.need_refreshData = false self:UpdateView() else self.need_refreshData = true end end function PetCollectionView:__delete( ) for i, v in ipairs(self.skill_item_list) do v:DeleteMe() end self.skill_item_list = {} end