You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
2.4 KiB
Lua

------------------------------------------------------ 事件触发器
local Listener = {}
function Listener:new(channel, callback)
local obj = {
callback = callback,
channel = channel,
}
setmetatable(obj, self)
self.__index = self
return obj
end
local Channel = {}
function Channel:new(event)
assert(event)
local obj = {
listeners = {},
event = event,
}
setmetatable(obj, self)
self.__index = self
return obj
end
function Channel:on(callback)
listener = Listener:new(self, callback)
table.insert(self.listeners, listener)
end
local EventEmitter = {}
function EventEmitter:new()
local obj = {
events = {}, -- 监听的所有事件
channels = {}, -- event: channel
}
setmetatable(obj, self)
self.__index = self
return obj
end
function EventEmitter:setEvents(events)
self.events = events
end
function EventEmitter:on(event, callback)
assert(event)
assert(callback)
if not self.events[event] then
error("not register event: "..event)
end
local channel = self.channels[event]
if not channel then
channel = Channel:new(event)
self.channels[event] = channel
end
channel:on(callback)
end
function EventEmitter:emit(event)
if not self.events[event] then
error("not register event: "..event)
end
local channel = self.channels[event]
if not channel then return end
for _, listener in ipairs(channel.listeners) do
listener.callback()
end
end
----------------------------------------------------- 装备模块
local eventEmitter = EventEmitter:new()
eventEmitter:setEvents({
["equipStrengthen"] = "装备强化",
})
function equipStrengthen()
-- 装备强化逻辑
eventEmitter:emit("equipStrengthen")
end
------------------------------------------------------ 成就模块
function checkAchievement()
print('checkAchievement')
end
eventEmitter:on("equipStrengthen", checkAchievement) -- 成就模块注册监听
------------------------------------------------------ 时装模块
function checkObtainFashion()
print('checkObtainFashion')
end
eventEmitter:on("equipStrengthen", checkObtainFashion) -- 时装模块注册监听
------------------------------------------------------------------------------------
function main()
equipStrengthen()
end
main()