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

206 lines
5.7 KiB

пре 4 недеља
  1. MiniMessageView = MiniMessageView or BaseClass(BaseView)
  2. local MiniMessageView = MiniMessageView
  3. MiniMessageView.CACHE_MSG_COUNT = 15
  4. function MiniMessageView:__init()
  5. self.base_file = "message"
  6. self.layout_file = "MiniMessageView"
  7. self.layer_name = "Top"
  8. self.destroy_imm = true
  9. self.use_background = false --全屏界面默认使用这个参数
  10. self.mask_open_sound = true
  11. self.mask_close_sound = true
  12. --self.hide_maincancas = true --全屏界面需要放开隐藏主UI
  13. self.change_scene_close = false
  14. self.append_to_ctl_queue = false --是否要添加进界面堆栈
  15. self.need_show_money = false --是否要显示顶部的金钱栏
  16. self.all_msg_list = {}
  17. self.cache_item_list = Array.New()
  18. self.cur_item_list = {}
  19. self.real_index = 0 --所有创建过的item的数量
  20. self.can_show = true
  21. self.screen_height = 2 * ScreenHeight / 5 - 20
  22. self.load_callback = function ()
  23. self:LoadSuccess()
  24. self:AddEvent()
  25. end
  26. self.open_callback = function ( )
  27. self:OpenSuccess()
  28. end
  29. self.switch_callback = function(index)
  30. self:SwitchTab(index)
  31. end
  32. self.destroy_callback = function ( )
  33. self:DestroySuccess()
  34. end
  35. end
  36. function MiniMessageView:Open( )
  37. --self.data = data
  38. BaseView.Open(self)
  39. end
  40. function MiniMessageView:LoadSuccess()
  41. local nodes = {
  42. "item_con:obj",
  43. }
  44. self:GetChildren(nodes)
  45. end
  46. function MiniMessageView:AddEvent()
  47. local function call_back(objs)
  48. self.prefab_asset = objs[0]
  49. self:CreateCacheItem()
  50. end
  51. lua_resM:loadPrefab(self,"message","miniMessage", call_back)
  52. local event = function ()
  53. self.all_msg_list = {}
  54. end
  55. self.scene_id = GlobalEventSystem:Bind(SceneEventType.OPEN_SCENE_LOAD_VIEW,event)
  56. local func = function ()
  57. self.all_msg_list = {}
  58. end
  59. self.account_change_id = GlobalEventSystem:Bind(EventName.CHANGE_ACCOUNT,func)
  60. self.role_change_id = GlobalEventSystem:Bind(EventName.CHANGE_ROLE,func)
  61. end
  62. function MiniMessageView:OpenSuccess()
  63. self:UpdateView()
  64. self:StartResetTime()
  65. end
  66. function MiniMessageView:CreateCacheItem( )
  67. for index = 0, MiniMessageView.CACHE_MSG_COUNT do
  68. local item = MessageItemNew.New(self.item_con,self.prefab_asset,nil,function(item)
  69. item:SetVisible(false)
  70. end)
  71. self.cache_item_list:PushBack(item)
  72. end
  73. end
  74. function MiniMessageView:UpdateView()
  75. local size = TableSize(self.all_msg_list)
  76. if size <= 0 then
  77. return
  78. else
  79. self:SetTop()
  80. end
  81. local real_index = self.real_index
  82. local function callback( item,index, real_index)
  83. self.all_msg_list[real_index] = nil
  84. item:SetVisible(false)
  85. item:Reset()
  86. self.cache_item_list:PushBack(item)
  87. self.cur_item_list[real_index] = nil
  88. end
  89. for index=1, real_index do
  90. local data = self.all_msg_list[index]
  91. if data then
  92. local item = self.cur_item_list[data.real_index]
  93. if not item then
  94. item = self.cache_item_list:PopFront()
  95. -- if not item then
  96. -- item = MessageItemNew.New(self.item_con,self.prefab_asset,nil)
  97. -- end
  98. if item then
  99. item:Reset()--不管是创建的还是拿缓存池的 都先重置
  100. end
  101. end
  102. if item then
  103. item:SetData(data, self.real_index, data.real_index, callback)
  104. self.cur_item_list[data.real_index] = item
  105. else
  106. self.real_index = index
  107. break
  108. end
  109. end
  110. end
  111. self:MoveItemCon()
  112. end
  113. --移动整个con
  114. function MiniMessageView:MoveItemCon( )
  115. local pos_y = (MessageItemNew.Height) * (self.real_index-1) - self.screen_height
  116. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.item_con)
  117. SetAnchoredPositionY(self.item_con, pos_y)
  118. local moveup_action_time1 = 0.5
  119. local function action_end_func()
  120. -- self.callback(self, self.index)
  121. end
  122. local callfun1 = cc.CallFunc.New(action_end_func)
  123. local pre_pos_x, pre_pos_y = GetAnchoredPosition(self.item_con)
  124. local moveAction1 = cc.MoveTo.createAnchoredType(moveup_action_time1, 0, pos_y + (MessageItemNew.Height), pre_pos_x, pre_pos_y)
  125. moveAction1 = cc.EaseCircleActionOut.New( moveAction1)
  126. local action = cc.Sequence.New(moveAction1,delayTime3, callfun1)
  127. cc.ActionManager:getInstance():addAction(action, self.item_con)
  128. end
  129. function MiniMessageView:StartResetTime( )
  130. local function time_callback()
  131. if TableSize(self.cur_item_list) == 0 then
  132. self.real_index = 0
  133. SetAnchoredPositionY(self.item_con, - self.screen_height)
  134. self:StopResetTime()
  135. end
  136. end
  137. SysInfoCtrl.Instance:SetFuncCallBack(time_callback, "MiniMessageView:StartResetTime")
  138. end
  139. function MiniMessageView:StopResetTime( )
  140. SysInfoCtrl.Instance:DeleteFuncCallBack("MiniMessageView:StartResetTime")
  141. end
  142. --这里要置顶,避免有orderinlayer的界面挡住
  143. function MiniMessageView:SetTop( )
  144. UIDepth.SetUIDepth(self.gameObject,true,900)
  145. self:ResetUIZDepth()
  146. self:AddUIZDepth()
  147. --特殊处理,z轴和orderInLayer 乱了
  148. SetLocalPositionZ(self.transform, GetLocalPositionZ(self.transform)-1000)
  149. end
  150. --新消息实时来添加
  151. function MiniMessageView:AppendMessage(content)
  152. if not self.prefab_asset then
  153. return
  154. end
  155. self.real_index = self.real_index + 1
  156. local data = {
  157. content = content,
  158. real_index = self.real_index
  159. }
  160. self.all_msg_list[self.real_index] = data
  161. self:StartResetTime()
  162. self:UpdateView()
  163. end
  164. function MiniMessageView:SetHide(bool)
  165. self.item_con_obj:SetActive(bool)
  166. end
  167. function MiniMessageView:DestroySuccess( )
  168. if self.account_change_id then
  169. GlobalEventSystem:UnBind(self.account_change_id)
  170. self.account_change_id = nil
  171. end
  172. if self.role_change_id then
  173. GlobalEventSystem:UnBind(self.role_change_id)
  174. self.role_change_id = nil
  175. end
  176. if self.scene_id then
  177. GlobalEventSystem:UnBind(self.scene_id)
  178. self.scene_id = nil
  179. end
  180. for k,v in pairs(self.cur_item_list) do
  181. v:DeleteMe()
  182. v = nil
  183. end
  184. self.cur_item_list = {}
  185. local function callback( item )
  186. item:DeleteMe()
  187. end
  188. self.cache_item_list:ForEach(callback)
  189. self.cache_item_list:Clear()
  190. end