66 lines
1.7 KiB
Lua
Raw Normal View History

2025-01-18 21:26:02 +08:00
--[[
[使]
========
local UGCDelegateMulticast = require("Script.Common.UGCDelegateMulticast");
local DelObj = UGCDelegate.New(self, self.SomeFunction);
DelObj:Add(self, self.AnotherFunction);
========
DelObj:Broadcast(Par1, Par2, Par3);
--]]
---@class UGCDelegateMulticast
local UGCDelegateMulticast = LuaClass("UGCDelegateMulticast");
--- 绑定回调函数列表
UGCDelegateMulticast.EventsHandler = {};
--- 构造函数
---@param InObject any
---@param InFunc function @函数变量
function UGCDelegateMulticast:ctor(InObject, InFunc)
UGCDelegateMulticast:Add(InObject, InFunc);
end
--- 添加回调函数
---@param InObject any
---@param InFunc function @函数变量
function UGCDelegateMulticast:Add(InObject, InFunc)
table.insert(UGCDelegateMulticast.EventsHandler, {Object=InObject, Func=InFunc});
end
--- 移除回调函数
---@param InObject any
---@param InFunc function @函数变量
function UGCDelegateMulticast:Remove(InObject, InFunc)
for _, FuncData in pairs(UGCDelegateMulticast.EventsHandler) do
if FuncData.Object == InObject and FuncData.Func == InFunc then
FuncData.Object = nil;
FuncData.Func = nil;
end
end
end
--- 清除所有的回调绑定
function UGCDelegateMulticast:Clear()
self.EventsHandler = {};
end
--- 调用所有的回调函数
function UGCDelegateMulticast:Broadcast(...)
for _, FuncData in pairs(UGCDelegateMulticast.EventsHandler) do
if FuncData.Object ~= nil then
FuncData.Func(FuncData.Object, ...);
elseif FuncData.Func ~= nil then
FuncData.Func(...);
end
end
end
return UGCDelegateMulticast;