PetEvolveSuccessView = PetEvolveSuccessView or BaseClass(BaseView) local PetEvolveSuccessView = PetEvolveSuccessView function PetEvolveSuccessView:__init() self.base_file = "pet" self.layout_file = "PetEvolveSuccessView" self.layer_name = "Activity" self.destroy_imm = true self.use_background = true self.change_scene_close = true self.hide_maincancas = true -- self.append_to_ctl_queue = true --是否要添加进界面堆栈 self.need_show_money = false --是否要显示顶部的金钱栏 self.is_set_zdepth = true self.click_bg_toClose = false self.close_fog = true self.click_bg_toClose = true self.blur_activity_bg = true -- self.use_show_anim = true -- self.use_hide_anim = true self.model = PetModel:getInstance() self.skill_item_list = {} self.load_callback = function () self:LoadSuccess() self:AddEvent() end self.open_callback = function ( ) self:OpenSuccess() end self.destroy_callback = function ( ) self:DestroySuccess() end end function PetEvolveSuccessView:Open(pet_id,action_type) self.pet_id = pet_id self.action_type = action_type BaseView.Open(self) end function PetEvolveSuccessView:LoadSuccess() local nodes = { "raceIcon:img", "modelCon", "attr_ScrollView/Viewport/Content","attr_ScrollView", "skillCon", "name:tmp", "tips:tmp", "fightCon/fightTxt:txt","fightCon:obj", "fightCon/fightUpTxt:tmp","fightCon/fightLabel", "fightCon/arrow:obj", "starCon1:obj", "starCon2:obj", "title:img", "arrow2:obj", "closeTimer:tmp", "rightBg2:raw:obj", "rightBg1:raw:obj", } self:GetChildren(nodes) lua_resM:setOutsideRawImage(self,self.rightBg1_raw,GameResPath.GetViewBigBg("pet_evolve_succese_right_bg_1")) lua_resM:setOutsideRawImage(self,self.rightBg2_raw,GameResPath.GetViewBigBg("pet_evolve_succese_right_bg_2")) local close_callback = function() self:Close() end self.tabWindowComponent = UITabWindow.New(self.transform, nil, nil, close_callback, self.background_wnd, self.transform,UITabWindow.SizeSmallNoTab,nil,nil,nil) self.tabWindowComponent:SetBackgroundRes("pet_evolve_succese_bg") if self.action_type == 1 then self.tabWindowComponent:SetTitleText("激活成功") lua_resM:setImageSprite(self, self.title_img, "petExtra_asset","pet_evolve_success_title_1") else self.tabWindowComponent:SetTitleText("进化成功") lua_resM:setImageSprite(self, self.title_img, "petExtra_asset","pet_evolve_success_title_2") end -- local function bg_back_func( ... ) -- if self.background_wnd and self.background_wnd:GetComponent("RawImageExtend") then -- self:MoveUIToBack(self.background_wnd:GetComponent("RawImageExtend")) -- end -- self:MoveUIToBack(self.tabWindowComponent.win_bg) -- end -- if self.background_wnd then -- bg_back_func() -- else -- self.bg_back_func = bg_back_func -- end self.star1 = {}--星级 for i=1,5 do self.star1[i] = self:GetChild("starCon1/star"..i):GetComponent("Image") end self.star2 = {}--星级 for i=1,5 do self.star2[i] = self:GetChild("starCon2/star"..i):GetComponent("Image") end end function PetEvolveSuccessView:AddEvent() end function PetEvolveSuccessView:OpenSuccess() self:UpdateView() end function PetEvolveSuccessView:UpdateView() local pet_data = self.model:GetPetListById(self.pet_id) local pet_cfg = self.model:GetPetCfg(self.pet_id,pet_data.pet_star) --阶段和星级 if self.action_type == 1 then--激活 self.starCon1_obj:SetActive(false) self.starCon2_obj:SetActive(false) self.arrow2_obj:SetActive(false) self.rightBg1_obj:SetActive(true) self.rightBg2_obj:SetActive(false) SetAnchoredPositionY(self.fightCon,133) -- local max_star = self.model:GetMaxStarInStage(self.pet_id,pet_data.pet_star) -- lua_resM:setImageSprite(self, self.star1[1], "pet_asset", PetConst.stage_message[1].star_res,true) -- self.star1[1].gameObject:SetActive(true) -- self:AddUIEffect("ui_jinjiestar", self.star1[1].transform, "Activity", nil, 1, false) -- for i=2,max_star do -- self.star1[i].gameObject:SetActive(false) -- end else self.starCon1_obj:SetActive(true) self.starCon2_obj:SetActive(true) self.arrow2_obj:SetActive(true) self.rightBg1_obj:SetActive(false) self.rightBg2_obj:SetActive(true) SetAnchoredPositionY(self.fightCon,126) local max_star = self.model:GetMaxStarInStage(self.pet_id,pet_data.pet_star) local show_star = self.model:GetNowShowPetStar(pet_data.pet_star) for i=1,show_star do lua_resM:setImageSprite(self, self.star2[i], "pet_asset", PetConst.stage_message[pet_data.pet_stage].star_res,true) self.star2[i].gameObject:SetActive(true) end for i=show_star+1,max_star do self.star2[i].gameObject:SetActive(false) end self:AddUIEffect("ui_jinjiestar", self.star2[show_star].transform, "Activity", nil, 1, false) local max_star_next = self.model:GetMaxStarInStage(self.pet_id,pet_data.pet_star-1) local show_star_next = self.model:GetNowShowPetStar(pet_data.pet_star-1) local stage_next = math.ceil((pet_data.pet_star-1-0.5)/5) for i=1,show_star_next do lua_resM:setImageSprite(self, self.star1[i], "pet_asset", PetConst.stage_message[stage_next].star_res,true) self.star1[i].gameObject:SetActive(true) end for i=show_star_next+1,max_star_next do self.star1[i].gameObject:SetActive(false) end end --战力 local old_data = self.model:GetPetOldDataById(pet_data.pet_id)--宠物进化之前的旧数据 self.fightTxt_txt.text = self.model:GetPetFightById(pet_data.pet_id) SetAnchoredPositionX(self.fightLabel,-25-self.fightTxt_txt.preferredWidth/2-35) local up_num if not old_data then up_num = self.model:GetPetFightById(pet_data.pet_id) else up_num = self.model:GetPetFightById(pet_data.pet_id) - self.model:GetPetFightByData(old_data) end self.fightUpTxt_tmp.text = up_num --名字 self.name_tmp.text = Trim(pet_cfg.pet_name) SetAnchoredPositionX(self.raceIcon,-169-self.name_tmp.preferredWidth/2-20) --种族 lua_resM:setImageSprite(self, self.raceIcon_img, "pet_asset", "pet_race_"..pet_cfg.pet_race,true) --进化提示 if pet_data.pet_stage < 3 then local need_star_1 = self.model:GetStarCanUnlockFigure(self.pet_id,2) local need_star_2 = self.model:GetStarCanUnlockFigure(self.pet_id,3) local evolve_times = pet_data.pet_stage == 1 and need_star_1-pet_data.pet_star or need_star_2-pet_data.pet_star self.tips_tmp.text = string.format("再进化<#f3fcff>%s次可<#fdffc2>解锁新形态", evolve_times) elseif pet_data.pet_stage == 3 then self.tips_tmp.text = "当前已是最高形态 " end --属性提升栏 self:UpdateAttr(pet_data,pet_cfg) --技能栏 self:UpdateSkillCon() local res_data = { layer_name = "Activity", father_node = self, transform = self.modelCon, fashion_type = FuncOpenModel.TypeId.Pet, figure_id = pet_cfg.figure_id, position = Vector3(0,-160,-500), ui_model_type = UIModelCommon.ModelType.Model, } FuncOpenModel:getInstance():SetModelRes(res_data) self:UpdateTime() end --刷新属性值 function PetEvolveSuccessView:UpdateAttr(data,cfg_data) --获取计算好的属性值 local diamond_data = self.model:GetPetDiamondDataById(data.pet_id)--取出宝石所加的属性一并计算 local awake_cfg = nil if data.is_awaken == 1 then awake_cfg = self.model:GetPetAwakeCfg(data.pet_id) end local now_attr_list = self.model:GetPetAttrList(data.pet_lv,stringtotable(cfg_data.attr_list),diamond_data,awake_cfg,data.pet_star,data.pet_id) if self.action_type == 1 then--刚激活 self:UpdateAttrScrollView(now_attr_list,true) else local old_data = self.model:GetPetOldDataById(data.pet_id)--宠物进化之前的旧数据 local old_cfg = self.model:GetPetCfg(old_data.pet_id, old_data.pet_star) local old_attr_list = self.model:GetPetAttrList(old_data.pet_lv, stringtotable(old_cfg.attr_list), diamond_data,awake_cfg,old_data.pet_star,old_data.pet_id) local final_attr_list = self.model:MergeAttrList2(now_attr_list, old_attr_list) self:UpdateAttrScrollView(final_attr_list, false) end end --刷新属性栏scrollview function PetEvolveSuccessView:UpdateAttrScrollView(attr_list,is_active_now) -- --解决高级属性名字过长导致文字重叠的问题:普通属性一行摆两个,高级属性一行摆一个 -- --思路:ItemListCreator不能自由控制一行摆几个,因此在高级属性后面插入一个空属性隐藏显示,模拟出一行只摆一个属性的效果 -- --step1:排序属性列表,把高级属性排后面 -- local _sort = function( a,b ) -- if a[1] < b[1] then -- return true -- end -- end -- table.sort( attr_list, _sort ) -- --step2:找到普通属性和高级属性的分界点 -- local divide_index = 0--分界点下标 -- local max_index = #attr_list--属性个数 -- for i,v in ipairs(attr_list) do -- --找到高级属性,标记分界点 -- if WordManager:GetAttrIsSpecial(v[1]) then -- divide_index = i-1 -- break -- end -- end -- --step3:分情况操作 -- --偶数个普通属性时,直接对后面的高级属性依次插入空属性即可 -- --奇数个普通属性时,先在最后一个普通属性后插入空属性,让高级属性掉到下一行位置去 -- if divide_index ~= 0 then -- if divide_index %2 == 0 then -- for i=1,max_index-divide_index do -- table.insert(attr_list,divide_index+2*i,{0}) -- end -- else -- table.insert(attr_list,divide_index+1,{0}) -- for i=1,max_index-divide_index do -- table.insert(attr_list,divide_index+2*i+1,{0}) -- end -- end -- end ------------------ 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.Content, item_class = PetAttrItem, item_width = 385, item_height = 47, -- space_x = -7, space_y = -5, start_x = 1, start_y = 2, scroll_view = self.attr_ScrollView, create_frequency = 0.01, on_update_item = function(item, i, v) item:SetData(i,v,is_active_now,false,true) end, } self.attr_list_com:UpdateItems(info) end --技能展示 function PetEvolveSuccessView:UpdateSkillCon( ) local pet_data = self.model:GetPetListById(self.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 local skill_table = {} for i=1,4 do local data = self.model:GetPetSkillCfg(self.pet_id,i,pet_data.is_awaken==1)--通过id和槽位获取技能配置 if data then table.insert(skill_table,data) end end 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 = PetSkillItem.New(self.skillCon) self.skill_item_list[i] = item end item:SetVisible(true) item:SetData(v,self.pet_id,3) item:SetPosition(2+83*(i-1),-1) end end function PetEvolveSuccessView:DestroySuccess( ) for i, v in ipairs(self.skill_item_list) do v:DeleteMe() end self.skill_item_list = {} if self.tabWindowComponent then self.tabWindowComponent:DeleteMe() self.tabWindowComponent = nil end if self.timer_id then GlobalTimerQuest:CancelQuest(self.timer_id) self.timer_id = nil end for i=1,5 do self:ClearUIEffect(self.star1[i].transform) self:ClearUIEffect(self.star2[i].transform) end --特定宠物激活成功要弹出道具提示 if self.action_type == 1 and self.pet_id == HelpType.ACTIVITY_PET_ID then UIToolTipMgr:getInstance():AppendGoodsTips(HelpType.ACTIVITY_PET_GOODS_ID, nil, nil,nil,nil, {},nil,true) end end function PetEvolveSuccessView:UpdateTime( ) local time = 10 local function countDown() if self._use_delete_method then return end time = time - 1 if time >= 0 then self.closeTimer_tmp.text = HtmlColorTxt(time, ColorUtil.GREEN_TIPS).." 秒后自动关闭界面" else self.closeTimer_tmp.text = "" self:Close() end end countDown() self.timer_id = GlobalTimerQuest:AddPeriodQuest(countDown,1) end