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

77 lines
1.7 KiB

--用于唯一标识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