源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

411 lines
17 KiB

  1. PsionicToolTips = PsionicToolTips or BaseClass(BaseView)
  2. local PsionicToolTips = PsionicToolTips
  3. local SetAnchoredPositionX = SetAnchoredPositionX
  4. function PsionicToolTips:__init()
  5. self.base_file = "common"
  6. self.layout_file = "PsionicToolTips"
  7. self.layer_name = "Top"
  8. self.destroy_imm = true
  9. self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置
  10. self.change_scene_close = true
  11. self.click_bg_toClose = true
  12. self.is_set_zdepth = true
  13. self.blur_activity_bg = true
  14. self.use_show_anim = true
  15. self.use_hide_anim = true
  16. self:AddPreLoadList("common", {"PsionicToolTipsItem"})
  17. self.cur_star_list = {}
  18. self.model = PsionicModel:getInstance()
  19. self.goods_model = GoodsModel:getInstance()
  20. self.btn_list = {}
  21. self.attr_item_list = {}
  22. self.load_callback = function ()
  23. self:LoadSuccess()
  24. self:AddEvent()
  25. end
  26. self.open_callback = function ( )
  27. self:UpdateView()
  28. end
  29. self.destroy_callback = function ( )
  30. self:DestroySuccess()
  31. end
  32. end
  33. function PsionicToolTips:Open(psionic_data, flag, show_compare)
  34. self.psionic_data = psionic_data
  35. self.flag = flag
  36. self.show_compare = show_compare == nil and true or show_compare
  37. BaseView.Open(self)
  38. end
  39. function PsionicToolTips:LoadSuccess()
  40. local nodes = {
  41. "con",
  42. "con/bg:raw",
  43. "con/power:txt", -- 圣物装备战斗力
  44. "con/cp_arrow:img", "con/cp_power:tmp",
  45. "con/goods_name:tmp", -- 装备名
  46. "con/icon_con", -- 图标容器
  47. "con/equiped:obj", -- 穿戴中标识
  48. "con/attr_scroll", "con/attr_scroll/Viewport/attr_con", -- 属性容器
  49. "con/star_con", -- 星数节点
  50. "con/armor_item_bg:img",
  51. -- 操作按钮部分
  52. -- "con/bg/btn_con/unload_btn:obj", -- 卸下
  53. "con/bg/btn_con/wear_btn:obj", "con/bg/btn_con/wear_btn/wear_btn_red:obj", -- 穿戴
  54. "con/bg/btn_con/replace_btn:obj", "con/bg/btn_con/replace_btn/replace_btn_red:obj", -- 替换
  55. "con/bg/btn_con/strength_btn:obj", "con/bg/btn_con/strength_btn/strength_btn_red:obj", -- 升品 / 强化
  56. "con/bg/btn_con/getway_btn:obj", -- 获取途径
  57. "con/bg/btn_con/delete_btn:obj", -- 分解
  58. "con/bg/btn_con/refact_btn:obj", "con/bg/btn_con/refact_btn/refact_btn_red:obj",
  59. -- 对比节点
  60. "compare_conta:obj",
  61. }
  62. self:GetChildren(nodes)
  63. lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("ps_tool_tips_bg"), false)
  64. self.btn_list = {self.strength_btn, self.wear_btn, self.replace_btn, self.getway_btn, self.delete_btn}
  65. self.icon_item = PsionicArmorCircleItem.New(self.icon_con, false, self.layer_name)
  66. self.icon_item:SetEnableClick(false)
  67. self.icon_item:SetItemSize(78, 78)
  68. self.icon_item:ChangeCountVisible(false)
  69. self:AddToStageHandler()
  70. end
  71. function PsionicToolTips:AddEvent()
  72. local function onclick(target)
  73. if target == self.strength_btn_obj then -- 强化
  74. -- 这里处理为跳转到进阶页签,并自动选中当前装备
  75. local other_args = {slot = self.psionic_data.subtype}
  76. self.model:Fire(PsionicConst.OPEN_MAIN_VIEW, true, PsionicConst.TabId.PAdvance, other_args)
  77. self:Close()
  78. elseif target == self.wear_btn_obj or target == self.replace_btn_obj then --穿戴/替换装备
  79. local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_PSIONIC,4)
  80. if helpVo then
  81. GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,helpVo)
  82. end
  83. if self.psionic_data and self.psionic_data.goods_id then
  84. self.goods_model.has_first_updated_psionic_effect_red = true -- 手动穿戴装备的时候就不需要登录更新的那个了
  85. self.model:Fire(PsionicConst.REQUEST_CCMD_EVENT, 13903, self.psionic_data.goods_id)
  86. self:Close()
  87. end
  88. elseif target == self.getway_btn_obj then -- 获取途径
  89. local basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(self.psionic_data.type_id)
  90. local str = basic.getway_url
  91. local getway = stringtotable(str)
  92. -- print("huangcong:EquipToolTips [start:94] getway:", getway)
  93. -- PrintTable(getway)
  94. -- print("huangcong:EquipToolTips [end]")
  95. for i, v in ipairs(getway) do
  96. local cfg = OpenFun.GetFunCfg(v[1], v[2])
  97. if cfg then
  98. OpenFun.Open(v[1], v[2])
  99. else
  100. print("=================== can't find config, fun id is ", v[1], v[2])
  101. end
  102. end
  103. elseif target == self.refact_btn_obj then -- 洗练
  104. -- 注意这里选中的装备是作为材料装备的,要放在后面
  105. self.model:Fire(PsionicConst.OPEN_MAIN_VIEW, true, PsionicConst.TabId.PWash, {target_uid = self.psionic_data.goods_id})
  106. self:Close()
  107. elseif target == self.delete_btn_obj then -- 分解
  108. -- 这里处理为打开装备分解界面,并自动选中当前装备
  109. self.model:Fire(PsionicConst.OPEN_RESOLVE_VIEW, true, self.psionic_data and self.psionic_data.goods_id)
  110. self:Close()
  111. end
  112. end
  113. -- AddClickEvent(self.unload_btn_obj, onclick)
  114. AddClickEvent(self.strength_btn_obj, onclick)
  115. AddClickEvent(self.wear_btn_obj, onclick)
  116. AddClickEvent(self.replace_btn_obj, onclick)
  117. AddClickEvent(self.getway_btn_obj, onclick)
  118. AddClickEvent(self.delete_btn_obj, onclick)
  119. AddClickEvent(self.refact_btn_obj, onclick)
  120. local function onGuideTrigger()
  121. self:AddToStageHandler()
  122. end
  123. self:BindEvent(GlobalEventSystem, EventName.TRIGGER_GUIDE_TYPE, onGuideTrigger)
  124. end
  125. function PsionicToolTips:UpdateView(psionic_data)
  126. self.psionic_data = psionic_data or self.psionic_data
  127. self:SetData()
  128. end
  129. function PsionicToolTips:SetData()
  130. if not self.psionic_data then return end
  131. self.con.gameObject:SetActive(true)
  132. -- 配置变动,星数改color
  133. self.psionic_star = self.psionic_data.star
  134. self.is_bag = self.goods_model:GetPsionicBagGoodsByID(self.psionic_data.goods_id) and true or false
  135. self.is_equiped = self.goods_model:GetPsionicEquipGoodsByID(self.psionic_data.goods_id) and true or false
  136. self.equiped_obj:SetActive(self.is_equiped)
  137. self.cur_wear_ps_equip = self.goods_model:GetPsionicEquipBySlot(self.psionic_data.subtype)
  138. -- 查看已穿戴的装备是不可以展示对比
  139. self.show_compare = self.cur_wear_ps_equip and self.show_compare and not self.is_equiped
  140. -- self.slot_flag_tmp.text = PsionicConst.EquipSlotName[slot]
  141. self:UpdateBasicInfo()
  142. self:UpdateMainInfo()
  143. self:UpdateBtns()
  144. end
  145. -- 加载基础数据
  146. function PsionicToolTips:UpdateBasicInfo( )
  147. self.icon_item:SetData(self.psionic_data.type_id, nil, nil, self.psionic_data.equip_lv)
  148. self.icon_item:SetSlotName(self.psionic_data.subtype)
  149. self.goods_name_tmp.text = self.goods_model:getGoodsName(self.psionic_data.type_id, true, true)
  150. lua_resM:setImageSprite(self, self.armor_item_bg_img, "psionicExtra_asset", "ps_armor_bg_" .. self.psionic_data.color)
  151. -- 更新星数
  152. local offset_x = (self.star_con.sizeDelta.x - self.psionic_star * 22) / 2
  153. for i = 1, self.psionic_star do
  154. self.cur_star_list[i] = self.cur_star_list[i] or UiFactory.createChild(self.star_con, UIType.Image2, "star" .. i)
  155. SetAnchoredPosition(self.cur_star_list[i].transform, (i-1) * 22 + offset_x, 0) -- 36 + 0
  156. lua_resM:setImageSprite(self, self.cur_star_list[i]:GetComponent("Image"), "common_asset", "ps_star_1", true)
  157. end
  158. end
  159. -- 加载主要信息
  160. function PsionicToolTips:UpdateMainInfo( )
  161. -- 加载槽位数据
  162. local slot_data = self.model:GetPsionicSlotData(self.psionic_data.subtype)
  163. -- 配置的基础属性
  164. local cfg_attr = self.psionic_data.basic_attrs
  165. -- 获取配置等级属性增量
  166. local add_attr_cfg = {}
  167. for k, v in ipairs(self.psionic_data.cfg_attrs) do
  168. add_attr_cfg[v[1]] = v[3]
  169. end
  170. -- 配置属性的战斗力
  171. local basic_attr = GetFighting(cfg_attr, self.is_equiped)
  172. -- 创建信息节点列表,动态加载属性内容
  173. local data_list = {}
  174. data_list[#data_list + 1] = {title = "基础信息"}
  175. -- 判断是否需要对比属性
  176. local compare_data = {}
  177. local compare_add = {}
  178. if self.cur_wear_ps_equip and self.show_compare then
  179. for k, v in pairs(self.cur_wear_ps_equip.basic_attrs) do
  180. compare_data[v[1]] = v
  181. end
  182. for k, v in pairs(self.cur_wear_ps_equip.cfg_attrs) do
  183. compare_add[v[1]] = v[3]
  184. end
  185. end
  186. local attr_len = TableSize(cfg_attr)
  187. local slot_lv = slot_data.lv
  188. for k, v in ipairs(cfg_attr) do
  189. -- 是否有可对比的属性
  190. local show_diff = compare_data and compare_data[v[1]] and
  191. ((v[2] + add_attr_cfg[v[1]] * slot_lv) - (compare_data[v[1]][2] + compare_add[v[1]] * slot_lv))
  192. or nil
  193. data_list[#data_list + 1] = {
  194. attr_basic = v,
  195. show_diff = show_diff,
  196. index = k,
  197. is_last = k == attr_len,
  198. add_attr = add_attr_cfg[v[1]],
  199. slot_lv = slot_lv,
  200. }
  201. end
  202. -- 加载洗练属性
  203. local wash_cfg = self.model:GetPsionicWashCfg(self.psionic_data.subtype, slot_data.grade)
  204. local stage_max_lv, max_stage = self.model:GetPsionicSlotStageMaxLevel(slot_data.grade)
  205. local wash_attr_list, wash_attr_id_list = {}, {}
  206. for k, v in pairs(slot_data.attrs) do
  207. wash_attr_list[#wash_attr_list+1] = {[1] = v.attr_id, [2] = v.attr_value}
  208. wash_attr_id_list[v.attr_id] = v.attr_value
  209. end
  210. local wash_power = GetFighting(wash_attr_list, self.is_equiped)
  211. local wash_attr_num = #wash_attr_list
  212. data_list[#data_list + 1] = {title = "洗练属性"}
  213. for k, v in pairs(wash_cfg.maxs) do
  214. -- 获取目标属性的属性值
  215. local attr_id = v[1]
  216. local cur_val = wash_attr_id_list[attr_id] or 0
  217. data_list[#data_list + 1] = {
  218. cur_val = cur_val,
  219. attr_wash = v,
  220. index = k,
  221. is_last = k >= wash_attr_num
  222. }
  223. end
  224. -- 加载觉醒属性
  225. local awake_power = 0
  226. local awake_cfg = self.model:GetPsionicAwakeCfg(slot_data.pos, slot_data.sec_lv) -- 觉醒等级相关配置
  227. local awake_attr = awake_cfg.attrs -- 当前觉醒等级属性列表
  228. awake_power = GetFighting(awake_attr, self.is_equiped)
  229. attr_len = TableSize(awake_attr)
  230. if attr_len > 0 then -- 要有属性才展示
  231. data_list[#data_list + 1] = {
  232. title = "觉醒属性",
  233. title_extra = {
  234. has_weared = self.cur_wear_ps_equip, -- 是否穿戴了
  235. awake_lv = slot_data.sec_lv,
  236. equip_color = self.psionic_data.color, -- 这里需要装备品级,不足橙色装备的需要做特殊处理
  237. }
  238. }
  239. for k, v in ipairs(awake_attr) do
  240. data_list[#data_list + 1] = {
  241. skill_data = v,
  242. index = k,
  243. is_last = k == attr_len,
  244. }
  245. end
  246. end
  247. local total_power = basic_attr + wash_power + awake_power
  248. self.power_txt.text = "f" .. total_power
  249. if not self.show_compare then
  250. local offset_x = (345 - self.power_txt.preferredWidth) * 0.5 + 14
  251. SetAnchoredPositionX(self.power, offset_x)
  252. end
  253. self:UpdateDetailItem(data_list)
  254. self:UpdateCompareData(cfg_attr, total_power)
  255. end
  256. -- 更新装备对比数据 compare_attrs:当前装备的基础属性 total_power:当前查看装备的总战力
  257. function PsionicToolTips:UpdateCompareData(compare_attrs, total_power)
  258. self.compare_conta_obj:SetActive(self.show_compare)
  259. if self.show_compare then -- 显示对比,则需要右移
  260. SetAnchoredPositionX(self.con, 535)
  261. if not self.ps_tooltip_compare then
  262. self.ps_tooltip_compare = PsionicToolTipsCompare.New(self.compare_conta, nil, self.layer_name)
  263. end
  264. -- 设置回调,对比战斗力差别,并调整节点位置
  265. local power_callback = function(compare_power)
  266. if self._use_delete_method then return end
  267. local off_power = total_power - compare_power
  268. local power_width = self.power_txt.preferredWidth * 0.8
  269. local cp_arrow_width, cp_power_width = 0, 0
  270. if off_power ~= 0 then -- 有战力差
  271. local higher = off_power > 0
  272. cp_arrow_width = 29
  273. self.cp_arrow_img.enabled = true
  274. self.cp_power_tmp.text = math.abs(off_power)
  275. cp_power_width = self.cp_power_tmp.preferredWidth
  276. lua_resM:setImageSprite(self, self.cp_arrow_img, "common_asset", higher and "tyui_Arrow_3" or "tyui_Arrow_4", true)
  277. SetTMPSharedMaterial(self.cp_power_tmp, higher
  278. and ShaderTools.TMPSharedMaterialType.HKYTW7OutlineGreenUp
  279. or ShaderTools.TMPSharedMaterialType.HKYTW7OutlineRedDown)
  280. end
  281. local total_len = power_width + cp_arrow_width + cp_power_width
  282. local offset_x = (345 - total_len) * 0.5
  283. SetAnchoredPositionX(self.power, offset_x + 14)
  284. -- SetAnchoredPositionX(self.cp_arrow, offset_x + power_width - 20)
  285. SetAnchoredPositionX(self.cp_arrow, offset_x + power_width + 15)
  286. -- SetAnchoredPositionX(self.cp_power, offset_x + power_width + cp_arrow_width - 22)
  287. SetAnchoredPositionX(self.cp_power, offset_x + power_width + cp_arrow_width + 16)
  288. end
  289. self.ps_tooltip_compare:SetData(self.cur_wear_ps_equip, power_callback)
  290. else
  291. SetAnchoredPositionX(self.con, 461)
  292. end
  293. end
  294. -- 根据组合的表生成属性节点
  295. function PsionicToolTips:UpdateDetailItem(data_list)
  296. local item
  297. local height = 0
  298. for k, v in ipairs(data_list) do
  299. item = self.attr_item_list[k]
  300. if not item then
  301. item = PsionicToolTipsItem.New(self.attr_con)
  302. self.attr_item_list[k] = item
  303. end
  304. item:SetAnchoredPosition(0, -height)
  305. height = height + item:SetData(v)
  306. end
  307. SetSizeDeltaY(self.attr_con, height)
  308. -- 设置背景图大小
  309. -- local bg_height = 200 + height
  310. -- bg_height = bg_height < 687 and bg_height or 687
  311. -- SetSizeDeltaY(self.bg,bg_height)
  312. -- SetSizeDeltaY(self.attr_scroll, bg_height - 190)
  313. end
  314. --按钮显示
  315. function PsionicToolTips:UpdateBtns()
  316. for i,v in ipairs(self.btn_list) do
  317. if v.gameObject.activeSelf then
  318. v.gameObject:SetActive(false)
  319. end
  320. end
  321. local btn_list = {}
  322. if self.flag == PsionicConst.ArmorItemFlag.Show
  323. or self.flag == PsionicConst.ArmorItemFlag.Advance
  324. or self.flag == PsionicConst.ArmorItemFlag.AdvanceRefact then -- 单纯展示和进阶中的装备节点不展示操作按钮
  325. return
  326. end
  327. -- print("Saber:PsionicToolTips [217] is_bag: ",is_bag)
  328. if self.is_bag then --背包中的装备
  329. if self.flag == PsionicConst.ArmorItemFlag.Bag then -- 背包中查看未穿戴的装备
  330. if self.cur_wear_ps_equip then -- 存在当前栏位装备的话就显示替换
  331. table.insert(btn_list, self.replace_btn)
  332. -- 可替换红点
  333. local replace_red = self.model:IsPsionicEquipPowerUpOrNot(self.psionic_data.goods_id)
  334. self.replace_btn_red_obj:SetActive(replace_red)
  335. else
  336. table.insert(btn_list, self.wear_btn)
  337. -- 可装备红点
  338. local equip_red = self.model:GetPsionicEquipSlotRed(self.psionic_data.subtype)
  339. self.wear_btn_red_obj:SetActive(equip_red)
  340. end
  341. -- table.insert(btn_list, self.getway_btn)
  342. table.insert(btn_list, self.delete_btn)
  343. end
  344. elseif self.is_equiped then --已经穿上的装备
  345. table.insert(btn_list, self.strength_btn)
  346. table.insert(btn_list, self.refact_btn)
  347. -- 进阶红点
  348. self.strength_btn_red_obj:SetActive(self.model:GetPsionicAdvanceRed(self.psionic_data.subtype))
  349. -- 洗练红点
  350. self.refact_btn_red_obj:SetActive(self.model:GetPsionicWashSlotRed(self.psionic_data.subtype))
  351. end
  352. for i, v in ipairs(btn_list) do
  353. v.gameObject:SetActive(true)
  354. end
  355. end
  356. function PsionicToolTips:DestroySuccess( )
  357. if self.icon_item then
  358. self.icon_item:DeleteMe()
  359. self.icon_item = nil
  360. end
  361. for i,v in ipairs(self.attr_item_list) do
  362. v:DeleteMe()
  363. v = nil
  364. end
  365. self.attr_item_list = {}
  366. if self.ps_tooltip_compare then
  367. self.ps_tooltip_compare:DeleteMe()
  368. self.ps_tooltip_compare = nil
  369. end
  370. end
  371. function PsionicToolTips:AddToStageHandler()
  372. local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_PSIONIC,4)
  373. if not helpVo then return end
  374. local help_type = helpVo.help_type
  375. local step = helpVo.step
  376. local button = false
  377. if (help_type == HelpType.TYPE_PSIONIC) and step == 4 then
  378. button = self.wear_btn_obj
  379. end
  380. if button then
  381. local function call_back()
  382. end
  383. GlobalEventSystem:Fire(EventName.OPEN_GUIDE_PROMPT_VIEW, button.transform, self.transform, call_back, helpVo, self.layout_file, self.layer_name)
  384. end
  385. end