源战役客户端
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

274 wiersze
9.5 KiB

1 miesiąc temu
  1. -- <*
  2. -- @Author: Saber
  3. -- @Description: 完成成就的弹出提示界面
  4. -- *>
  5. AchieveTipsView = AchieveTipsView or BaseClass(BaseView)
  6. local AchieveTipsView = AchieveTipsView
  7. function AchieveTipsView:__init()
  8. self.base_file = "achievement"
  9. self.layout_file = "AchieveTipsView"
  10. self.layer_name = "Top"
  11. self.destroy_imm = true
  12. self.use_background = false --全屏界面默认使用这个参数
  13. self.is_animating = false -- 是否在动画中
  14. self.hide_time = 2 -- n秒后播放界面隐藏动画
  15. self.btn_des = "领取" -- 按钮文本
  16. self.left_time_des = "领取" -- 倒计时文本
  17. self.awardItem_list = {}
  18. self.receive_flag = nil -- 读取完界面数据后,用于发送领取协议的关键键值
  19. self.model = AchieveModel:getInstance()
  20. self.model.tip_view_show = true
  21. self.load_callback = function ()
  22. self:LoadSuccess()
  23. self:AddEvent()
  24. end
  25. self.open_callback = function ( )
  26. self:OpenSuccess()
  27. end
  28. self.destroy_callback = function ( )
  29. self:DestroySuccess()
  30. end
  31. end
  32. function AchieveTipsView:Open(achv_data)
  33. self.achv_data = achv_data
  34. BaseView.Open(self)
  35. end
  36. --重用界面,5秒后再销毁
  37. function AchieveTipsView:ResetViewInfo(achv_data)
  38. self.achv_data = achv_data
  39. self.transform.anchoredPosition = Vector2(-3.5, 61.5)
  40. self.receive_flag = nil
  41. self.gameObject:SetActive(true)
  42. if self.delay_closeview_id then
  43. TimerQuest.CancelQuest(GlobalTimerQuest,self.delay_closeview_id)
  44. self.delay_closeview_id = nil
  45. end
  46. self:UpdateView() -- 更新数据
  47. self:StartCloseTimer() -- 开始对界面的关闭进行计时
  48. self:OpenAnimation() -- 播放打开界面的动画
  49. end
  50. function AchieveTipsView:LoadSuccess()
  51. local nodes = {
  52. -- 成就完成弹窗相关
  53. "achieve_tip:obj",
  54. "achieve_tip/achi_award_con", -- 成就奖励容器
  55. "achieve_tip/achi_receive_btn:obj", -- 成就领取按钮
  56. "achieve_tip/achi_desc:tmp", "achieve_tip/achi_name:tmp", -- 成就信息
  57. "achieve_tip/achi_receive_btn/receive_btn_des:tmp",
  58. -- 章节完成弹窗相关
  59. "chapter_tip:obj",
  60. "chapter_tip/chapter_receive_btn:obj", -- 章节领取按钮
  61. "chapter_tip/chapter_img:img", -- 章节相关立绘图
  62. "chapter_tip/chapter_des:img", -- 章节称号容器
  63. "chapter_tip/chapter_name:tmp", -- 章节名称
  64. "chapter_tip/role_sp:raw", -- 立绘
  65. "chapter_tip/chapter_receive_btn/chapter_btn_des:tmp",
  66. -- 其他
  67. "close_timer:tmp",
  68. }
  69. self:GetChildren(nodes)
  70. self.canvasGroup = self.gameObject:GetComponent("CanvasGroup")
  71. self.transform.anchoredPosition = Vector2(-3.5, 61.5)
  72. end
  73. function AchieveTipsView:AddEvent()
  74. local function click_event(target)
  75. self:ReceiveAchieveFunc()
  76. self:ClearHideTimer()
  77. self:AutoCloseFunc()
  78. end
  79. AddClickEvent(self.achi_receive_btn_obj, click_event)
  80. AddClickEvent(self.chapter_receive_btn_obj, click_event)
  81. end
  82. function AchieveTipsView:OpenSuccess()
  83. self:UpdateView()
  84. self:StartCloseTimer()
  85. self:OpenAnimation() -- 播放打开界面的动画
  86. end
  87. function AchieveTipsView:UpdateView()
  88. local cfg
  89. self.achieve_tip_obj:SetActive(not self.achv_data.is_chapter)
  90. self.chapter_tip_obj:SetActive(self.achv_data.is_chapter)
  91. if self.achv_data.is_chapter then -- 完成章节
  92. cfg = Config.Achievementcategoryreward[self.achv_data.data.category]
  93. self.receive_flag = self.achv_data.data.category
  94. self.chapter_name_tmp.text = Trim(cfg.name)
  95. -- 加载称号资源
  96. local designation = stringtotable(cfg.reward)[1][2]
  97. local designation_id = DesignationModel:GetInstance():GetDesignationIdByGoodsId(designation)
  98. lua_resM:setOutsideImageSprite(self, self.chapter_des_img, GameResPath.GetDesignImage(designation_id), true)
  99. -- 加载立绘资源
  100. lua_resM:setOutsideRawImage(self, self.role_sp_raw, GameResPath.GetAchieveRoleSP("small" .. self.achv_data.data.category), true)
  101. else -- 完成成就
  102. cfg = Config.Achievement[self.achv_data.data.category .. "@" .. self.achv_data.data.sub_category]
  103. self.receive_flag = {category = self.achv_data.data.category, sub_category = self.achv_data.data.sub_category}
  104. self.achi_name_tmp.text = string.format('<color=#ffffff>第%s章</color> %s', WordManager:getHanZiNumber(self.achv_data.data.category), Trim(cfg.name))
  105. self.achi_desc_tmp.text = Trim(cfg.desc)
  106. -- 加载奖励内容
  107. local reward = stringtotable(cfg.reward)
  108. for k, v in ipairs(reward) do
  109. local item = self.awardItem_list[k]
  110. if not item then
  111. item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.achi_award_con)
  112. self.awardItem_list[k] = item
  113. end
  114. item:SetItemSize(62, 62)
  115. item:SetPosition(self.achi_award_con.sizeDelta.x/2 +((k-1) - #reward/2) * 75 + 5, -3)
  116. item:SetVisible(true)
  117. local typeId, lock = GoodsModel:getInstance():GetMappingTypeId(v[1], v[2])
  118. item:SetData(typeId, v[3], nil, nil, lock)
  119. end
  120. if #reward < #self.awardItem_list then
  121. for i = #reward+1, #self.awardItem_list do
  122. self.awardItem_list[i]:SetVisible(false)
  123. end
  124. end
  125. end
  126. if self.model:CheckCanQuickGetReward() then
  127. self.btn_des = "领取"
  128. self.left_time_des = "领取"
  129. else
  130. self.btn_des = "前往"
  131. self.left_time_des = "关闭"
  132. end
  133. self.receive_btn_des_tmp.text = self.btn_des
  134. self.chapter_btn_des_tmp.text = self.btn_des
  135. end
  136. -- 开始界面关闭的倒计时
  137. function AchieveTipsView:StartCloseTimer()
  138. SetAnchoredPositionY(self.close_timer, -16.5)
  139. self:ClearHideTimer()
  140. -- if self.achv_data.is_chapter then
  141. -- self.close_timer.anchoredPosition = Vector2(237.5, 17.5)
  142. -- self.finished.anchoredPosition = Vector2(-84, -19)
  143. -- else
  144. -- self.close_timer.anchoredPosition = Vector2(229.5, 13)
  145. -- self.finished.anchoredPosition = Vector2(-205, -19)
  146. -- end
  147. local end_time = self.hide_time + TimeUtil:getServerTime()
  148. local function hide_timer()
  149. local left_time = end_time - TimeUtil:getServerTime()
  150. self.close_timer_tmp.text = left_time >= 0 and string.format("(<color=%s>%ss</color>后自动%s)", ColorUtil.GREEN_DARK, math.ceil(left_time+1), self.left_time_des) or ""
  151. if left_time < 0 then
  152. self:ClearHideTimer()
  153. self:AutoCloseFunc()
  154. -- self:TimeOverReceiveAchieveFunc() -- 策划说不用自动前往了
  155. end
  156. end
  157. hide_timer()
  158. self.hide_timer_id = GlobalTimerQuest:AddPeriodQuest(hide_timer, 0.1, -1)
  159. -- 设置动画标志量
  160. self.is_animating = true
  161. end
  162. -- 点击按钮后的响应
  163. function AchieveTipsView:ReceiveAchieveFunc( )
  164. if not self.receive_flag then return end
  165. if self.model:CheckCanQuickGetReward() then -- 快捷领取
  166. if type(self.receive_flag) == "table" then -- 表格式,说明是成就奖励
  167. self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40903, self.receive_flag.category, self.receive_flag.sub_category)
  168. else -- 否则则是章节奖励的category
  169. self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40901, self.receive_flag)
  170. end
  171. else -- 直接跳转
  172. self:OpenAchieveView()
  173. end
  174. end
  175. -- 倒计时结束的响应
  176. function AchieveTipsView:TimeOverReceiveAchieveFunc( )
  177. if not self.receive_flag then return end
  178. if self.model:CheckCanQuickGetReward() then -- 快捷领取
  179. if type(self.receive_flag) == "table" then -- 表格式,说明是成就奖励
  180. self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40903, self.receive_flag.category, self.receive_flag.sub_category)
  181. else -- 否则则是章节奖励的category
  182. self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40901, self.receive_flag)
  183. end
  184. else -- 直接关闭
  185. end
  186. end
  187. function AchieveTipsView:ClearHideTimer( )
  188. if self.hide_timer_id then
  189. GlobalTimerQuest:CancelQuest(self.hide_timer_id)
  190. self.hide_timer_id = nil
  191. end
  192. end
  193. function AchieveTipsView:AutoCloseFunc( )
  194. local function callback()
  195. self:ClearHideTimer()
  196. self.gameObject:SetActive(false)
  197. local function delay_closeview( )
  198. BaseView.Close(self)
  199. end
  200. self.delay_closeview_id = setTimeout(delay_closeview, 5)
  201. -- 设置动画标志量
  202. self.is_animating = false
  203. -- 查看是否有称号还没展示完成界面
  204. self.model:Fire(AchieveModel.OPEN_ACHIEVE_TIPS_VIEW, true)
  205. end
  206. self:CloseAnimation(callback)
  207. end
  208. -- 跳转到成就界面指定章节
  209. function AchieveTipsView:OpenAchieveView( )
  210. local category = self.achv_data.data.category
  211. end
  212. -- 播放打开界面的动画
  213. function AchieveTipsView:OpenAnimation()
  214. self.canvasGroup.alpha = 0
  215. if self.alpha_anim_id then
  216. TweenLite.Stop(self.alpha_anim_id)
  217. self.alpha_anim_id = nil
  218. end
  219. self.alpha_anim_id = TweenLite.to(self, self.canvasGroup, TweenLite.UiAnimationType.ALPHA, 1, 0.2)
  220. end
  221. -- 关闭(隐藏)界面的动画
  222. function AchieveTipsView:CloseAnimation(callback)
  223. self.canvasGroup.alpha = 1
  224. if self.alpha_anim_id then
  225. TweenLite.Stop(self.alpha_anim_id)
  226. self.alpha_anim_id = nil
  227. end
  228. self.alpha_anim_id = TweenLite.to(self, self.canvasGroup,TweenLite.UiAnimationType.ALPHA, 0, 0.5)
  229. local pos_y = self.transform.anchoredPosition.y + 100
  230. if self.pos_id then
  231. TweenLite.Stop(self.pos_id)
  232. self.pos_id = nil
  233. end
  234. self.pos_id = TweenLite.to(self, self.transform, TweenLite.UiAnimationType.ANCHORED_POSY, pos_y, 0.5, callback)
  235. end
  236. function AchieveTipsView:DestroySuccess( )
  237. self.model.tip_view_show = false
  238. self:ClearHideTimer()
  239. if self.delay_closeview_id then
  240. TimerQuest.CancelQuest(GlobalTimerQuest,self.delay_closeview_id)
  241. self.delay_closeview_id = nil
  242. end
  243. if self.alpha_anim_id then
  244. TweenLite.Stop(self.alpha_anim_id)
  245. self.alpha_anim_id = nil
  246. end
  247. if self.pos_id then
  248. TweenLite.Stop(self.pos_id)
  249. self.pos_id = nil
  250. end
  251. for i,item in pairs(self.awardItem_list) do
  252. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, item)
  253. end
  254. self.awardItem_list = {}
  255. end