PsionicBreakSuccessItem = PsionicBreakSuccessItem or BaseClass(BaseItem) local PsionicBreakSuccessItem = PsionicBreakSuccessItem function PsionicBreakSuccessItem:__init(parent_wnd,prefab_asset,layer_name) self.base_file = "psionic" self.layout_file = "PsionicBreakSuccessItem" self.parent_wnd = parent_wnd self.layer_name = layer_name self.model = PsionicModel:getInstance() self.goods_model = GoodsModel:getInstance() self.cur_star_list = {} self.attr_item_list = {} self:Load() end function PsionicBreakSuccessItem:Load_callback() local nodes = { "bg:img", "armor_item_bg:img", "star_con", "icon_con", "cp_arrow:img", "attr_scroll", "attr_scroll/Viewport/attr_con", "cp_power:tmp", "power:txt", "goods_name:tmp", } self:GetChildren(nodes) self.icon_item = PsionicArmorCircleItem.New(self.icon_con, false, self.layer_name) self.icon_item:SetAnchoredPosition(0, 0) self.icon_item:SetEnableClick(false) self.icon_item:SetItemSize(78, 78) self.icon_item:ChangeCountVisible(false) lua_resM:setImageSprite(self, self.bg_img, "psionicExtra_asset", "ps_break_success_itembg") self:AddEvents() if self.need_refreshData then self:UpdateView() end end function PsionicBreakSuccessItem:AddEvents( ) end function PsionicBreakSuccessItem:SetData( goods_vo, compare_vo ) self.goods_vo = goods_vo self.compare_vo = compare_vo -- 传入了对比属性之后才会有对比表现 if self.is_loaded then self.need_refreshData = false self:UpdateView() else self.need_refreshData = true end end function PsionicBreakSuccessItem:UpdateView( ) -- 基础表现相关 -- -- 是否是穿戴中的圣物装备 self.is_equiped = self.goods_model:GetPsionicEquipGoodsByID(self.goods_vo.goods_id) and true or false self.show_compare = self.compare_vo and true or false lua_resM:setImageSprite(self, self.armor_item_bg_img, "psionicExtra_asset", "ps_break_sc_subbg_" .. self.goods_vo.color) self.icon_item:SetData(self.goods_vo.type_id, nil, nil, self.goods_vo.equip_lv) self.icon_item:SetSlotName(self.goods_vo.subtype) self.goods_name_tmp.text = self.goods_model:getGoodsName(self.goods_vo.type_id, true, true) -- 更新星数 local offset_x = (self.star_con.sizeDelta.x - self.goods_vo.star * 22) / 2 for i = 1, self.goods_vo.star do self.cur_star_list[i] = self.cur_star_list[i] or UiFactory.createChild(self.star_con, UIType.Image2, "star" .. i) SetAnchoredPosition(self.cur_star_list[i].transform, (i-1) * 22 + offset_x, 0) lua_resM:setImageSprite(self, self.cur_star_list[i]:GetComponent("Image"), "psionic_asset", "ps_star_1", true) end -- 装备数据相关 -- -- 加载槽位数据 local slot_data = self.model:GetPsionicSlotData(self.goods_vo.subtype) -- 配置的基础属性 local cfg_attr = self.goods_vo.basic_attrs -- 获取配置等级属性增量 local add_attr_cfg = {} for k, v in ipairs(self.goods_vo.cfg_attrs) do add_attr_cfg[v[1]] = v[3] end -- 配置属性的战斗力 local basic_attr = GetFighting(cfg_attr, self.is_equiped) -- 创建信息节点列表,动态加载属性内容 local data_list = {} data_list[#data_list + 1] = {title = "基础信息"} -- 判断是否需要对比属性 local compare_data = {} local compare_add = {} if self.show_compare then for k, v in pairs(self.compare_vo.basic_attrs) do compare_data[v[1]] = v end for k, v in pairs(self.compare_vo.cfg_attrs) do compare_add[v[1]] = v[3] end end local attr_len = TableSize(cfg_attr) local slot_lv = slot_data.lv for k, v in ipairs(cfg_attr) do -- 是否有可对比的属性 local show_diff = compare_data and compare_data[v[1]] and ((v[2] + add_attr_cfg[v[1]] * slot_lv) - (compare_data[v[1]][2] + compare_add[v[1]] * slot_lv)) or nil data_list[#data_list + 1] = { attr_basic = v, show_diff = show_diff, index = k, is_last = k == attr_len, add_attr = add_attr_cfg[v[1]], slot_lv = slot_lv, } end -- 加载洗练属性 local wash_cfg = self.model:GetPsionicWashCfg(self.goods_vo.subtype, slot_data.grade) local stage_max_lv, max_stage = self.model:GetPsionicSlotStageMaxLevel(slot_data.grade) local wash_attr_list, wash_attr_id_list = {}, {} for k, v in pairs(slot_data.attrs) do wash_attr_list[#wash_attr_list+1] = {[1] = v.attr_id, [2] = v.attr_value} wash_attr_id_list[v.attr_id] = v.attr_value end local wash_power = GetFighting(wash_attr_list, self.is_equiped) -- local wash_attr_num = #wash_attr_list -- data_list[#data_list + 1] = {title = "洗练属性"} -- for k, v in pairs(wash_cfg.maxs) do -- -- 获取目标属性的属性值 -- local attr_id = v[1] -- local cur_val = wash_attr_id_list[attr_id] or 0 -- data_list[#data_list + 1] = { -- cur_val = cur_val, -- attr_wash = v, -- index = k, -- is_last = k >= wash_attr_num -- } -- end -- -- 加载觉醒属性 local awake_power = 0 local awake_cfg = self.model:GetPsionicAwakeCfg(slot_data.pos, slot_data.sec_lv) -- 觉醒等级相关配置 local awake_attr = awake_cfg.attrs -- 当前觉醒等级属性列表 awake_power = GetFighting(awake_attr, self.is_equiped) -- attr_len = TableSize(awake_attr) -- if attr_len > 0 then -- 要有属性才展示 -- data_list[#data_list + 1] = { -- title = "觉醒属性", -- title_extra = { -- has_weared = self.compare_vo, -- 是否穿戴了 -- awake_lv = slot_data.sec_lv, -- equip_color = self.goods_vo.color, -- 这里需要装备品级,不足橙色装备的需要做特殊处理 -- } -- } -- for k, v in ipairs(awake_attr) do -- data_list[#data_list + 1] = { -- skill_data = v, -- index = k, -- is_last = k == attr_len, -- } -- end -- end local total_power = basic_attr + wash_power + awake_power self.power_txt.text = "f" .. total_power if not self.show_compare then local offset_x = (345 - self.power_txt.preferredWidth) * 0.5 + 14 SetAnchoredPositionX(self.power, offset_x) end -- 创建对比节点 local item local height = 0 for k, v in ipairs(data_list) do item = self.attr_item_list[k] if not item then item = PsionicToolTipsItem.New(self.attr_con) self.attr_item_list[k] = item end item:SetAnchoredPosition(0, -height) height = height + item:SetData(v) end SetSizeDeltaY(self.attr_con, height) -- 存在对比数据时,计算战斗力提升相关 local power_width = self.power_txt.preferredWidth * 0.8 local cp_arrow_width, cp_power_width = 0, 0 if self.show_compare then -- 配置属性的战斗力 local compare_basic_attr = GetFighting(self.compare_vo.basic_attrs, self.is_equiped) local off_power = basic_attr - compare_basic_attr local higher = off_power > 0 self.cp_arrow_img.enabled = true self.cp_power_tmp.text = math.abs(off_power) cp_arrow_width = 29 cp_power_width = self.cp_power_tmp.preferredWidth lua_resM:setImageSprite(self, self.cp_arrow_img, "common_asset", higher and "tyui_Arrow_3" or "tyui_Arrow_4", true) SetTMPSharedMaterial(self.cp_power_tmp, higher and ShaderTools.TMPSharedMaterialType.HKYTW7OutlineGreenUp or ShaderTools.TMPSharedMaterialType.HKYTW7OutlineRedDown) end local total_len = power_width + cp_arrow_width + cp_power_width local offset_x = (280 - total_len) * 0.5 SetAnchoredPositionX(self.power, offset_x + 14) SetAnchoredPositionX(self.cp_arrow, offset_x + power_width + 15) SetAnchoredPositionX(self.cp_power, offset_x + power_width + cp_arrow_width + 16) end function PsionicBreakSuccessItem:__delete( ) if self.icon_item then self.icon_item:DeleteMe() self.icon_item = nil end for i,v in ipairs(self.attr_item_list) do v:DeleteMe() v = nil end self.attr_item_list = {} end