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

  1. --用于唯一标识obj的table
  2. _inner_event_connection_obj = _inner_event_connection_obj or {}
  3. Event = Event or BaseClass()
  4. local Event = Event
  5. local getmetatable = getmetatable
  6. local setmetatable = setmetatable
  7. function Event:__init(event_id, parent)
  8. self.parent = parent
  9. self.event_id = event_id
  10. self.bind_id_count = 0
  11. self.bind_count = 0
  12. self.event_func_list = {}
  13. end
  14. function Event:__defineVar()
  15. return {
  16. _class_type = self,
  17. --_cid = self._id,
  18. _iid = _in_obj_ins_id,
  19. _use_delete_method = false,
  20. parent = nil,--parent
  21. event_id = nil,--event_id
  22. bind_id_count = 0,--0
  23. bind_count = 0,--0
  24. event_func_list = {}--{}
  25. }
  26. end
  27. function Event:GetEventID()
  28. return self.event_id
  29. end
  30. function Event:Fire(arg_table)
  31. --[[
  32. local arg_count = table.maxn(arg_table) or 0
  33. local myunpack
  34. myunpack = function (t, i)
  35. if i <= arg_count then
  36. return t[i], myunpack(t, i + 1)
  37. end
  38. end
  39. ]]
  40. for _, func in pairs(self.event_func_list) do
  41. func( unpack( arg_table ) )
  42. end
  43. end
  44. function Event:UnBind(obj)
  45. --仅当obj符合类型时才作对应操作
  46. if getmetatable(obj) == _inner_event_connection_obj and obj.event_id == self.event_id then
  47. self.event_func_list[obj.bind_id] = nil
  48. self.bind_count = self.bind_count - 1
  49. end
  50. end
  51. function Event:Bind(event_func)
  52. local obj = {}
  53. setmetatable(obj, _inner_event_connection_obj)
  54. self.bind_count = self.bind_count + 1
  55. if self.bind_count > 5000 then
  56. obj.event_id = self.event_id
  57. obj.bind_id = 0
  58. self.parent:CallError(self.event_id)
  59. return obj
  60. end
  61. self.bind_id_count = self.bind_id_count + 1
  62. obj.event_id = self.event_id
  63. obj.bind_id = self.bind_id_count
  64. self.event_func_list[obj.bind_id] = event_func
  65. return obj
  66. end