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

222 rivejä
8.4 KiB

4 viikkoa sitten
  1. PsionicBreakSuccessItem = PsionicBreakSuccessItem or BaseClass(BaseItem)
  2. local PsionicBreakSuccessItem = PsionicBreakSuccessItem
  3. function PsionicBreakSuccessItem:__init(parent_wnd,prefab_asset,layer_name)
  4. self.base_file = "psionic"
  5. self.layout_file = "PsionicBreakSuccessItem"
  6. self.parent_wnd = parent_wnd
  7. self.layer_name = layer_name
  8. self.model = PsionicModel:getInstance()
  9. self.goods_model = GoodsModel:getInstance()
  10. self.cur_star_list = {}
  11. self.attr_item_list = {}
  12. self:Load()
  13. end
  14. function PsionicBreakSuccessItem:Load_callback()
  15. local nodes = {
  16. "bg:img", "armor_item_bg:img",
  17. "star_con", "icon_con",
  18. "cp_arrow:img",
  19. "attr_scroll",
  20. "attr_scroll/Viewport/attr_con",
  21. "cp_power:tmp",
  22. "power:txt",
  23. "goods_name:tmp",
  24. }
  25. self:GetChildren(nodes)
  26. self.icon_item = PsionicArmorCircleItem.New(self.icon_con, false, self.layer_name)
  27. self.icon_item:SetAnchoredPosition(0, 0)
  28. self.icon_item:SetEnableClick(false)
  29. self.icon_item:SetItemSize(78, 78)
  30. self.icon_item:ChangeCountVisible(false)
  31. lua_resM:setImageSprite(self, self.bg_img, "psionicExtra_asset", "ps_break_success_itembg")
  32. self:AddEvents()
  33. if self.need_refreshData then
  34. self:UpdateView()
  35. end
  36. end
  37. function PsionicBreakSuccessItem:AddEvents( )
  38. end
  39. function PsionicBreakSuccessItem:SetData( goods_vo, compare_vo )
  40. self.goods_vo = goods_vo
  41. self.compare_vo = compare_vo -- 传入了对比属性之后才会有对比表现
  42. if self.is_loaded then
  43. self.need_refreshData = false
  44. self:UpdateView()
  45. else
  46. self.need_refreshData = true
  47. end
  48. end
  49. function PsionicBreakSuccessItem:UpdateView( )
  50. -- 基础表现相关 --
  51. -- 是否是穿戴中的圣物装备
  52. self.is_equiped = self.goods_model:GetPsionicEquipGoodsByID(self.goods_vo.goods_id) and true or false
  53. self.show_compare = self.compare_vo and true or false
  54. lua_resM:setImageSprite(self, self.armor_item_bg_img, "psionicExtra_asset", "ps_break_sc_subbg_" .. self.goods_vo.color)
  55. self.icon_item:SetData(self.goods_vo.type_id, nil, nil, self.goods_vo.equip_lv)
  56. self.icon_item:SetSlotName(self.goods_vo.subtype)
  57. self.goods_name_tmp.text = self.goods_model:getGoodsName(self.goods_vo.type_id, true, true)
  58. -- 更新星数
  59. local offset_x = (self.star_con.sizeDelta.x - self.goods_vo.star * 22) / 2
  60. for i = 1, self.goods_vo.star do
  61. self.cur_star_list[i] = self.cur_star_list[i] or UiFactory.createChild(self.star_con, UIType.Image2, "star" .. i)
  62. SetAnchoredPosition(self.cur_star_list[i].transform, (i-1) * 22 + offset_x, 0)
  63. lua_resM:setImageSprite(self, self.cur_star_list[i]:GetComponent("Image"), "psionic_asset", "ps_star_1", true)
  64. end
  65. -- 装备数据相关 --
  66. -- 加载槽位数据
  67. local slot_data = self.model:GetPsionicSlotData(self.goods_vo.subtype)
  68. -- 配置的基础属性
  69. local cfg_attr = self.goods_vo.basic_attrs
  70. -- 获取配置等级属性增量
  71. local add_attr_cfg = {}
  72. for k, v in ipairs(self.goods_vo.cfg_attrs) do
  73. add_attr_cfg[v[1]] = v[3]
  74. end
  75. -- 配置属性的战斗力
  76. local basic_attr = GetFighting(cfg_attr, self.is_equiped)
  77. -- 创建信息节点列表,动态加载属性内容
  78. local data_list = {}
  79. data_list[#data_list + 1] = {title = "基础信息"}
  80. -- 判断是否需要对比属性
  81. local compare_data = {}
  82. local compare_add = {}
  83. if self.show_compare then
  84. for k, v in pairs(self.compare_vo.basic_attrs) do
  85. compare_data[v[1]] = v
  86. end
  87. for k, v in pairs(self.compare_vo.cfg_attrs) do
  88. compare_add[v[1]] = v[3]
  89. end
  90. end
  91. local attr_len = TableSize(cfg_attr)
  92. local slot_lv = slot_data.lv
  93. for k, v in ipairs(cfg_attr) do
  94. -- 是否有可对比的属性
  95. local show_diff = compare_data and compare_data[v[1]] and
  96. ((v[2] + add_attr_cfg[v[1]] * slot_lv) - (compare_data[v[1]][2] + compare_add[v[1]] * slot_lv))
  97. or nil
  98. data_list[#data_list + 1] = {
  99. attr_basic = v,
  100. show_diff = show_diff,
  101. index = k,
  102. is_last = k == attr_len,
  103. add_attr = add_attr_cfg[v[1]],
  104. slot_lv = slot_lv,
  105. }
  106. end
  107. -- 加载洗练属性
  108. local wash_cfg = self.model:GetPsionicWashCfg(self.goods_vo.subtype, slot_data.grade)
  109. local stage_max_lv, max_stage = self.model:GetPsionicSlotStageMaxLevel(slot_data.grade)
  110. local wash_attr_list, wash_attr_id_list = {}, {}
  111. for k, v in pairs(slot_data.attrs) do
  112. wash_attr_list[#wash_attr_list+1] = {[1] = v.attr_id, [2] = v.attr_value}
  113. wash_attr_id_list[v.attr_id] = v.attr_value
  114. end
  115. local wash_power = GetFighting(wash_attr_list, self.is_equiped)
  116. -- local wash_attr_num = #wash_attr_list
  117. -- data_list[#data_list + 1] = {title = "洗练属性"}
  118. -- for k, v in pairs(wash_cfg.maxs) do
  119. -- -- 获取目标属性的属性值
  120. -- local attr_id = v[1]
  121. -- local cur_val = wash_attr_id_list[attr_id] or 0
  122. -- data_list[#data_list + 1] = {
  123. -- cur_val = cur_val,
  124. -- attr_wash = v,
  125. -- index = k,
  126. -- is_last = k >= wash_attr_num
  127. -- }
  128. -- end
  129. -- -- 加载觉醒属性
  130. local awake_power = 0
  131. local awake_cfg = self.model:GetPsionicAwakeCfg(slot_data.pos, slot_data.sec_lv) -- 觉醒等级相关配置
  132. local awake_attr = awake_cfg.attrs -- 当前觉醒等级属性列表
  133. awake_power = GetFighting(awake_attr, self.is_equiped)
  134. -- attr_len = TableSize(awake_attr)
  135. -- if attr_len > 0 then -- 要有属性才展示
  136. -- data_list[#data_list + 1] = {
  137. -- title = "觉醒属性",
  138. -- title_extra = {
  139. -- has_weared = self.compare_vo, -- 是否穿戴了
  140. -- awake_lv = slot_data.sec_lv,
  141. -- equip_color = self.goods_vo.color, -- 这里需要装备品级,不足橙色装备的需要做特殊处理
  142. -- }
  143. -- }
  144. -- for k, v in ipairs(awake_attr) do
  145. -- data_list[#data_list + 1] = {
  146. -- skill_data = v,
  147. -- index = k,
  148. -- is_last = k == attr_len,
  149. -- }
  150. -- end
  151. -- end
  152. local total_power = basic_attr + wash_power + awake_power
  153. self.power_txt.text = "f" .. total_power
  154. if not self.show_compare then
  155. local offset_x = (345 - self.power_txt.preferredWidth) * 0.5 + 14
  156. SetAnchoredPositionX(self.power, offset_x)
  157. end
  158. -- 创建对比节点
  159. local item
  160. local height = 0
  161. for k, v in ipairs(data_list) do
  162. item = self.attr_item_list[k]
  163. if not item then
  164. item = PsionicToolTipsItem.New(self.attr_con)
  165. self.attr_item_list[k] = item
  166. end
  167. item:SetAnchoredPosition(0, -height)
  168. height = height + item:SetData(v)
  169. end
  170. SetSizeDeltaY(self.attr_con, height)
  171. -- 存在对比数据时,计算战斗力提升相关
  172. local power_width = self.power_txt.preferredWidth * 0.8
  173. local cp_arrow_width, cp_power_width = 0, 0
  174. if self.show_compare then
  175. -- 配置属性的战斗力
  176. local compare_basic_attr = GetFighting(self.compare_vo.basic_attrs, self.is_equiped)
  177. local off_power = basic_attr - compare_basic_attr
  178. local higher = off_power > 0
  179. self.cp_arrow_img.enabled = true
  180. self.cp_power_tmp.text = math.abs(off_power)
  181. cp_arrow_width = 29
  182. cp_power_width = self.cp_power_tmp.preferredWidth
  183. lua_resM:setImageSprite(self, self.cp_arrow_img, "common_asset", higher and "tyui_Arrow_3" or "tyui_Arrow_4", true)
  184. SetTMPSharedMaterial(self.cp_power_tmp, higher
  185. and ShaderTools.TMPSharedMaterialType.HKYTW7OutlineGreenUp
  186. or ShaderTools.TMPSharedMaterialType.HKYTW7OutlineRedDown)
  187. end
  188. local total_len = power_width + cp_arrow_width + cp_power_width
  189. local offset_x = (280 - total_len) * 0.5
  190. SetAnchoredPositionX(self.power, offset_x + 14)
  191. SetAnchoredPositionX(self.cp_arrow, offset_x + power_width + 15)
  192. SetAnchoredPositionX(self.cp_power, offset_x + power_width + cp_arrow_width + 16)
  193. end
  194. function PsionicBreakSuccessItem:__delete( )
  195. if self.icon_item then
  196. self.icon_item:DeleteMe()
  197. self.icon_item = nil
  198. end
  199. for i,v in ipairs(self.attr_item_list) do
  200. v:DeleteMe()
  201. v = nil
  202. end
  203. self.attr_item_list = {}
  204. end