Basic Usage Example
This example demonstrates the basic functionality of GDSignalBus, including signal emission, subscription, and channel management.
Complete Example Code
gdscript
@warning_ignore_start("static_called_on_instance")
extends Node2D
@onready var bus = SignalBus.get_singleton()
func _ready() -> void:
bus.set_debug_enabled(true)
print(bus.get_channel_list())
bus.subscribe("my_signal", on_signal_activate)
bus.subscribe("my_signal", on_signal_with_arg)
# Create channel signals
bus.subscribe_on_channel("channel1", "signal1_on_channel", on_channel1_signal)
bus.subscribe_on_channel("channel2", "signal1_on_channel", on_channel2_signal)
func _process(_delta: float) -> void:
if Input.is_action_just_pressed("ui_accept"):
bus.emit("my_signal", [])
if Input.is_action_just_pressed("ui_up"):
bus.emit_on_channel("channel1", "signal1_on_channel", [])
if Input.is_action_just_pressed("ui_down"):
bus.emit_on_channel("channel2", "signal1_on_channel", [])
if Input.is_action_just_pressed("ui_left"):
bus.emit("my_signal", ["Hello SignalBus"])
if Input.is_action_just_pressed("ui_right"):
bus.emit_on_channel("default", "my_signal", ["Hello SignalBus"])
func on_signal_activate():
print("my_signal signal triggered")
print("Signal list:")
print(bus.get_signal_list())
print("Channel list:")
print(bus.get_channel_list())
print("Number of subscribers for signal1_on_channel:")
print(bus.get_subscriber_count("signal1_on_channel"))
func on_channel1_signal():
print("channel1 signal triggered")
func on_channel2_signal():
print("channel2 signal triggered")
func on_signal_with_arg(message):
print("my_signal received parameter")
print(message)Feature Description
1. Basic Signal Subscription and Emission
gdscript
# Subscribe to signals
bus.subscribe("my_signal", on_signal_activate)
bus.subscribe("my_signal", on_signal_with_arg)
# Emit signals
bus.emit("my_signal", []) # No parameters
bus.emit("my_signal", ["Hello SignalBus"]) # With parameters2. Channel Management
gdscript
# Subscribe to the same signal name in different channels
bus.subscribe_on_channel("channel1", "signal1_on_channel", on_channel1_signal)
bus.subscribe_on_channel("channel2", "signal1_on_channel", on_channel2_signal)
# Emit signals in specific channels
bus.emit_on_channel("channel1", "signal1_on_channel", [])
bus.emit_on_channel("channel2", "signal1_on_channel", [])
bus.emit_on_channel("default", "my_signal", ["Hello SignalBus"])3. Debug and Information Query
gdscript
# Enable debug mode
bus.set_debug_enabled(true)
# Get system information
print(bus.get_channel_list()) # Get channel list
print(bus.get_signal_list()) # Get signal list
print(bus.get_subscriber_count("signal1_on_channel")) # Get subscriber countControl Instructions
After running the example, you can use the following keys to test different features:
- UI Accept (usually Enter or Space): Emit
my_signalwithout parameters - UI Up (Up arrow): Emit
signal1_on_channelsignal inchannel1 - UI Down (Down arrow): Emit
signal1_on_channelsignal inchannel2 - UI Left (Left arrow): Emit
my_signalwith parameters - UI Right (Right arrow): Emit
my_signalwith parameters in the default channel
Output Example
When pressing different keys, the console will display corresponding output:
my_signal signal triggered
Signal list:
[my_signal, signal1_on_channel]
Channel list:
[default, channel1, channel2]
Number of subscribers for signal1_on_channel:
2
channel1 signal triggered
channel2 signal triggered
my_signal received parameter
Hello SignalBusCore Concepts
Signal Subscription
subscribe(signal_name, callback): Subscribe to signals in the default channelsubscribe_on_channel(channel, signal_name, callback): Subscribe to signals in a specific channel
Signal Emission
emit(signal_name, args): Emit signals in the default channelemit_on_channel(channel, signal_name, args): Emit signals in a specific channel
Channel Isolation
The same signal name is independent in different channels, allowing you to use the same signal name in different modules without conflicts.
This basic example demonstrates the core functionality of GDSignalBus, laying the foundation for more complex application scenarios.