PsionicToolTips = PsionicToolTips or BaseClass(BaseView) local PsionicToolTips = PsionicToolTips local SetAnchoredPositionX = SetAnchoredPositionX function PsionicToolTips:__init() self.base_file = "common" self.layout_file = "PsionicToolTips" self.layer_name = "Top" self.destroy_imm = true self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置 self.change_scene_close = true self.click_bg_toClose = true self.is_set_zdepth = true self.blur_activity_bg = true self.use_show_anim = true self.use_hide_anim = true self:AddPreLoadList("common", {"PsionicToolTipsItem"}) self.cur_star_list = {} self.model = PsionicModel:getInstance() self.goods_model = GoodsModel:getInstance() self.btn_list = {} self.attr_item_list = {} self.load_callback = function () self:LoadSuccess() self:AddEvent() end self.open_callback = function ( ) self:UpdateView() end self.destroy_callback = function ( ) self:DestroySuccess() end end function PsionicToolTips:Open(psionic_data, flag, show_compare) self.psionic_data = psionic_data self.flag = flag self.show_compare = show_compare == nil and true or show_compare BaseView.Open(self) end function PsionicToolTips:LoadSuccess() local nodes = { "con", "con/bg:raw", "con/power:txt", -- 圣物装备战斗力 "con/cp_arrow:img", "con/cp_power:tmp", "con/goods_name:tmp", -- 装备名 "con/icon_con", -- 图标容器 "con/equiped:obj", -- 穿戴中标识 "con/attr_scroll", "con/attr_scroll/Viewport/attr_con", -- 属性容器 "con/star_con", -- 星数节点 "con/armor_item_bg:img", -- 操作按钮部分 -- "con/bg/btn_con/unload_btn:obj", -- 卸下 "con/bg/btn_con/wear_btn:obj", "con/bg/btn_con/wear_btn/wear_btn_red:obj", -- 穿戴 "con/bg/btn_con/replace_btn:obj", "con/bg/btn_con/replace_btn/replace_btn_red:obj", -- 替换 "con/bg/btn_con/strength_btn:obj", "con/bg/btn_con/strength_btn/strength_btn_red:obj", -- 升品 / 强化 "con/bg/btn_con/getway_btn:obj", -- 获取途径 "con/bg/btn_con/delete_btn:obj", -- 分解 "con/bg/btn_con/refact_btn:obj", "con/bg/btn_con/refact_btn/refact_btn_red:obj", -- 对比节点 "compare_conta:obj", } self:GetChildren(nodes) lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("ps_tool_tips_bg"), false) self.btn_list = {self.strength_btn, self.wear_btn, self.replace_btn, self.getway_btn, self.delete_btn} self.icon_item = PsionicArmorCircleItem.New(self.icon_con, false, self.layer_name) self.icon_item:SetEnableClick(false) self.icon_item:SetItemSize(78, 78) self.icon_item:ChangeCountVisible(false) self:AddToStageHandler() end function PsionicToolTips:AddEvent() local function onclick(target) if target == self.strength_btn_obj then -- 强化 -- 这里处理为跳转到进阶页签,并自动选中当前装备 local other_args = {slot = self.psionic_data.subtype} self.model:Fire(PsionicConst.OPEN_MAIN_VIEW, true, PsionicConst.TabId.PAdvance, other_args) self:Close() elseif target == self.wear_btn_obj or target == self.replace_btn_obj then --穿戴/替换装备 local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_PSIONIC,4) if helpVo then GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,helpVo) end if self.psionic_data and self.psionic_data.goods_id then self.goods_model.has_first_updated_psionic_effect_red = true -- 手动穿戴装备的时候就不需要登录更新的那个了 self.model:Fire(PsionicConst.REQUEST_CCMD_EVENT, 13903, self.psionic_data.goods_id) self:Close() end elseif target == self.getway_btn_obj then -- 获取途径 local basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(self.psionic_data.type_id) local str = basic.getway_url local getway = stringtotable(str) -- print("huangcong:EquipToolTips [start:94] getway:", getway) -- PrintTable(getway) -- print("huangcong:EquipToolTips [end]") for i, v in ipairs(getway) do local cfg = OpenFun.GetFunCfg(v[1], v[2]) if cfg then OpenFun.Open(v[1], v[2]) else print("=================== can't find config, fun id is ", v[1], v[2]) end end elseif target == self.refact_btn_obj then -- 洗练 -- 注意这里选中的装备是作为材料装备的,要放在后面 self.model:Fire(PsionicConst.OPEN_MAIN_VIEW, true, PsionicConst.TabId.PWash, {target_uid = self.psionic_data.goods_id}) self:Close() elseif target == self.delete_btn_obj then -- 分解 -- 这里处理为打开装备分解界面,并自动选中当前装备 self.model:Fire(PsionicConst.OPEN_RESOLVE_VIEW, true, self.psionic_data and self.psionic_data.goods_id) self:Close() end end -- AddClickEvent(self.unload_btn_obj, onclick) AddClickEvent(self.strength_btn_obj, onclick) AddClickEvent(self.wear_btn_obj, onclick) AddClickEvent(self.replace_btn_obj, onclick) AddClickEvent(self.getway_btn_obj, onclick) AddClickEvent(self.delete_btn_obj, onclick) AddClickEvent(self.refact_btn_obj, onclick) local function onGuideTrigger() self:AddToStageHandler() end self:BindEvent(GlobalEventSystem, EventName.TRIGGER_GUIDE_TYPE, onGuideTrigger) end function PsionicToolTips:UpdateView(psionic_data) self.psionic_data = psionic_data or self.psionic_data self:SetData() end function PsionicToolTips:SetData() if not self.psionic_data then return end self.con.gameObject:SetActive(true) -- 配置变动,星数改color self.psionic_star = self.psionic_data.star self.is_bag = self.goods_model:GetPsionicBagGoodsByID(self.psionic_data.goods_id) and true or false self.is_equiped = self.goods_model:GetPsionicEquipGoodsByID(self.psionic_data.goods_id) and true or false self.equiped_obj:SetActive(self.is_equiped) self.cur_wear_ps_equip = self.goods_model:GetPsionicEquipBySlot(self.psionic_data.subtype) -- 查看已穿戴的装备是不可以展示对比 self.show_compare = self.cur_wear_ps_equip and self.show_compare and not self.is_equiped -- self.slot_flag_tmp.text = PsionicConst.EquipSlotName[slot] self:UpdateBasicInfo() self:UpdateMainInfo() self:UpdateBtns() end -- 加载基础数据 function PsionicToolTips:UpdateBasicInfo( ) self.icon_item:SetData(self.psionic_data.type_id, nil, nil, self.psionic_data.equip_lv) self.icon_item:SetSlotName(self.psionic_data.subtype) self.goods_name_tmp.text = self.goods_model:getGoodsName(self.psionic_data.type_id, true, true) lua_resM:setImageSprite(self, self.armor_item_bg_img, "psionicExtra_asset", "ps_armor_bg_" .. self.psionic_data.color) -- 更新星数 local offset_x = (self.star_con.sizeDelta.x - self.psionic_star * 22) / 2 for i = 1, self.psionic_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) -- 36 + 0 lua_resM:setImageSprite(self, self.cur_star_list[i]:GetComponent("Image"), "common_asset", "ps_star_1", true) end end -- 加载主要信息 function PsionicToolTips:UpdateMainInfo( ) -- 加载槽位数据 local slot_data = self.model:GetPsionicSlotData(self.psionic_data.subtype) -- 配置的基础属性 local cfg_attr = self.psionic_data.basic_attrs -- 获取配置等级属性增量 local add_attr_cfg = {} for k, v in ipairs(self.psionic_data.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.cur_wear_ps_equip and self.show_compare then for k, v in pairs(self.cur_wear_ps_equip.basic_attrs) do compare_data[v[1]] = v end for k, v in pairs(self.cur_wear_ps_equip.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.psionic_data.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.cur_wear_ps_equip, -- 是否穿戴了 awake_lv = slot_data.sec_lv, equip_color = self.psionic_data.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 self:UpdateDetailItem(data_list) self:UpdateCompareData(cfg_attr, total_power) end -- 更新装备对比数据 compare_attrs:当前装备的基础属性 total_power:当前查看装备的总战力 function PsionicToolTips:UpdateCompareData(compare_attrs, total_power) self.compare_conta_obj:SetActive(self.show_compare) if self.show_compare then -- 显示对比,则需要右移 SetAnchoredPositionX(self.con, 535) if not self.ps_tooltip_compare then self.ps_tooltip_compare = PsionicToolTipsCompare.New(self.compare_conta, nil, self.layer_name) end -- 设置回调,对比战斗力差别,并调整节点位置 local power_callback = function(compare_power) if self._use_delete_method then return end local off_power = total_power - compare_power local power_width = self.power_txt.preferredWidth * 0.8 local cp_arrow_width, cp_power_width = 0, 0 if off_power ~= 0 then -- 有战力差 local higher = off_power > 0 cp_arrow_width = 29 self.cp_arrow_img.enabled = true self.cp_power_tmp.text = math.abs(off_power) 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 = (345 - total_len) * 0.5 SetAnchoredPositionX(self.power, offset_x + 14) -- SetAnchoredPositionX(self.cp_arrow, offset_x + power_width - 20) SetAnchoredPositionX(self.cp_arrow, offset_x + power_width + 15) -- SetAnchoredPositionX(self.cp_power, offset_x + power_width + cp_arrow_width - 22) SetAnchoredPositionX(self.cp_power, offset_x + power_width + cp_arrow_width + 16) end self.ps_tooltip_compare:SetData(self.cur_wear_ps_equip, power_callback) else SetAnchoredPositionX(self.con, 461) end end -- 根据组合的表生成属性节点 function PsionicToolTips:UpdateDetailItem(data_list) 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 bg_height = 200 + height -- bg_height = bg_height < 687 and bg_height or 687 -- SetSizeDeltaY(self.bg,bg_height) -- SetSizeDeltaY(self.attr_scroll, bg_height - 190) end --按钮显示 function PsionicToolTips:UpdateBtns() for i,v in ipairs(self.btn_list) do if v.gameObject.activeSelf then v.gameObject:SetActive(false) end end local btn_list = {} if self.flag == PsionicConst.ArmorItemFlag.Show or self.flag == PsionicConst.ArmorItemFlag.Advance or self.flag == PsionicConst.ArmorItemFlag.AdvanceRefact then -- 单纯展示和进阶中的装备节点不展示操作按钮 return end -- print("Saber:PsionicToolTips [217] is_bag: ",is_bag) if self.is_bag then --背包中的装备 if self.flag == PsionicConst.ArmorItemFlag.Bag then -- 背包中查看未穿戴的装备 if self.cur_wear_ps_equip then -- 存在当前栏位装备的话就显示替换 table.insert(btn_list, self.replace_btn) -- 可替换红点 local replace_red = self.model:IsPsionicEquipPowerUpOrNot(self.psionic_data.goods_id) self.replace_btn_red_obj:SetActive(replace_red) else table.insert(btn_list, self.wear_btn) -- 可装备红点 local equip_red = self.model:GetPsionicEquipSlotRed(self.psionic_data.subtype) self.wear_btn_red_obj:SetActive(equip_red) end -- table.insert(btn_list, self.getway_btn) table.insert(btn_list, self.delete_btn) end elseif self.is_equiped then --已经穿上的装备 table.insert(btn_list, self.strength_btn) table.insert(btn_list, self.refact_btn) -- 进阶红点 self.strength_btn_red_obj:SetActive(self.model:GetPsionicAdvanceRed(self.psionic_data.subtype)) -- 洗练红点 self.refact_btn_red_obj:SetActive(self.model:GetPsionicWashSlotRed(self.psionic_data.subtype)) end for i, v in ipairs(btn_list) do v.gameObject:SetActive(true) end end function PsionicToolTips:DestroySuccess( ) 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 = {} if self.ps_tooltip_compare then self.ps_tooltip_compare:DeleteMe() self.ps_tooltip_compare = nil end end function PsionicToolTips:AddToStageHandler() local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_PSIONIC,4) if not helpVo then return end local help_type = helpVo.help_type local step = helpVo.step local button = false if (help_type == HelpType.TYPE_PSIONIC) and step == 4 then button = self.wear_btn_obj end if button then local function call_back() end GlobalEventSystem:Fire(EventName.OPEN_GUIDE_PROMPT_VIEW, button.transform, self.transform, call_back, helpVo, self.layout_file, self.layer_name) end end