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
|