MiniMessageView = MiniMessageView or BaseClass(BaseView)
|
|
local MiniMessageView = MiniMessageView
|
|
MiniMessageView.CACHE_MSG_COUNT = 15
|
|
|
|
function MiniMessageView:__init()
|
|
self.base_file = "message"
|
|
self.layout_file = "MiniMessageView"
|
|
self.layer_name = "Top"
|
|
self.destroy_imm = true
|
|
self.use_background = false --全屏界面默认使用这个参数
|
|
self.mask_open_sound = true
|
|
self.mask_close_sound = true
|
|
--self.hide_maincancas = true --全屏界面需要放开隐藏主UI
|
|
self.change_scene_close = false
|
|
self.append_to_ctl_queue = false --是否要添加进界面堆栈
|
|
self.need_show_money = false --是否要显示顶部的金钱栏
|
|
self.all_msg_list = {}
|
|
self.cache_item_list = Array.New()
|
|
self.cur_item_list = {}
|
|
self.real_index = 0 --所有创建过的item的数量
|
|
self.can_show = true
|
|
self.screen_height = 2 * ScreenHeight / 5 - 20
|
|
self.load_callback = function ()
|
|
self:LoadSuccess()
|
|
self:AddEvent()
|
|
end
|
|
self.open_callback = function ( )
|
|
self:OpenSuccess()
|
|
end
|
|
self.switch_callback = function(index)
|
|
self:SwitchTab(index)
|
|
end
|
|
self.destroy_callback = function ( )
|
|
self:DestroySuccess()
|
|
end
|
|
end
|
|
|
|
function MiniMessageView:Open( )
|
|
--self.data = data
|
|
BaseView.Open(self)
|
|
end
|
|
|
|
function MiniMessageView:LoadSuccess()
|
|
local nodes = {
|
|
"item_con:obj",
|
|
}
|
|
self:GetChildren(nodes)
|
|
end
|
|
|
|
function MiniMessageView:AddEvent()
|
|
local function call_back(objs)
|
|
self.prefab_asset = objs[0]
|
|
self:CreateCacheItem()
|
|
end
|
|
lua_resM:loadPrefab(self,"message","miniMessage", call_back)
|
|
local event = function ()
|
|
self.all_msg_list = {}
|
|
end
|
|
self.scene_id = GlobalEventSystem:Bind(SceneEventType.OPEN_SCENE_LOAD_VIEW,event)
|
|
|
|
local func = function ()
|
|
self.all_msg_list = {}
|
|
end
|
|
self.account_change_id = GlobalEventSystem:Bind(EventName.CHANGE_ACCOUNT,func)
|
|
self.role_change_id = GlobalEventSystem:Bind(EventName.CHANGE_ROLE,func)
|
|
end
|
|
|
|
function MiniMessageView:OpenSuccess()
|
|
self:UpdateView()
|
|
self:StartResetTime()
|
|
end
|
|
|
|
function MiniMessageView:CreateCacheItem( )
|
|
for index = 0, MiniMessageView.CACHE_MSG_COUNT do
|
|
local item = MessageItemNew.New(self.item_con,self.prefab_asset,nil,function(item)
|
|
item:SetVisible(false)
|
|
end)
|
|
self.cache_item_list:PushBack(item)
|
|
end
|
|
end
|
|
|
|
function MiniMessageView:UpdateView()
|
|
local size = TableSize(self.all_msg_list)
|
|
if size <= 0 then
|
|
return
|
|
else
|
|
self:SetTop()
|
|
end
|
|
local real_index = self.real_index
|
|
local function callback( item,index, real_index)
|
|
self.all_msg_list[real_index] = nil
|
|
item:SetVisible(false)
|
|
item:Reset()
|
|
self.cache_item_list:PushBack(item)
|
|
self.cur_item_list[real_index] = nil
|
|
end
|
|
for index=1, real_index do
|
|
local data = self.all_msg_list[index]
|
|
if data then
|
|
local item = self.cur_item_list[data.real_index]
|
|
if not item then
|
|
item = self.cache_item_list:PopFront()
|
|
-- if not item then
|
|
-- item = MessageItemNew.New(self.item_con,self.prefab_asset,nil)
|
|
-- end
|
|
if item then
|
|
item:Reset()--不管是创建的还是拿缓存池的 都先重置
|
|
end
|
|
end
|
|
if item then
|
|
item:SetData(data, self.real_index, data.real_index, callback)
|
|
self.cur_item_list[data.real_index] = item
|
|
else
|
|
self.real_index = index
|
|
break
|
|
end
|
|
end
|
|
end
|
|
self:MoveItemCon()
|
|
end
|
|
--移动整个con
|
|
function MiniMessageView:MoveItemCon( )
|
|
local pos_y = (MessageItemNew.Height) * (self.real_index-1) - self.screen_height
|
|
cc.ActionManager:getInstance():removeAllActionsFromTarget(self.item_con)
|
|
SetAnchoredPositionY(self.item_con, pos_y)
|
|
local moveup_action_time1 = 0.5
|
|
local function action_end_func()
|
|
-- self.callback(self, self.index)
|
|
end
|
|
local callfun1 = cc.CallFunc.New(action_end_func)
|
|
local pre_pos_x, pre_pos_y = GetAnchoredPosition(self.item_con)
|
|
local moveAction1 = cc.MoveTo.createAnchoredType(moveup_action_time1, 0, pos_y + (MessageItemNew.Height), pre_pos_x, pre_pos_y)
|
|
moveAction1 = cc.EaseCircleActionOut.New( moveAction1)
|
|
local action = cc.Sequence.New(moveAction1,delayTime3, callfun1)
|
|
cc.ActionManager:getInstance():addAction(action, self.item_con)
|
|
end
|
|
|
|
function MiniMessageView:StartResetTime( )
|
|
local function time_callback()
|
|
if TableSize(self.cur_item_list) == 0 then
|
|
self.real_index = 0
|
|
SetAnchoredPositionY(self.item_con, - self.screen_height)
|
|
self:StopResetTime()
|
|
end
|
|
end
|
|
SysInfoCtrl.Instance:SetFuncCallBack(time_callback, "MiniMessageView:StartResetTime")
|
|
end
|
|
|
|
function MiniMessageView:StopResetTime( )
|
|
SysInfoCtrl.Instance:DeleteFuncCallBack("MiniMessageView:StartResetTime")
|
|
end
|
|
|
|
--这里要置顶,避免有orderinlayer的界面挡住
|
|
function MiniMessageView:SetTop( )
|
|
UIDepth.SetUIDepth(self.gameObject,true,900)
|
|
self:ResetUIZDepth()
|
|
self:AddUIZDepth()
|
|
--特殊处理,z轴和orderInLayer 乱了
|
|
SetLocalPositionZ(self.transform, GetLocalPositionZ(self.transform)-1000)
|
|
end
|
|
|
|
--新消息实时来添加
|
|
function MiniMessageView:AppendMessage(content)
|
|
if not self.prefab_asset then
|
|
return
|
|
end
|
|
self.real_index = self.real_index + 1
|
|
local data = {
|
|
content = content,
|
|
real_index = self.real_index
|
|
}
|
|
self.all_msg_list[self.real_index] = data
|
|
self:StartResetTime()
|
|
self:UpdateView()
|
|
end
|
|
|
|
function MiniMessageView:SetHide(bool)
|
|
self.item_con_obj:SetActive(bool)
|
|
end
|
|
|
|
function MiniMessageView:DestroySuccess( )
|
|
if self.account_change_id then
|
|
GlobalEventSystem:UnBind(self.account_change_id)
|
|
self.account_change_id = nil
|
|
end
|
|
|
|
if self.role_change_id then
|
|
GlobalEventSystem:UnBind(self.role_change_id)
|
|
self.role_change_id = nil
|
|
end
|
|
|
|
if self.scene_id then
|
|
GlobalEventSystem:UnBind(self.scene_id)
|
|
self.scene_id = nil
|
|
end
|
|
|
|
for k,v in pairs(self.cur_item_list) do
|
|
v:DeleteMe()
|
|
v = nil
|
|
end
|
|
self.cur_item_list = {}
|
|
local function callback( item )
|
|
item:DeleteMe()
|
|
end
|
|
self.cache_item_list:ForEach(callback)
|
|
self.cache_item_list:Clear()
|
|
end
|