Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------Signal class begin------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------
- --[[
- A 'Signal' object identical to the internal RBXScriptSignal object in it's public API and semantics. This function
- can be used to create "custom events" for user-made code.
- API:
- Method :connect( function handler )
- Arguments: The function to connect to.
- Returns: A new connection object which can be used to disconnect the connection
- Description: Connects this signal to the function specified by |handler|. That is, when |fire( ... )| is called for
- the signal the |handler| will be called with the arguments given to |fire( ... )|. Note, the functions
- connected to a signal are called in NO PARTICULAR ORDER, so connecting one function after another does
- NOT mean that the first will be called before the second as a result of a call to |fire|.
- Method :disconnect()
- Arguments: None
- Returns: None
- Description: Disconnects all of the functions connected to this signal.
- Method :fire( ... )
- Arguments: Any arguments are accepted
- Returns: None
- Description: Calls all of the currently connected functions with the given arguments.
- Method :wait()
- Arguments: None
- Returns: The arguments given to fire
- Description: This call blocks until
- ]]
- function t.CreateSignal()
- local this = {}
- local mBindableEvent = Instance.new('BindableEvent')
- local mAllCns = {} --all connection objects returned by mBindableEvent::connect
- --main functions
- function this:connect(func)
- if self ~= this then error("connect must be called with `:`, not `.`", 2) end
- if type(func) ~= 'function' then
- error("Argument #1 of connect must be a function, got a "..type(func), 2)
- end
- local cn = mBindableEvent.Event:Connect(func)
- mAllCns[cn] = true
- local pubCn = {}
- function pubCn:disconnect()
- cn:Disconnect()
- mAllCns[cn] = nil
- end
- pubCn.Disconnect = pubCn.disconnect
- return pubCn
- end
- function this:disconnect()
- if self ~= this then error("disconnect must be called with `:`, not `.`", 2) end
- for cn, _ in pairs(mAllCns) do
- cn:Disconnect()
- mAllCns[cn] = nil
- end
- end
- function this:wait()
- if self ~= this then error("wait must be called with `:`, not `.`", 2) end
- return mBindableEvent.Event:Wait()
- end
- function this:fire(...)
- if self ~= this then error("fire must be called with `:`, not `.`", 2) end
- mBindableEvent:Fire(...)
- end
- this.Connect = this.connect
- this.Disconnect = this.disconnect
- this.Wait = this.wait
- this.Fire = this.fire
- return this
- end
- ------------------------------------------------- Sigal class End ------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement