EventDispatcher.lua 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. class "EventDispatcher"
  2. function EventDispatcher:EventDispatcher()
  3. self.listenerEntries = {}
  4. end
  5. function EventDispatcher:addEventListener(listener, callback, eventCode)
  6. if self.listenerEntries == nil then
  7. self.listenerEntries = {}
  8. end
  9. local newEntry = {}
  10. if self.__ptr ~= nil then
  11. newEntry.handler = Polycore.EventHandler(newEntry)
  12. Polycore.EventDispatcher_addEventListener(self.__ptr, newEntry.handler, eventCode)
  13. end
  14. newEntry.listener = listener
  15. newEntry.callback = callback
  16. newEntry.eventCode = eventCode
  17. self.listenerEntries[#self.listenerEntries+1] = newEntry
  18. end
  19. function EventDispatcher:removeAllHandlers()
  20. if self.listenerEntries == nil then
  21. self.listenerEntries = {}
  22. end
  23. if self.__ptr ~= nil then
  24. Polycore.EventDispatcher_removeAllHandlers(self.__ptr)
  25. end
  26. self.listenerEntries = {}
  27. end
  28. function EventDispatcher:removeAllHandlersForListener(listener)
  29. if self.listenerEntries == nil then
  30. self.listenerEntries = {}
  31. end
  32. local i=1
  33. while i <= #self.listenerEntries do
  34. if self.listenerEntries[i].listener == listener then
  35. if self.__ptr ~= nil and self.listenerEntries[i].handler ~= nil then
  36. Polycore.EventDispatcher_removeAllHandlersForListener(self.__ptr, self.listenerEntries[i].handler)
  37. Polycore.delete_EventHandler(self.listenerEntries[i].handler)
  38. end
  39. table.remove(self.listenerEntries, i)
  40. else
  41. i = i + 1
  42. end
  43. end
  44. end
  45. function EventDispatcher:removeEventListener(listener, eventCode)
  46. if self.listenerEntries == nil then
  47. self.listenerEntries = {}
  48. end
  49. local i=1
  50. while i <= #self.listenerEntries do
  51. if self.listenerEntries[i].listener == listener and self.listenerEntries[i].eventCode == eventCode then
  52. if self.__ptr ~= nil and self.listenerEntries[i].handler ~= nil then
  53. Polycore.EventDispatcher_removeAllHandlersForListener(self.__ptr, self.listenerEntries[i].handler)
  54. Polycore.delete_EventHandler(self.listenerEntries[i].handler)
  55. end
  56. table.remove(self.listenerEntries, i)
  57. else
  58. i = i + 1
  59. end
  60. end
  61. end
  62. function EventDispatcher:dispatchEvent(event, eventCode)
  63. if self.listenerEntries == nil then
  64. self.listenerEntries = {}
  65. end
  66. for i=1,#self.listenerEntries do
  67. if self.listenerEntries[i].eventCode == eventCode then
  68. self.listenerEntries[i].callback(self.listenerEntries[i].listener, event)
  69. end
  70. end
  71. end