PetTrainingView = PetTrainingView or BaseClass(BaseItem) local PetTrainingView = PetTrainingView function PetTrainingView:__init() self.base_file = "pet" self.layout_file = "PetTrainingView" self.model = PetModel:getInstance() self.full_screen = true self.ani_right = 400 self.ani_left = -200 self.old_model_effct_play_time = 0 self.current_panel_tag = 0--当前选中的操作栏页签 self:Load() end function PetTrainingView:Load_callback() self.nodes = { "left/storyBtn:obj","left/previewBtn:obj","left/shareBtn:obj",--故事、预览、分享 "right/topBarCon/feedBtn:obj:img","right/topBarCon/skillBtn:obj:img","right/topBarCon/evolveBtn:obj:img",--操作栏页签按钮 "right/topBarCon/skillBtn/skillTxt:tmp", "right/topBarCon/feedBtn/feedTxt:tmp", "right/topBarCon/evolveBtn/evolveTxt:tmp", --操作栏页签按钮文字 "mid/raceIcon:img",--种族 "con_model",--模型容器 "mid/name:tmp",--名字 "mid/ScrollView","mid/ScrollView/Viewport/Content",--scrollview "right/raceTxt:tmp","right/dateTxt:tmp",--种族 获取日期 "right/fightTxt:txt",--战力 "right/con_panel",--操作栏容器 "right/msgBg:img", "right/topBarCon/skillBtn/skillRed:obj", "right/topBarCon/feedBtn/feedRed:obj", "right/topBarCon/evolveBtn/evolveRed:obj", --红点 "right/fightLabel", "mid/effectCon", } self:GetChildren(self.nodes) lua_resM:setImageSprite(self, self.msgBg_img, "petExtra_asset","pet_msg_bg") --操作栏背景图 self.panel_img_list = { [1] = self.feedBtn_img, [2] = self.evolveBtn_img, [3] = self.skillBtn_img, } --操作栏按钮 self.panel_btn_list = { [1] = self.feedBtn_obj, [2] = self.evolveBtn_obj, [3] = self.skillBtn_obj, } --操作栏文本 self.panel_txt_list = { [1] = self.feedTxt_tmp, [2] = self.evolveTxt_tmp, [3] = self.skillTxt_tmp, } self:CreatPanelTopBar()--先把操作栏给创建出来 self:AddEvents() if self.need_refreshData then self:UpdateView() end end function PetTrainingView:AddEvents( ) local on_click = function ( click_obj ) if 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.shareBtn_obj == click_obj then--分享 local color = PetConst.stage_message[self.show_pet_cfg_data.rare_degree].color_str local herf_content = string.format("", tostring(RoleManager.Instance.mainRoleInfo.role_id), tostring(self.show_pet_data.pet_id)) local content = string.format("%s%s%s%s%s%s","我分享了我的宠物 ", color,self.show_pet_cfg_data.pet_name," 哦!",herf_content,"[前往查看]") ChatModel:getInstance():Fire(ChatModel.SEND_MSG,ChatModel.CHANNEL_WORLD,content,nil,nil,ChatModel.CHAT_COMMON_TYPE.SYSTEM) Message.show("已分享宠物至世界聊天!","success") elseif self.panel_btn_list[1] == click_obj then--喂养页签按钮 self:UpdatePanelTopBar(1) elseif self.panel_btn_list[2] == click_obj then--进化页签按钮 self:UpdatePanelTopBar(2) elseif self.panel_btn_list[3] == click_obj then--技能宝石页签按钮 self:UpdatePanelTopBar(3) end end AddClickEvent(self.previewBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE) AddClickEvent(self.storyBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE) AddClickEvent(self.shareBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE) AddClickEvent(self.panel_btn_list[1], on_click,LuaSoundManager.SOUND_UI.SWITCH) AddClickEvent(self.panel_btn_list[2], on_click,LuaSoundManager.SOUND_UI.SWITCH) AddClickEvent(self.panel_btn_list[3], on_click,LuaSoundManager.SOUND_UI.SWITCH) local function update_pet_training_view() self:UpdateView() end self:BindEvent(self.model, PetConst.UPDATE_PET_TRAINING_VIEW, update_pet_training_view) --更新战力显示 local function update_pet_fight(power) if not self.is_loaded then return end --设置战力文本 -- self.fightTxt_txt.text = power self.fightTxt_txt.text = self.model:GetPetFightById(self.show_pet_id)--改用前端计算战力 SetAnchoredPositionX(self.fightLabel,51-self.fightTxt_txt.preferredWidth/2-55) end self:BindEvent(self.model, PetConst.UPDATE_PET_FIGHT, update_pet_fight) --宠物进化之后刷新有阶段显示的地方 local pet_evolve = function(pet_id) if not self.is_loaded then return end if pet_id == self.show_pet_id then local data = self.model:GetPetListById(pet_id) local cfg_data = self.model:GetPetCfg(data.pet_id, data.pet_star) self:UpdatePetInfo(data,cfg_data)--刷新宠物信息 end end self:BindEvent(self.model, PetConst.PET_EVOLVE, pet_evolve) --装宝石之后刷新模型展示 local function on_pet_diamond_effect_update(pet_id) if not self.is_loaded then return end if pet_id == self.show_pet_id then local data = self.model:GetPetListById(pet_id) local cfg_data = self.model:GetPetCfg(data.pet_id, data.pet_star) self:UpdatePetInfo(data,cfg_data)--刷新宠物信息 end end self:BindEvent(self.model, PetConst.UPDATE_PET_DIAMOND_EFFECT, on_pet_diamond_effect_update) -- local function refresh_feed_red(bool,pet_id) -- if pet_id ~= self.show_pet_id then return end -- self.feedRed_obj:SetActive(bool) -- end -- self:BindEvent(self.model, PetConst.REFRESH_PET_TRAINING_FEED_RED, refresh_feed_red) -- local function refresh_evolve_red(bool,pet_id) -- if pet_id ~= self.show_pet_id then return end -- self.evolveRed_obj:SetActive(bool) -- end -- self:BindEvent(self.model, PetConst.REFRESH_PET_TRAINING_EVOLVE_RED, refresh_evolve_red) -- local function refresh_diamond_red(bool,pet_id) -- if pet_id ~= self.show_pet_id then return end -- self.skillRed_obj:SetActive(bool) -- end -- self:BindEvent(self.model, PetConst.REFRESH_PET_DIAMOND_DIAMOND_RED, refresh_diamond_red) local function onRefreshRed(red_type) if not self.is_loaded then return end if not self.show_pet_id or self.show_pet_id == 0 then return end if red_type == PetConst.RED_DOT_TYPE.Feed then local feed_red = self.model:GetSingleFeedRedDot(self.show_pet_id) self.feedRed_obj:SetActive(feed_red) elseif red_type == PetConst.RED_DOT_TYPE.Evolve then local evolve_red = self.model:GetSingleEvolveRedDot(self.show_pet_id) self.evolveRed_obj:SetActive(evolve_red) elseif red_type == PetConst.RED_DOT_TYPE.Diamond or red_type == PetConst.RED_DOT_TYPE.DiamondCompose then local skill_red = self.model:GetSingleDiamondRedDot(self.show_pet_id) local diamond_compose_red = self.model:GetPetRedDotByType(PetConst.RED_DOT_TYPE.DiamondCompose) self.skillRed_obj:SetActive(skill_red or diamond_compose_red) end end self:BindEvent(self.model, PetConst.ANS_UPDATE_RED_DOT, onRefreshRed) --宠物喂养后要刷特效 local function play_lv_up_effect_handler() if not self.is_loaded then return end --播放属性特效有cd,必须等播完才能再播 local need_play_model_effect = true if TimeUtil:getServerTimeMs()/1000-self.old_model_effct_play_time <= 1.2 then need_play_model_effect = false end if need_play_model_effect then self.old_model_effct_play_time = TimeUtil:getServerTimeMs()/1000 self:AddUIEffect("ui_jinjie", self.effectCon, "UI", nil, 1, false, nil, false) end end self:BindEvent(self.model, PetConst.PLAY_PET_LV_UP_EFFECT, play_lv_up_effect_handler) end function PetTrainingView:UpdateView( ) self:UpdatePanelTopBar(self.right_tab_index) self:UpdatePetScrollView() end --刷新下方宠物栏 function PetTrainingView:UpdatePetScrollView() local pet_list = self.model:GetPetListAfterSortByDegreeAndLv() local empty_data = {pet_id = 0}--加一个空数据用作点击跳转获取宠物使用 if #pet_list < 7 then for i=1,7-#pet_list do table.insert(pet_list,empty_data) end else table.insert(pet_list,empty_data) end --petitem的点击回调函数 --data追溯至16301协议 local function click_callback(data,cfg_data) self.feedRed_obj:SetActive(self.model:GetSingleFeedRedDot(data.pet_id)) self.evolveRed_obj:SetActive(self.model:GetSingleEvolveRedDot(data.pet_id)) self.skillRed_obj:SetActive(self.model:GetSingleDiamondRedDot(data.pet_id) or self.model:GetPetRedDotByType(PetConst.RED_DOT_TYPE.DiamondCompose)) self.show_pet_cfg_data = cfg_data self.show_pet_data = data self.show_pet_id = data.pet_id--记录当前展示中的宠物id self:UpdatePetInfo(data,cfg_data)--刷新宠物信息 self.feed_panel:SetData(data,cfg_data)--刷新升级栏 self.evolve_panel:SetData(data,cfg_data)--刷新进化栏 self.skill_panel:SetData(data) end if not self.item_list_com then self.item_list_com = self:AddUIComponent(UI.ItemListCreator) end local info = { data_list = pet_list, item_con = self.Content, item_class = PetItem, item_width = 135, -- item_height = 175, space_x = 27, start_x = 11, start_y = -17, scroll_view = self.ScrollView, -- create_frequency = 0.01, -- reuse_item_num = 100, is_scroll_back_on_update = true, on_update_item = function(item, i, v) item:SetData(i,v,click_callback) -- self.item_list_com:IterateItems(function( item, i ) -- item:OnClick(1)--选中第一个 -- end) end, } self.item_list_com:UpdateItems(info) self.item_list_com:IterateItems(function( item, i ) item:OnClick(1) end) end --创建操作栏topbar function PetTrainingView:CreatPanelTopBar() if not self.feed_panel then self.feed_panel = PetFeedPanel.New(self.con_panel) end self.feed_panel:SetVisible(false,true) if not self.evolve_panel then self.evolve_panel = PetEvolvePanel.New(self.con_panel) end self.evolve_panel:SetVisible(false,true) if not self.skill_panel then self.skill_panel = PetSkillPanel.New(self.con_panel) end self.skill_panel:SetVisible(false,true) end --刷新操作栏topbar function PetTrainingView:UpdatePanelTopBar(panel_type) if self.current_panel_tag == panel_type or panel_type < 1 or panel_type > 3 then return end self.current_panel_tag = panel_type self.right_tab_index = panel_type for i=1,3 do --设置按钮的图片样式和按钮文字的颜色样式 if panel_type ~= i then lua_resM:setImageSprite(self, self.panel_img_list[i], "uiComponent_asset","com_empty") self.panel_txt_list[i].color = ColorUtil:ConvertHexToRGBColor("9eb3cf") SetTMPSharedMaterial(self.panel_txt_list[i], ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault) else lua_resM:setImageSprite(self, self.panel_img_list[i], "pet_asset", "pet_top_bar_select") self.panel_txt_list[i].color = ColorUtil:ConvertHexToRGBColor("ffffff") SetTMPSharedMaterial(self.panel_txt_list[i], ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBlueTab) end end self.feed_panel:SetVisible(panel_type == 1,true) self.evolve_panel:SetVisible(panel_type == 2,true) self.skill_panel:SetVisible(panel_type == 3,true) end --刷新宠物的各类信息 data追溯至16301协议数据 function PetTrainingView:UpdatePetInfo(data,cfg_data) --设置姓名 self.name_tmp.text = Trim(cfg_data.pet_name) SetAnchoredPositionX(self.raceIcon,15-self.name_tmp.preferredWidth/2-20) --设置种族icon lua_resM:setImageSprite(self, self.raceIcon_img, "pet_asset", "pet_race_"..cfg_data.pet_race,true) --设置战力文本 self.fightTxt_txt.text = self.model:GetPetFightById(self.show_pet_id)--改用前端计算战力 SetAnchoredPositionX(self.fightLabel,51-self.fightTxt_txt.preferredWidth/2-55) --设置获取时间文本 self.dateTxt_tmp.text = string.format("获得日期:<%s>%s", "#ffffff", TimeUtil:timeConversion(data.collect_time,"yyyy年mm月dd日")) --设置种族文本 self.raceTxt_tmp.text = string.format("种族:<%s>%s", PetConst.PetRace[cfg_data.pet_race].color, PetConst.PetRace[cfg_data.pet_race].str1) local pokemon_diamond_effect = self.model:GetPokemonDiamondEffectRes(self.show_pet_id) local res_data = { father_node = self, transform = self.con_model, fashion_type = FuncOpenModel.TypeId.Pet, figure_id = cfg_data.figure_id, ui_model_type = UIModelCommon.ModelType.BackModel, use_green_screen = true, green_screen_camera_type = 3, -- camera_type:1 主摄像机 2 UI摄像机 3 UIModel摄像机 pokemon_diamond_effect = pokemon_diamond_effect } FuncOpenModel:getInstance():SetModelRes(res_data) end function PetTrainingView:SetData(right_tab_index) self.right_tab_index = right_tab_index if self.is_loaded then self.need_refreshData = false self:UpdateView() else self.need_refreshData = true end end function PetTrainingView:__delete( ) if self.feed_panel then self.feed_panel:DeleteMe() self.feed_panel = nil end if self.evolve_panel then self.evolve_panel:DeleteMe() self.evolve_panel = nil end if self.skill_panel then self.skill_panel:DeleteMe() self.skill_panel = nil end self:ClearUIEffect(self.effectCon) end