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

246 regels
6.4 KiB

4 weken geleden
  1. SysInfoNoticeView = SysInfoNoticeView or BaseClass()
  2. SysInfoNoticeView.MAX_MSG_COUNT = 10
  3. function SysInfoNoticeView:__init()
  4. self.has_text = false
  5. self.time = 0.0
  6. self.item = nil
  7. self.speed = 800 / 6
  8. self.move_left_speed = 800 / 8
  9. self.text_len = 490
  10. self.start_pos_x = -243
  11. self.cur_item = false
  12. self.msg_list = Array.New()
  13. self.text_list = Array.New()
  14. self.idle_text_list = Array.New()
  15. self.icon = nil
  16. local function call_back(objs)
  17. self.prefab_asset = objs[0]
  18. self:CreateMessageContainer()
  19. for i=1,3 do
  20. self.text_list:PushBack(self.item:GetChild("mask/Text"..i))
  21. end
  22. self.icon = self.item:GetChild("bg/icon")
  23. self.mask = self.item:GetChild("bg/mask")
  24. end
  25. lua_resM:loadPrefab(self,"common","chuanwen", call_back)
  26. local event = function ()
  27. self.msg_list:Clear()
  28. end
  29. GlobalEventSystem:Bind(EventName.CHANGE_ACCOUNT,event)
  30. GlobalEventSystem:Bind(EventName.CHANGE_ROLE,event)
  31. end
  32. function SysInfoNoticeView:__delete()
  33. lua_resM:clearReference(self)
  34. self:CancelDelayTimer()
  35. end
  36. function SysInfoNoticeView:CancelDelayTimer( )
  37. if self.time_id then
  38. GlobalTimerQuest:CancelQuest(self.time_id)
  39. self.time_id = nil
  40. end
  41. if self.delay_move_left_time_id then
  42. GlobalTimerQuest:CancelQuest(self.delay_move_left_time_id)
  43. self.delay_move_left_time_id = nil
  44. end
  45. if self.delay_id then
  46. GlobalTimerQuest:CancelQuest(self.delay_id)
  47. self.delay_id = nil
  48. end
  49. end
  50. function SysInfoNoticeView:CreateMessageContainer()
  51. if self.prefab_asset then
  52. self.item = ChuanwenItem.New(panelMgr:GetParent("Top"),self.prefab_asset)
  53. self.canvasGrop = self.item.transform:GetComponent("CanvasGroup")
  54. end
  55. end
  56. function SysInfoNoticeView:AppendMessage(content)
  57. if self.msg_list:GetSize() >= SysInfoNoticeView.MAX_MSG_COUNT then
  58. self.msg_list:PopFront()
  59. end
  60. self.msg_list:PushBack(content)
  61. if not self.has_text then
  62. self:RunMessage()
  63. end
  64. end
  65. function SysInfoNoticeView:RunMessage()
  66. if not self.item then return end
  67. content = self.msg_list:PopFront()
  68. if not content then return end
  69. if SceneManager:getInstance():IsNoHornAndNoticeScene() then return end
  70. local text = self.text_list:PopFront()
  71. --1.所有text正在使用 2.TweenLite回调没有执行 -->把第一个text取出使用
  72. if not text then text = self.idle_text_list:PopFront() return end
  73. self.idle_text_list:PushBack(text)
  74. ---- 添加超链接
  75. text:GetComponent("Text").text = content
  76. SetInlineText(text:GetComponent("Text"), content)
  77. local call_fun = function (param_list)
  78. local chatModel = ChatModel:getInstance()
  79. chatModel.clicked_item = self
  80. chatModel.chick_hyperlink_mark = true
  81. chatModel:FireSpecialTab(param_list)
  82. end
  83. AddUnderLineAndClick(self, text, call_fun)
  84. --去掉超链接,去掉换行符
  85. --content = PackageSpecialTab(content)
  86. --content = string.gsub(content, "\n", "")
  87. --content = string.gsub(content,"<a.->","")
  88. --content = string.gsub(content,"</a>","")
  89. text.sizeDelta = Vector2(text:GetComponent("Text").preferredWidth,35)
  90. self.has_text = true
  91. self.item.gameObject:SetActive(true)
  92. text.gameObject:SetActive(true)
  93. --SetLocalPositionX(self.icon, -23-( text:GetComponent("Text").preferredWidth/2))
  94. --滚屏
  95. local pos = text.localPosition
  96. local tSize = self.item.transform.sizeDelta
  97. self.time = text.sizeDelta.x / self.speed
  98. self.time = math.max(self.time, 2)
  99. local left_time = 0
  100. local left_delay_time = 0
  101. if text.sizeDelta.x > self.text_len then
  102. left_time = (text.sizeDelta.x - self.text_len) / self.move_left_speed
  103. left_delay_time = 0.2
  104. end
  105. local item = text
  106. if self.tween_out_id and not self.cur_item then
  107. SetAnchoredPosition(item.transform, self.start_pos_x, -35 - 17.5)
  108. self:MoveIn(item)
  109. self.cur_item = item
  110. left_delay_time = left_time > 0 and left_delay_time + 0.5 or 0
  111. else
  112. self.cur_item = item
  113. SetAnchoredPosition(item.transform, self.start_pos_x, 0, - 17.5)
  114. end
  115. local onDelay = function ( )
  116. self.text_list:PushBack(self.idle_text_list:PopFront())
  117. if self.msg_list:GetSize() <= 0 then
  118. self.item.gameObject:SetActive(false)
  119. self.cur_item.gameObject:SetActive(false)
  120. self.has_text = false
  121. else
  122. self:MoveOut(self.cur_item)
  123. self.cur_item = false
  124. self:RunMessage()
  125. end
  126. end
  127. self:CancelDelayTimer()
  128. self:StopMoveLeft()
  129. if left_time > 0 then
  130. self:MoveLeft(self.cur_item, - 10 - (text.sizeDelta.x - self.text_len), left_time, left_delay_time)
  131. end
  132. self.time_id = setTimeout(onDelay, self.time + left_delay_time )
  133. end
  134. function SysInfoNoticeView:SetHide(bool)
  135. self.item.gameObject:SetActive(not bool)
  136. end
  137. function SysInfoNoticeView:MoveIn(item)
  138. self:StopMoveIn()
  139. if item then
  140. local function callback()
  141. self:StopMoveIn()
  142. end
  143. self.move_in_item = item
  144. self.tween_in_id = TweenLite.to(self, self.move_in_item.transform, TweenLite.UiAnimationType.POSY, -17.5, 0.5, callback, TweenFunc.EASE_OUT)
  145. end
  146. end
  147. function SysInfoNoticeView:StopMoveIn()
  148. if self.tween_int_id then
  149. TweenLite.Stop(self.tween_int_id)
  150. self.tween_int_id = nil
  151. end
  152. if self.move_in_item then
  153. self.move_in_item = false
  154. end
  155. end
  156. function SysInfoNoticeView:MoveOut(item)
  157. self:StopMoveOut()
  158. if item then
  159. local function callback()
  160. item.gameObject:SetActive(false)
  161. self:StopMoveOut()
  162. end
  163. self.move_out_item = item
  164. self.tween_out_id = TweenLite.to(self, self.move_out_item.transform, TweenLite.UiAnimationType.POSY, 35 - 17.5, 0.5, callback, TweenFunc.EASE_OUT)
  165. end
  166. end
  167. function SysInfoNoticeView:StopMoveOut()
  168. if self.tween_out_id then
  169. TweenLite.Stop(self.tween_out_id)
  170. self.tween_out_id = nil
  171. end
  172. if self.move_out_item then
  173. self.move_out_item = false
  174. end
  175. end
  176. function SysInfoNoticeView:MoveLeft(item, pos, time, left_delay_time)
  177. self:StopMoveLeft()
  178. local onDelay = function ( ... )
  179. if item then
  180. local function callback()
  181. self:StopMoveLeft()
  182. end
  183. self.move_left_item = item
  184. self.tween_left_id = TweenLite.to(self, self.move_left_item.transform, TweenLite.UiAnimationType.POSX, pos, time, callback)
  185. end
  186. end
  187. if left_delay_time and left_delay_time > 0 then
  188. self.delay_move_left_time_id = setTimeout(onDelay, left_delay_time)
  189. else
  190. onDelay()
  191. end
  192. end
  193. function SysInfoNoticeView:StopMoveLeft()
  194. if self.tween_left_id then
  195. TweenLite.Stop(self.tween_left_id)
  196. self.tween_left_id = nil
  197. end
  198. if self.move_left_item then
  199. self.move_left_item = false
  200. end
  201. end
  202. function SysInfoNoticeView:StopAll()
  203. self:StopMoveIn()
  204. self:StopMoveOut()
  205. self:StopMoveLeft()
  206. end
  207. function SysInfoNoticeView:HaveCurrentItem()
  208. return self.cur_item
  209. end