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

220 lines
9.7 KiB

  1. -- <*
  2. -- @Author: Saber
  3. -- @Description: 圣物觉醒成功结算界面
  4. -- *>
  5. PsionicSkillUpgradeSuccessView = PsionicSkillUpgradeSuccessView or BaseClass(BaseView)
  6. local PsionicSkillUpgradeSuccessView = PsionicSkillUpgradeSuccessView
  7. local TimeUtil = TimeUtil
  8. local string_format = string.format
  9. function PsionicSkillUpgradeSuccessView:__init()
  10. self.base_file = "psionic"
  11. self.layout_file = "PsionicSkillUpgradeSuccessView"
  12. self.layer_name = "Activity"
  13. self.destroy_imm = true
  14. self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置
  15. self.hide_maincancas = true --全屏界面需要隐藏主UI
  16. self.change_scene_close = true --是否切换场景时关闭(弹出界面使用)
  17. self.is_set_zdepth = true
  18. self.model = PsionicModel:getInstance()
  19. -- 初始化数据
  20. self.slot_data = nil
  21. self.pre_lv_pro = {}
  22. self.cur_lv_pro = {}
  23. self.load_callback = function ()
  24. self:LoadSuccess()
  25. self:AddEvent()
  26. end
  27. self.open_callback = function ( )
  28. self:UpdateView()
  29. end
  30. self.destroy_callback = function ( )
  31. self:DestroySuccess()
  32. end
  33. end
  34. -- slot_data 槽位数据,其中的等级为升级后的等级,旧等级在这个基础上减1
  35. function PsionicSkillUpgradeSuccessView:Open(slot_data)
  36. self.slot_data = slot_data
  37. BaseView.Open(self)
  38. end
  39. function PsionicSkillUpgradeSuccessView:LoadSuccess()
  40. local nodes = {
  41. "bg:raw", "bg/title:img",
  42. "content:cg",
  43. "content/close_btn:obj",
  44. "content/model_con",
  45. "content/skill_icon1:img", "content/skill_icon2:img",
  46. "content/skill_progress_con1", "content/skill_progress_con2",
  47. "content/power_con",
  48. "content/power_con/up_arrow:img", "content/power_con/power_cur:txt",
  49. "content/power_con/power_lb1:tmp", "content/power_con/power_up:tmp",
  50. "content/attr_scroll",
  51. "content/attr_scroll/Viewport/attr_con",
  52. "content/skill_lv1:tmp", "content/skill_lv2:tmp",
  53. "content/skill_stage_lb1:tmp", "content/skill_stage_lb2:tmp",
  54. "content/skill_desc:tmp",
  55. "content/auto_close_timer:tmp",
  56. }
  57. self:GetChildren(nodes)
  58. lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("ps_skill_upgrade_success_bg"))
  59. lua_resM:setImageSprite(self, self.title_img, "psionicExtra_asset", "ps_skill_upgrade_success_title")
  60. end
  61. function PsionicSkillUpgradeSuccessView:AddEvent()
  62. local function click_event(target)
  63. if target == self.close_btn_obj then
  64. self:Close()
  65. end
  66. end
  67. AddClickEvent(self.close_btn_obj, click_event)
  68. end
  69. function PsionicSkillUpgradeSuccessView:UpdateView()
  70. self:UpdatePsionicModel()
  71. self:UpdateBasicData()
  72. self:UpdateAutoCloseTimer()
  73. end
  74. -- 更新界面的模型表现
  75. function PsionicSkillUpgradeSuccessView:UpdatePsionicModel( )
  76. if self.slot_data then
  77. -- 加载圣物模型
  78. local model_data = PsionicConst.SlotModel[self.slot_data.pos]
  79. local res_data = {
  80. father_node = self,
  81. transform = self.model_con,
  82. fashion_type = FuncOpenModel.TypeId.OtherGoods,
  83. raycast_size = Vector2(0,0),
  84. rotate = model_data.rotate,
  85. scale = model_data.scale,
  86. figure_id = model_data.model,
  87. position = model_data.pos + Vector3(0, 65, 0),
  88. layer_name = self.layer_name,
  89. ui_model_type = UIModelCommon.ModelType.Model,
  90. }
  91. FuncOpenModel:getInstance():SetModelRes(res_data)
  92. end
  93. end
  94. -- 更新界面的基础数据
  95. function PsionicSkillUpgradeSuccessView:UpdateBasicData( )
  96. if self.slot_data then
  97. --- 获取配置和必要数据 ---
  98. self.awake_lv = self.slot_data and self.slot_data.sec_lv or 1 -- 觉醒等级
  99. -- 技能等级配置 Config.Nucleonsection
  100. self.skill_lv_cfg = self.model:GetPsionicAwakeCfg(self.slot_data.pos, self.awake_lv)
  101. self.skill_cfg = ConfigItemMgr.Instance:GetSkillItem(self.slot_data.skill_id)
  102. self.skill_id = self.skill_lv_cfg and self.skill_lv_cfg.sec_skill[1][1] or nil -- 这个指的是觉醒后获得的第二技能的技能id,不是展示用的技能id
  103. self.sec_skill_cfg = self.skill_id and ConfigItemMgr.Instance:GetSkillItem(self.skill_id) or nil
  104. self.pre_skill_lv_cfg = self.model:GetPsionicAwakeCfg(self.slot_data.pos, self.awake_lv - 1)
  105. -- 技能图标
  106. lua_resM:setOutsideImageSprite(self, self.skill_icon1_img, GameResPath.GetSkillIcon(self.slot_data.skill_id))
  107. lua_resM:setOutsideImageSprite(self, self.skill_icon2_img, GameResPath.GetSkillIcon(self.slot_data.skill_id))
  108. self.skill_lv1_tmp.text = string.format("Lv.%s", self.awake_lv - 1)
  109. self.skill_lv2_tmp.text = string.format("Lv.%s", self.awake_lv)
  110. -- 加载描述
  111. -- 获取目标等级的配置
  112. local desc = ""
  113. local lvs_cfg = self.skill_cfg.lvs and self.skill_cfg.lvs[1] or nil -- 主技能只有1级
  114. if lvs_cfg then
  115. desc = Trim(lvs_cfg.desc)
  116. end
  117. -- 当前等级的描述
  118. local cur_sec_skill_lv = self.skill_lv_cfg and self.skill_lv_cfg.sec_skill[1] and self.skill_lv_cfg.sec_skill[1][2] or 1
  119. desc = desc .. string.format("\n<color=#fdffc2>效果追加:%s</color>", Trim(self.sec_skill_cfg.lvs[cur_sec_skill_lv].desc))
  120. self.skill_desc_tmp.text = desc
  121. -- 加载等级描述
  122. self.skill_stage_lb1_tmp.text = string.format("%s段觉醒", ChineseNumber(self.awake_lv - 1))
  123. self.skill_stage_lb2_tmp.text = string.format("%s段觉醒", ChineseNumber(self.awake_lv))
  124. -- 加载进度节点
  125. -- 当前等级
  126. for i = 1, 6 do
  127. self.pre_lv_pro[i] = self.pre_lv_pro[i] or UiFactory.createChild(self.skill_progress_con1, UIType.Image, "pro" .. i)
  128. SetAnchoredPosition(self.pre_lv_pro[i].transform, (i-3) * 12 - 6, -6)
  129. lua_resM:setImageSprite(self, self.pre_lv_pro[i]:GetComponent("Image"), "psionic_asset",
  130. i <= (self.awake_lv - 1) and "ps_skill_pro1" or "ps_skill_pro0", true)
  131. end
  132. -- 下一等级
  133. for i = 1, 6 do
  134. self.cur_lv_pro[i] = self.cur_lv_pro[i] or UiFactory.createChild(self.skill_progress_con2, UIType.Image, "pro" .. i)
  135. SetAnchoredPosition(self.cur_lv_pro[i].transform, (i-3) * 12 - 6, -6)
  136. lua_resM:setImageSprite(self, self.cur_lv_pro[i]:GetComponent("Image"), "psionic_asset",
  137. i <= self.awake_lv and "ps_skill_pro1" or "ps_skill_pro0", true)
  138. end
  139. --- 计算战力和列举属性 ---
  140. local info_list = {}
  141. -- 组合配置
  142. local pre_attr = self.pre_skill_lv_cfg.attrs
  143. local pre_power = GetFighting(pre_attr)
  144. self.power_cur_txt.text = pre_power -- 懒得改节点名称了,这里展示的实际上是旧的战斗力
  145. local cur_attr = self.skill_lv_cfg.attrs -- 升级后(当前)的属性数据
  146. -- 更新战力和战力节点位置
  147. local total_len = self.power_cur_txt.preferredWidth + self.power_lb1_tmp.preferredWidth
  148. if cur_attr then
  149. local next_power = GetFighting(cur_attr)
  150. self.power_up_tmp.text = next_power - pre_power
  151. total_len = total_len + self.up_arrow.sizeDelta.x + self.power_up_tmp.preferredWidth + 15
  152. end
  153. local offset_x = (self.power_con.sizeDelta.x - total_len) / 2
  154. SetAnchoredPositionX(self.power_lb1, offset_x)
  155. SetAnchoredPositionX(self.power_cur, offset_x + self.power_lb1_tmp.preferredWidth + 5)
  156. SetAnchoredPositionX(self.up_arrow, cur_attr and self.power_cur.anchoredPosition.x + self.power_cur_txt.preferredWidth + 5 or 999999)
  157. SetAnchoredPositionX(self.power_up, self.up_arrow.anchoredPosition.x + 20)
  158. local combine_attr_list = self.model:GetPsionicLevelAttrList(pre_attr, cur_attr)
  159. -- 属性条目
  160. for k, v in ipairs(combine_attr_list) do
  161. info_list[#info_list+1] = {attr_list = v, is_max = false}
  162. end
  163. self.attr_item_creator = self.attr_item_creator or self:AddUIComponent(UI.ItemListCreator)
  164. local info = {
  165. data_list = info_list,
  166. scroll_view = self.attr_scroll,
  167. item_con = self.attr_con,
  168. item_class = PsionicSkillAttrItem,
  169. item_height = 36,
  170. start_x = 6,
  171. start_y = -4,
  172. space_y = 0,
  173. create_frequency = 0.01,
  174. alignment = UnityEngine.TextAnchor.UpperLeft,
  175. on_update_item = function(item, i, v)
  176. item:SetData(v, i)
  177. end,
  178. }
  179. self.attr_item_creator:UpdateItems(info)
  180. end
  181. end
  182. function PsionicSkillUpgradeSuccessView:UpdateAutoCloseTimer( )
  183. local close_time = TimeUtil:getServerTime() + 10
  184. local color1 = ColorUtil.GREEN_DARK
  185. local function auto_close_func()
  186. local left_time = close_time - TimeUtil:getServerTime()
  187. if left_time > 0 then
  188. self.auto_close_timer_tmp.text = string_format("<color=%s>%s</color> 秒后自动关闭", color1, left_time)
  189. else
  190. self.auto_close_timer_tmp.text = string_format("<color=%s>%s</color> 秒后自动关闭", color1, 0)
  191. self:ClearAutoCloseTimerId()
  192. self:Close()
  193. end
  194. end
  195. self:ClearAutoCloseTimerId()
  196. self.auto_close_func_id = GlobalTimerQuest:AddPeriodQuest(auto_close_func, 0.5, -1)
  197. auto_close_func()
  198. end
  199. function PsionicSkillUpgradeSuccessView:ClearAutoCloseTimerId( )
  200. if self.auto_close_func_id then
  201. GlobalTimerQuest:CancelQuest(self.auto_close_func_id)
  202. self.auto_close_func_id = nil
  203. end
  204. end
  205. function PsionicSkillUpgradeSuccessView:DestroySuccess( )
  206. self:ClearAutoCloseTimerId()
  207. end