源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

260 行
7.9 KiB

  1. --展示在界面左侧的带角色的specialtip样式
  2. SpecialTipViewTwo = SpecialTipViewTwo or BaseClass(BaseView)
  3. local SpecialTipViewTwo = SpecialTipViewTwo
  4. local TimeUtil = TimeUtil
  5. function SpecialTipViewTwo:__init()
  6. self.base_file = "common"
  7. self.layout_file = "SpecialTipViewTwo"
  8. -- 计时器里面会跑到的model,都要在这里注册,减少对_G表的搜索
  9. self.scene_mgr = SceneManager:getInstance()
  10. self.dungeon_model = BaseDungeonModel:getInstance()
  11. self.layer_name = "Main"
  12. self.destroy_imm = true
  13. self.use_background = false
  14. self.change_scene_close = true
  15. self.append_to_ctl_queue = false --是否要添加进界面堆栈
  16. self.need_show_money = false --是否要显示顶部的金钱栏
  17. self.load_callback = function ()
  18. self:LoadSuccess()
  19. self:AddEvent()
  20. end
  21. self.open_callback = function ( )
  22. self:OpenSuccess()
  23. end
  24. self.destroy_callback = function ( )
  25. self:DestroySuccess()
  26. end
  27. end
  28. -- data = {
  29. -- type, -- 类型 默认1 1=显示文本定时关闭 2=持续显示倒计时类型1(必须写sepeical_str,且只带一个%s用来展示时间)
  30. -- module_id,--模块id
  31. -- id,--子模块,与module_id共同使用来寻找Config.Languageextra中的提示语
  32. -- sepeical_str,--强制显示文本,传了次文本时,不找配置,直接显示文本内容
  33. -- show_time,--显示时长,时间过后会关闭tipview,nil或false时tipview需要发送事件手动关闭
  34. -- need_flash,--是否需要闪动
  35. -- bg_type,--传1则为红底,否则默认蓝底
  36. -- breath_call_back,--呼吸模式结束后的回调
  37. -- end_time_callback,--倒计时结束之后的回调
  38. -- }
  39. function SpecialTipViewTwo:InitTipData(data)
  40. self.module_id = data.module_id
  41. self.id = data.id
  42. self.sepeical_str = data.sepeical_str
  43. self.show_time = data.show_time
  44. self.need_flash = data.need_flash
  45. self.type = data.type or SpecialTipType.Normal
  46. if self.end_time_callback then
  47. self.end_time_callback()
  48. end
  49. self.end_time_callback = data.end_time_callback
  50. self.bg_type = data.bg_type or nil
  51. self.breath_call_back = data.breath_call_back or nil
  52. self.change_bg_flag = false--宠物副本用:是否换过背景
  53. self.need_change_bg = data.need_change_bg--是否需要换背景
  54. self.sepeical_str2 = data.sepeical_str2
  55. end
  56. function SpecialTipViewTwo:Open(data,layout_file_type,layer_name)
  57. -- if layout_file_type and self.layout_file_type ~= layout_file_type then --类型不同的预制体要重新打开界面
  58. -- self:Close()
  59. -- CommonController.Instance:Fire(EventName.OPEN_SpecialTipViewTwo, data,layout_file_type, layer_name)
  60. -- return
  61. -- elseif layer_name and self.layer_name ~= layer_name then --层级不同的也要重新打开界面
  62. -- self:Close()
  63. -- CommonController.Instance:Fire(EventName.OPEN_SpecialTipViewTwo, data,layout_file_type, layer_name)
  64. -- return
  65. -- end
  66. self:InitTipData(data)
  67. BaseView.Open(self)
  68. end
  69. function SpecialTipViewTwo:LoadSuccess()
  70. self.nodes = {
  71. "di_con/label_tip:txt", "di_con/di_tip:raw:obj","di_con",
  72. }
  73. self:GetChildren(self.nodes)
  74. self.di_con_canvas = self.di_con:GetComponent("CanvasGroup")
  75. --设置sceneView的自适应
  76. -- self.transform.sizeDelta = Vector2(ScreenWidth, ScreenHeight)
  77. SetAnchoredPosition(self.transform, 0, 0)
  78. end
  79. function SpecialTipViewTwo:AddEvent()
  80. end
  81. function SpecialTipViewTwo:OpenSuccess()
  82. self:UpdateView()
  83. --不设置显示时间时不会自动关闭界面
  84. if not self.show_time then return end
  85. local function clockFun()
  86. self.show_time = self.show_time or 0
  87. if self.show_time <= 0 then
  88. self:Close()
  89. end
  90. self.show_time = self.show_time - 1
  91. end
  92. if not self.close_time_id then
  93. self.close_time_id = GlobalTimerQuest:AddPeriodQuest(clockFun, 1, -1)
  94. if self.need_flash then
  95. self.di_con_canvas.alpha = 0
  96. self:FlashHideCall()
  97. end
  98. end
  99. end
  100. function SpecialTipViewTwo:FlashShowCall( )
  101. if self._use_delete_method then
  102. return
  103. end
  104. if self.di_con then
  105. local function callback( )
  106. self:FlashHideCall()
  107. end
  108. self.di_tip_img_anim_id = TweenLite.to(self, self.di_con_canvas, TweenLite.UiAnimationType.ALPHA, 1, 0.8, callback)
  109. -- self.label_tip_txt_anim_id = TweenLite.to(self, self.label_tip_txt, TweenLite.UiAnimationType.ALPHA_OLD, 1, 0.8, nil)
  110. end
  111. end
  112. function SpecialTipViewTwo:FlashHideCall( )
  113. if self._use_delete_method then
  114. return
  115. end
  116. if self.di_tip then
  117. local function callback( )
  118. self:FlashShowCall()
  119. end
  120. if not self.delay_hide_id then
  121. local function delay( )
  122. self:RemoveDelayHideId()
  123. self.di_tip_img_anim_id = TweenLite.to(self, self.di_con_canvas, TweenLite.UiAnimationType.ALPHA, 0.5, 0.5, callback)
  124. -- self.label_tip_txt_anim_id = TweenLite.to(self, self.label_tip_txt, TweenLite.UiAnimationType.ALPHA_OLD, 0.5, 0.5, nil)
  125. end
  126. self.delay_hide_id = setTimeout(delay,0.2)
  127. end
  128. end
  129. end
  130. function SpecialTipViewTwo:GetLabelInfo( )
  131. if not self.sepeical_str then
  132. local module_id = self.module_id or 0
  133. local id = self.id or 0
  134. local cfg = Config.Languageextra[module_id .. "@" .. id]
  135. return (cfg and cfg.content) and Trim(cfg.content) or "警报!前方高能!"
  136. else
  137. return self.sepeical_str
  138. end
  139. end
  140. function SpecialTipViewTwo:UpdateView()
  141. lua_resM:setOutsideRawImage(self, self.di_tip_raw, GameResPath.GetRoleBg("special_tip_di_2"), false)
  142. SetAnchoredPosition(self.transform,0,0)
  143. local info = self:GetLabelInfo() or ""
  144. if self.type == SpecialTipType.Normal then
  145. self.label_tip_txt.text = info
  146. -- 动态拓展倒计时的类型,就放在这里面,原则上倒计时类型可使用同一个self.tip_type_timer_id来保存计时器id
  147. elseif self.type == SpecialTipType.Timer1 then
  148. self:StartTimerType1()
  149. end
  150. end
  151. -- 类型1计时器
  152. function SpecialTipViewTwo:StartTimerType1( )
  153. local end_time = self:GetTimerTypeEndTime()
  154. local druation_speed = self:GetTimerTypeDurationSpeed()
  155. local left_time
  156. local function tipTypeTimer1Func()
  157. left_time = end_time - TimeUtil:getServerTime()
  158. left_time = left_time > 0 and left_time or 0
  159. self.label_tip_txt.text = string.format(self.sepeical_str, TimeUtil:convertTimeWithoutHour(left_time))
  160. if left_time <= 0 and self.end_time_callback then
  161. self.end_time_callback()
  162. self.end_time_callback = nil
  163. end
  164. end
  165. self.tip_type_timer_id = GlobalTimerQuest:AddPeriodQuest(tipTypeTimer1Func, druation_speed, -1)
  166. end
  167. -- 当出现多个Tip同时发过来的时候做覆盖处理,最后一个发过来的作为当前显示
  168. function SpecialTipViewTwo:UpdateTips(data)
  169. self:InitTipData(data)
  170. -- 清除掉所有事件
  171. self:RemoveCloseTimeId()
  172. self:RemoveDelayHideId()
  173. self:RemoveTimerTypeId()
  174. self:StopAllAnim()
  175. -- 初始化所有文本
  176. self:InitAllText()
  177. -- 重置UI状态
  178. -- self.di_tip_img.alpha = 0.8
  179. -- SetAlpha(self.label_tip_txt, 0.8)
  180. self:UpdateView()
  181. --不设置显示时间时不会自动关闭界面
  182. if not self.show_time then return end
  183. -- 重新开始计时
  184. local function clockFun()
  185. self.show_time = self.show_time or 0
  186. if self.show_time <= 0 then
  187. self:Close()
  188. end
  189. self.show_time = self.show_time - 1
  190. end
  191. if not self.close_time_id then
  192. self.close_time_id = GlobalTimerQuest:AddPeriodQuest(clockFun, 1, -1)
  193. if self.need_flash then
  194. self:FlashHideCall()
  195. end
  196. end
  197. end
  198. -- 初始化所有的文本
  199. function SpecialTipViewTwo:InitAllText( )
  200. self.label_tip_txt.text = ""
  201. end
  202. function SpecialTipViewTwo:RemoveCloseTimeId( )
  203. if self.close_time_id then
  204. GlobalTimerQuest:CancelQuest(self.close_time_id)
  205. self.close_time_id = nil
  206. end
  207. end
  208. function SpecialTipViewTwo:RemoveDelayHideId( )
  209. if self.delay_hide_id then
  210. GlobalTimerQuest:CancelQuest(self.delay_hide_id)
  211. self.delay_hide_id = nil
  212. end
  213. end
  214. function SpecialTipViewTwo:RemoveTimerTypeId( )
  215. if self.tip_type_timer_id then
  216. GlobalTimerQuest:CancelQuest(self.tip_type_timer_id)
  217. self.tip_type_timer_id = nil
  218. end
  219. end
  220. function SpecialTipViewTwo:StopAllAnim( )
  221. if self.di_tip_img_anim_id then
  222. TweenLite.Stop(self.di_tip_img_anim_id)
  223. self.di_tip_img_anim_id = nil
  224. end
  225. end
  226. function SpecialTipViewTwo:DestroySuccess( )
  227. self:RemoveCloseTimeId()
  228. self:RemoveDelayHideId()
  229. self:RemoveTimerTypeId()
  230. end