源战役客户端
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.

237 lines
9.0 KiB

  1. -- <*
  2. -- @Author: Saber
  3. -- @Description: 圣物装备对比tips
  4. -- *>
  5. PsionicToolTipsCompare = PsionicToolTipsCompare or BaseClass(BaseItem)
  6. local PsionicToolTipsCompare = PsionicToolTipsCompare
  7. function PsionicToolTipsCompare:__init(parent_wnd,prefab_asset,layer_name)
  8. self.base_file = "common"
  9. self.layout_file = "PsionicToolTips"
  10. self.parent_wnd = parent_wnd
  11. self.layer_name = layer_name
  12. self.cur_star_list = {}
  13. self.attr_item_list = {}
  14. self.model = PsionicModel:getInstance()
  15. self.goods_model = GoodsModel:getInstance()
  16. self:Load()
  17. end
  18. function PsionicToolTipsCompare:Load_callback()
  19. local nodes = {
  20. "con",
  21. "con/bg:raw",
  22. "con/power:txt", -- 圣物装备战斗力
  23. "con/cp_arrow:img", "con/cp_power:tmp",
  24. "con/goods_name:tmp", -- 装备名
  25. "con/icon_con", -- 图标容器
  26. "con/equiped:obj", -- 穿戴中标识
  27. "con/attr_scroll", "con/attr_scroll/Viewport/attr_con", -- 属性容器
  28. "con/star_con", -- 星数节点
  29. "con/armor_item_bg:img",
  30. -- 操作按钮部分
  31. "con/bg/btn_con/unload_btn:obj", -- 卸下
  32. "con/bg/btn_con/wear_btn:obj", -- 穿戴
  33. "con/bg/btn_con/strength_btn:obj", "con/bg/btn_con/strength_btn/strength_btn_red:obj", -- 升品 / 强化
  34. "con/bg/btn_con/getway_btn:obj", -- 获取途径
  35. "con/bg/btn_con/delete_btn:obj", -- 销毁
  36. "con/bg/btn_con/refact_btn:obj", "con/bg/btn_con/refact_btn/refact_btn_red:obj",
  37. }
  38. self:GetChildren(nodes)
  39. lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("ps_tool_tips_bg"), false)
  40. self.icon_item = PsionicArmorCircleItem.New(self.icon_con, false, self.layer_name)
  41. self.icon_item:SetEnableClick(false)
  42. self.icon_item:SetItemSize(78, 78)
  43. self.icon_item:ChangeCountVisible(false)
  44. self.transform.name = "PsionicToolTipsCompare"
  45. self:AddEvents()
  46. if self.need_refreshData then
  47. self:UpdateView()
  48. end
  49. end
  50. function PsionicToolTipsCompare:AddEvents( )
  51. end
  52. function PsionicToolTipsCompare:SetData( psionic_data, power_callback )
  53. self.psionic_data = psionic_data
  54. self.power_callback = power_callback -- 参与对比装备的战斗力
  55. if self.is_loaded then
  56. self.need_refreshData = false
  57. self:UpdateView()
  58. else
  59. self.need_refreshData = true
  60. end
  61. end
  62. function PsionicToolTipsCompare:UpdateView( )
  63. self.con.gameObject:SetActive(true)
  64. SetAnchoredPositionX(self.con, 196.5)
  65. self.psionic_star = self.psionic_data.star
  66. self.is_equiped = self.goods_model:GetPsionicEquipGoodsByID(self.psionic_data.goods_id) and true or false
  67. self.equiped_obj:SetActive(self.is_equiped)
  68. -- self.slot_flag_tmp.text = PsionicConst.EquipSlotName[self.psionic_data.subtype]
  69. self:UpdateBasicInfo()
  70. self:UpdateMainInfo()
  71. end
  72. -- 加载基础数据
  73. function PsionicToolTipsCompare:UpdateBasicInfo( )
  74. self.icon_item:SetData(self.psionic_data.type_id, nil, nil, self.psionic_data.equip_lv)
  75. self.icon_item:SetSlotName(self.psionic_data.subtype)
  76. self.goods_name_tmp.text = self.goods_model:getGoodsName(self.psionic_data.type_id, true, true)
  77. lua_resM:setImageSprite(self, self.armor_item_bg_img, "psionicExtra_asset", "ps_armor_bg_" .. self.psionic_data.color)
  78. -- 更新星数
  79. local offset_x = (self.star_con.sizeDelta.x - self.psionic_star * 22) / 2
  80. for i = 1, self.psionic_star do
  81. self.cur_star_list[i] = self.cur_star_list[i] or UiFactory.createChild(self.star_con, UIType.Image2, "star" .. i)
  82. SetAnchoredPosition(self.cur_star_list[i].transform, (i-1) * 22 + offset_x, 0)
  83. lua_resM:setImageSprite(self, self.cur_star_list[i]:GetComponent("Image"), "common_asset", "ps_star_1", true)
  84. end
  85. end
  86. -- 加载主要信息
  87. function PsionicToolTipsCompare:UpdateMainInfo( )
  88. -- 加载槽位数据
  89. local slot_data = self.model:GetPsionicSlotData(self.psionic_data.subtype)
  90. -- 配置的基础属性
  91. local cfg_attr = self.psionic_data.basic_attrs
  92. -- 获取配置等级属性增量
  93. local add_attr_cfg = {}
  94. for k, v in ipairs(self.psionic_data.cfg_attrs) do
  95. for k2, v2 in ipairs(cfg_attr) do
  96. if v[1] == v2[1] then
  97. add_attr_cfg[v[1]] = v[3]
  98. end
  99. end
  100. end
  101. -- 配置属性的战斗力
  102. local basic_attr = GetFighting(cfg_attr, self.is_equiped)
  103. -- 创建信息节点列表,动态加载属性内容
  104. local data_list = {}
  105. data_list[#data_list + 1] = {title = "基础信息"}
  106. local attr_len = TableSize(cfg_attr)
  107. local slot_lv = slot_data.lv
  108. for k, v in ipairs(cfg_attr) do
  109. data_list[#data_list + 1] = {
  110. attr_basic = v,
  111. index = k,
  112. is_last = k == attr_len,
  113. add_attr = add_attr_cfg[v[1]],
  114. slot_lv = slot_lv
  115. }
  116. end
  117. -- 加载洗练属性
  118. local wash_cfg = self.model:GetPsionicWashCfg(self.psionic_data.subtype, slot_data.grade)
  119. local stage_max_lv, max_stage = self.model:GetPsionicSlotStageMaxLevel(slot_data.grade)
  120. local wash_attr_list, wash_attr_id_list = {}, {}
  121. for k, v in pairs(slot_data.attrs) do
  122. wash_attr_list[#wash_attr_list+1] = {[1] = v.attr_id, [2] = v.attr_value}
  123. wash_attr_id_list[v.attr_id] = v.attr_value
  124. end
  125. local wash_power = GetFighting(wash_attr_list, self.is_equiped)
  126. local wash_attr_num = #wash_attr_list
  127. data_list[#data_list + 1] = {title = "洗练属性"}
  128. for k, v in pairs(wash_cfg.maxs) do
  129. -- 获取目标属性的属性值
  130. local attr_id = v[1]
  131. local cur_val = wash_attr_id_list[attr_id] or 0
  132. data_list[#data_list + 1] = {
  133. cur_val = cur_val,
  134. attr_wash = v,
  135. index = k,
  136. is_last = k >= wash_attr_num
  137. }
  138. end
  139. -- 加载觉醒属性
  140. local awake_power = 0
  141. local awake_cfg = self.model:GetPsionicAwakeCfg(slot_data.pos, slot_data.sec_lv) -- 觉醒等级相关配置
  142. local awake_attr = awake_cfg.attrs -- 当前觉醒等级属性列表
  143. awake_power = GetFighting(awake_attr, self.is_equiped)
  144. attr_len = TableSize(awake_attr)
  145. if attr_len > 0 then -- 要有属性才展示
  146. data_list[#data_list + 1] = {
  147. title = "觉醒属性",
  148. title_extra = {
  149. has_weared = self.psionic_data,
  150. awake_lv = slot_data.sec_lv,
  151. equip_color = self.psionic_data.color, -- 这里需要装备品级,不足橙色装备的需要做特殊处理
  152. }
  153. }
  154. for k, v in ipairs(awake_attr) do
  155. data_list[#data_list + 1] = {
  156. skill_data = v,
  157. index = k,
  158. is_last = k == attr_len,
  159. }
  160. end
  161. end
  162. local total_power = basic_attr + wash_power + awake_power
  163. self.power_txt.text = "f" .. total_power
  164. -- 对比战斗力差别,并调整节点位置
  165. local offset_x = (345 - self.power_txt.preferredWidth) * 0.5 + 14
  166. SetAnchoredPositionX(self.power, offset_x)
  167. if self.power_callback then
  168. self.power_callback(total_power)
  169. end
  170. -- -- 对比战斗力差别,并调整节点位置
  171. -- local off_power = total_power - self.compare_power
  172. -- local power_width = self.power_txt.preferredWidth
  173. -- local cp_arrow_width, cp_power_width = 0, 0
  174. -- if off_power ~= 0 then -- 有战力差
  175. -- local higher = off_power > 0
  176. -- cp_arrow_width = 29
  177. -- self.cp_arrow_img.enabled = true
  178. -- self.cp_power_tmp.text = math.abs(off_power)
  179. -- cp_power_width = self.cp_power_tmp.preferredWidth
  180. -- lua_resM:setImageSprite(self, self.cp_arrow_img, "common_asset", higher and "tyui_Arrow_3" or "tyui_Arrow_4", true)
  181. -- SetTMPSharedMaterial(self.cp_power_tmp, higher
  182. -- and ShaderTools.TMPSharedMaterialType.HKYTW7OutlineGreenUp
  183. -- or ShaderTools.TMPSharedMaterialType.HKYTW7OutlineRedDown)
  184. -- end
  185. -- local total_len = power_width + cp_arrow_width + cp_power_width
  186. -- local offset_x = (345 - total_len) * 0.5
  187. -- SetAnchoredPositionX(self.power, offset_x + 14)
  188. -- SetAnchoredPositionX(self.cp_arrow, offset_x + power_width - 18)
  189. -- SetAnchoredPositionX(self.cp_power, offset_x + power_width + cp_arrow_width - 20)
  190. -- self.compare_power
  191. self:UpdateDetailItem(data_list)
  192. end
  193. -- 根据组合的表生成属性节点
  194. function PsionicToolTipsCompare:UpdateDetailItem(data_list)
  195. local item
  196. local height = 0
  197. for k, v in ipairs(data_list) do
  198. item = self.attr_item_list[k]
  199. if not item then
  200. item = PsionicToolTipsItem.New(self.attr_con)
  201. self.attr_item_list[k] = item
  202. end
  203. item:SetAnchoredPosition(0, -height)
  204. height = height + item:SetData(v)
  205. end
  206. SetSizeDeltaY(self.attr_con, height)
  207. end
  208. function PsionicToolTipsCompare:__delete( )
  209. if self.icon_item then
  210. self.icon_item:DeleteMe()
  211. self.icon_item = nil
  212. end
  213. for i,v in ipairs(self.attr_item_list) do
  214. v:DeleteMe()
  215. v = nil
  216. end
  217. self.attr_item_list = {}
  218. end