From 52bc94cef2593d5da699a23220c7bf7187a35431 Mon Sep 17 00:00:00 2001 From: Qwreey Date: Sat, 18 Feb 2023 16:19:59 +0900 Subject: [PATCH] fix signal types --- src/signal.lua | 36 +++++++++++++++++++++++++----------- src/types.lua | 16 +++++++++++++++- testing/init.lua | 2 +- 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/src/signal.lua b/src/signal.lua index cf40d91..378c2b7 100644 --- a/src/signal.lua +++ b/src/signal.lua @@ -51,12 +51,12 @@ function module.init(shared) end new.Disconnecter = disconnecterClass - local customConnection = {} - customConnection.__index = customConnection - function customConnection.New(signal,func) + local connection = {} + connection.__index = connection + function connection.New(signal,func) return {signal = signal,func = func} end - function customConnection:Disconnect(slient) + function connection:Disconnect(slient) local signal = self.signal local onceConnection = signal.onceConnection local connection = signal.connection @@ -78,11 +78,12 @@ function module.init(shared) warn(("Connection %s is not found from signal %s, but tried :Disconnect(). Maybe disconnected aleady?"):format(tostring(self),tostring(signal))) end end - function customConnection:Destroy() + function connection:Destroy() return self:Disconnect(true) end - new.Connection = customConnection + new.Connection = connection + local signals = {} local signal = {} signal.__index = signal function signal:Fire(...) @@ -126,7 +127,7 @@ function module.init(shared) if self:CheckConnected(func) then warn(("[Quad] Function %s Connected already on signal %s"):format(tostring(func),tostring(self))) end - local thisConnection = customConnection.New(self,func) + local thisConnection = connection.New(self,func) insert(self.connection,{func=func,connection=thisConnection}) return thisConnection end @@ -134,13 +135,26 @@ function module.init(shared) if self:CheckConnected(func) then warn(("[Quad] Function %s Connected already on signal %s"):format(tostring(func),tostring(self))) end - local thisConnection = customConnection.New(self,func) + local thisConnection = connection.New(self,func) insert(self.onceConnection,{func=func,connection=thisConnection}) return thisConnection end - function signal.New() - local self = {waitting={},onceConnection={},connection={}} - setmetatable(self,signal) + function signal:Destroy() + self.waitting = nil + self.onceConnection = nil + self.connection = nil + setmetatable(self,nil) + end + function signal.New(id) + if id and signals[id] then + return signals[id] + end + local this = {waitting={},onceConnection={},connection={}} + setmetatable(this,signal) + if id then + signals[id] = this + end + return this end new.Bindable = signal diff --git a/src/types.lua b/src/types.lua index 8c3163a..4d3abcb 100644 --- a/src/types.lua +++ b/src/types.lua @@ -54,7 +54,20 @@ export type module_event = { ------------------- -- module_signal ------------------- -export type signal = {} +export type connection = { + Disconnect: (self:connection)->(); + Destroy: (self:connection)->(); + New: (signal,(...any)->())->(); +} +export type signal = { + Fire: (self:signal,...any)->(); + Wait: (self:signal)->(); + CheckConnected: (self:signal,(...any)->())->boolean; + Connect: (self:signal,(...any)->())->connection; + Once: (self:signal,(...any)->())->connection; + Destroy: (self:signal)->(); + New: (id:string?)->signal; +} export type disconnecter = { Add: (self:disconnecter,connection:RBXScriptConnection)->(); Destroy: (self:disconnecter)->(); @@ -63,6 +76,7 @@ export type disconnecter = { } export type module_signal = { Disconnecter: disconnecter; + Bindable: signal; } ------------------- diff --git a/testing/init.lua b/testing/init.lua index b1da0f3..73b4071 100644 --- a/testing/init.lua +++ b/testing/init.lua @@ -56,7 +56,7 @@ function module.init() local TweenTest = Class(script.tween) local LangTest = Class(script.lang) - Signal. + -- Signal. SetTheme(Global)