PetAwakeView = PetAwakeView or BaseClass(BaseItem) local PetAwakeView = PetAwakeView function PetAwakeView:__init() self.base_file = "pet" self.layout_file = "PetAwakeView" self.model = PetModel:getInstance() self.skill_item_list = {} self.full_screen = true self.ani_right = 400 self.ani_left = -200 self:Load() end function PetAwakeView:Load_callback() self.nodes = { "con_model", "left/ScrollView", "left/ScrollView/Viewport/Content", "mid/raceIcon:img", "mid/name:tmp", "mid/awakeIcon:obj", "mid/tip1Before:tmp", "mid/tip1After:tmp", "mid/tip2:tmp", "right/awakeBtn:obj:img", "right/awakeBtn/awakeText:tmp", "right/conSkill", "right/conCost", "right/attrScrollview", "right/attrScrollview/Viewport/attrContent", "right/fightNum:txt", "right/costNum:tmp", "mid/tipStar", "left/diGray/diArrow:img", "left/topGray/topArrow:img", "right/rightBg:img", "right/fightLabel", "mid/effectCon", } self:GetChildren(self.nodes) lua_resM:setImageSprite(self, self.rightBg_img, "petExtra_asset","pet_awake_right_bg") self.tip2_tmp.text = "觉醒后技能会强化同时获得<#fdffc2>稀绝百分比<#fdffc2>属性!" --创建消耗道具 self.cost_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.conCost) self.cost_item:SetItemSize(78,78) SetAnchoredPositionY(self.effectCon,-175) self:AddEvents() if self.need_refreshData then self:UpdateView() end end function PetAwakeView:AddEvents( ) local on_click = function ( click_obj ) if self.awakeBtn_obj == click_obj then--觉醒 self.model:Fire(PetConst.REQUEST_CCMD_EVENT,16316,self.pet_id) end end AddClickEvent(self.awakeBtn_obj, on_click) --刷新觉醒碎片 local update_progress = function(goods_sub_type) if goods_sub_type == 4 then self:UpdateCostItems() end end self:BindEvent(self.model, PetConst.UPDATE_PET_GOODS_NUM, update_progress) local update_view = function() local no_need_show_model_again = true self:UpdatePetBaseInfo(no_need_show_model_again) self:UpdatePetAwakeInfo() self:AddUIEffect("ui_jinjie", self.effectCon, "UI", nil, 1, false, nil, false) end self:BindEvent(self.model, PetConst.PET_AWAKE_SUCCESS, update_view) local function on_ans_update_red_dot(tab_id) if not self.data or self.data.pet_id == 0 or not self.is_loaded then return end if tab_id == PetConst.RED_DOT_TYPE.Awake then self:UpdateCostItems() end end self:BindEvent(self.model, PetConst.ANS_UPDATE_RED_DOT, on_ans_update_red_dot) end function PetAwakeView:UpdateView( ) self:UpdatePetList() end function PetAwakeView:UpdatePetList( ) local pet_list = self.model:GetPetListAfterSortFight() local function click_callback(pet_id) self.pet_id = pet_id self.pet_data = self.model:GetPetListById(pet_id) self.pet_cfg = self.model:GetPetCfg(pet_id,self.pet_data.pet_star) self.pet_awake_cfg = self.model:GetPetAwakeCfg(self.pet_id) self:UpdatePetBaseInfo() self:UpdatePetAwakeInfo() 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 = PetAwakeItem, -- item_width = 125, item_height = 125, -- space_x = -5, space_y = 4, start_x = 5, start_y = -2.5, scroll_view = self.ScrollView, create_frequency = 0.01, -- reuse_item_num = 100, 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, on_scroll = function() self:SetLeftArrowGray(#pet_list) end, } self.item_list_com:UpdateItems(info) self.item_list_com:IterateItems(function( item, i ) item:OnClick(1)--选中第一个 end) self:SetLeftArrowGray(#pet_list) end function PetAwakeView:UpdatePetBaseInfo(no_need_show_model_again) self.name_tmp.text = Trim(self.pet_cfg.pet_name) lua_resM:setImageSprite(self, self.raceIcon_img, "pet_asset", "pet_race_"..self.pet_cfg.pet_race,true) SetAnchoredPositionX(self.raceIcon,15-self.name_tmp.preferredWidth/2-20) self.awakeIcon_obj:SetActive(self.pet_data.is_awaken == 1) SetAnchoredPositionX(self.awakeIcon, 15+self.name_tmp.preferredWidth/2+20) local pokemon_diamond_effect = self.model:GetPokemonDiamondEffectRes(self.pet_id) if not no_need_show_model_again then local res_data = { father_node = self, transform = self.con_model, fashion_type = FuncOpenModel.TypeId.Pet, figure_id = self.pet_cfg.figure_id, ui_model_type = UIModelCommon.ModelType.BackModel, pokemon_diamond_effect = pokemon_diamond_effect, } FuncOpenModel:getInstance():SetModelRes(res_data) end local enough_star = self.pet_data.pet_star >= self.pet_awake_cfg.need_star if enough_star then self.tip1Before_tmp.text = string.format("<#A9C1E1>培养至 <#fdffc2>%s",self.pet_awake_cfg.need_star) self.tip1After_tmp.text = "以上宠物可<#fdffc2>觉醒!" else self.tip1Before_tmp.text = string.format("<#ff203a>培养至 %s",self.pet_awake_cfg.need_star) self.tip1After_tmp.text = "<#ff203a>以上宠物可觉醒!" end SetAnchoredPositionX(self.tipStar,self.tip1Before_tmp.preferredWidth+89) SetAnchoredPositionX(self.tip1After,self.tip1Before_tmp.preferredWidth+89+21) end function PetAwakeView:UpdatePetAwakeInfo( ) self.fightNum_txt.text = self.model:GetPetFightById(self.pet_id)--改用前端计算战力 SetAnchoredPositionX(self.fightLabel,115-self.fightNum_txt.preferredWidth/2-55) local attr_cfg = stringtotable(self.pet_awake_cfg.add_attr) if not self.attr_list_com then self.attr_list_com = self:AddUIComponent(UI.ItemListCreator) end local info = { data_list = attr_cfg, item_con = self.attrContent, item_class = PetAwakeAttrItem, -- item_width = 125, item_height = 36, -- space_x = -5, -- space_y = 4, start_x = 17, start_y = -14, scroll_view = self.attrScrollview, create_frequency = 0.01, on_update_item = function(item, i, v) item:SetData(v) end, } self.attr_list_com:UpdateItems(info) local skill_table = {} local skill_data = stringtotable(self.pet_awake_cfg.skill_list) for i,v in ipairs(skill_data) do local origin_data = DeepCopy(self.model:GetPetSkillCfg(self.pet_id,i,true)) origin_data.skill_talent_id = v -- local temp = { -- skill_talent_id = v, -- } table.insert(skill_table,origin_data) end -- for i=1,3 do -- 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 = PetCollectSkillItem.New(self.conSkill) self.skill_item_list[i] = item end item:SetVisible(true) item:SetData(v,self.pet_data.pet_id,2) item:SetPosition(106*(i-1)+18.5,2) end self:UpdateCostItems() end function PetAwakeView:SetLeftArrowGray(list_num) local contentSize = GetSizeDeltaY(self.Content) local _, contenPos = GetAnchoredPosition(self.Content) if list_num <= 5 then SetImageGray(self.topArrow_img, true) SetImageGray(self.diArrow_img, true) return end if contenPos <= 40 then SetImageGray(self.topArrow_img, true) SetImageGray(self.diArrow_img, false) elseif contenPos > 40 and contenPos < contentSize-544-20 then SetImageGray(self.topArrow_img, false) SetImageGray(self.diArrow_img, false) elseif contenPos >= contentSize-544-20 then SetImageGray(self.topArrow_img, false) SetImageGray(self.diArrow_img, true) end end function PetAwakeView:UpdateCostItems( ) local cost_data = stringtotable(self.pet_awake_cfg.cost_material) local goods_type_id = cost_data[1][2] self.cost_item:SetData(goods_type_id) local color = GoodsModel:getInstance():GetGoodsColor(goods_type_id) -- self.costName_txt.text = HtmlColorTxt(GoodsModel:getInstance():getGoodsName(goods_type_id),color) local goods_name = GoodsModel:getInstance():getGoodsName(goods_type_id) if self.pet_data.is_awaken == 1 then self.costNum_tmp.text = "<#2CF86F>已觉醒" self.can_awake = false self.awakeBtn_obj:SetActive(false) else local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(goods_type_id) if goods_num < cost_data[1][3] then self.costNum_tmp.text = string.format("<#fdffc2>%s%s/%s",goods_name,goods_num,cost_data[1][3]) else self.costNum_tmp.text = string.format("<#fdffc2>%s%s/%s",goods_name,goods_num,cost_data[1][3]) end local enough_star = self.pet_data.pet_star >= self.pet_awake_cfg.need_star self.can_awake = goods_num >= cost_data[1][3] and enough_star SetImageGray(self.awakeBtn_img, not self.can_awake) if self.can_awake then SetTMPSharedMaterial(self.awakeText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn) else SetTMPSharedMaterial(self.awakeText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn) end self.awakeBtn_obj:SetActive(true) end end function PetAwakeView:SetData( data ) self.data = data if self.is_loaded then self.need_refreshData = false self:UpdateView() else self.need_refreshData = true end end function PetAwakeView:__delete( ) for i, v in ipairs(self.skill_item_list) do v:DeleteMe() end self.skill_item_list = {} if self.cost_item then UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem,self.cost_item) self.cost_item = nil end self:ClearUIEffect(self.effectCon) end