--用于唯一标识obj的table
|
|
|
|
_inner_event_connection_obj = _inner_event_connection_obj or {}
|
|
|
|
Event = Event or BaseClass()
|
|
local Event = Event
|
|
local getmetatable = getmetatable
|
|
local setmetatable = setmetatable
|
|
function Event:__init(event_id, parent)
|
|
self.parent = parent
|
|
self.event_id = event_id
|
|
self.bind_id_count = 0
|
|
self.bind_count = 0
|
|
self.event_func_list = {}
|
|
end
|
|
function Event:__defineVar()
|
|
return {
|
|
_class_type = self,
|
|
--_cid = self._id,
|
|
_iid = _in_obj_ins_id,
|
|
_use_delete_method = false,
|
|
parent = nil,--parent
|
|
event_id = nil,--event_id
|
|
bind_id_count = 0,--0
|
|
bind_count = 0,--0
|
|
event_func_list = {}--{}
|
|
}
|
|
end
|
|
|
|
function Event:GetEventID()
|
|
return self.event_id
|
|
end
|
|
|
|
function Event:Fire(arg_table)
|
|
--[[
|
|
local arg_count = table.maxn(arg_table) or 0
|
|
local myunpack
|
|
myunpack = function (t, i)
|
|
if i <= arg_count then
|
|
return t[i], myunpack(t, i + 1)
|
|
end
|
|
end
|
|
]]
|
|
|
|
for _, func in pairs(self.event_func_list) do
|
|
func( unpack( arg_table ) )
|
|
end
|
|
end
|
|
|
|
function Event:UnBind(obj)
|
|
--仅当obj符合类型时才作对应操作
|
|
if getmetatable(obj) == _inner_event_connection_obj and obj.event_id == self.event_id then
|
|
self.event_func_list[obj.bind_id] = nil
|
|
self.bind_count = self.bind_count - 1
|
|
end
|
|
end
|
|
|
|
function Event:Bind(event_func)
|
|
|
|
local obj = {}
|
|
setmetatable(obj, _inner_event_connection_obj)
|
|
|
|
self.bind_count = self.bind_count + 1
|
|
if self.bind_count > 5000 then
|
|
obj.event_id = self.event_id
|
|
obj.bind_id = 0
|
|
|
|
self.parent:CallError(self.event_id)
|
|
return obj
|
|
end
|
|
|
|
self.bind_id_count = self.bind_id_count + 1
|
|
obj.event_id = self.event_id
|
|
obj.bind_id = self.bind_id_count
|
|
self.event_func_list[obj.bind_id] = event_func
|
|
return obj
|
|
end
|