40 lines
1.3 KiB
GDScript
40 lines
1.3 KiB
GDScript
@icon("res://components/Triggerer/radio.svg")
|
||
extends Base
|
||
## A trigger object to trigger things and read in triggers
|
||
##
|
||
## An object used for other objects to connect to for triggers.
|
||
## Objects can call the read function with a callback function to
|
||
## read in future triggers of a key to that callback. Objects can
|
||
## then call the trigger function to trigger everything listening
|
||
## to a key.
|
||
|
||
var _connections = {}
|
||
|
||
|
||
## Trigger an event to be read in by other objects
|
||
func trigger(key: String, data: Dictionary = {}) -> void:
|
||
_info("Triggered key ∧%s∧" % [key])
|
||
|
||
data.trigger = key
|
||
|
||
if _connections.has(key):
|
||
_connections[key] = _connections[key].filter(func(x): return x.is_valid())
|
||
|
||
for callback in _connections[key]:
|
||
callback.call(data)
|
||
|
||
if _connections.has("any"):
|
||
_connections["any"] = _connections["any"].filter(func(x): return x.is_valid())
|
||
|
||
for callback in _connections["any"]:
|
||
callback.call(data)
|
||
|
||
|
||
## Read in future triggers of a key to a callback
|
||
func listen(key: String, callback: Callable) -> void:
|
||
if not _connections.has(key):
|
||
_info("Created new connection key ∧%s∧" % [key])
|
||
_connections[key] = []
|
||
|
||
_info("Callback ∨%s∨ on →%s← added to key ∧%s∧" % [callback.get_method(), callback.get_object().name, key])
|
||
_connections[key].push_back(callback)
|