diff --git a/GFramework.Godot/extensions/signal/SignalBuilder.cs b/GFramework.Godot/extensions/signal/SignalBuilder.cs new file mode 100644 index 0000000..b3d6177 --- /dev/null +++ b/GFramework.Godot/extensions/signal/SignalBuilder.cs @@ -0,0 +1,40 @@ +using Godot; + +namespace GFramework.Godot.extensions.signal; + +/// +/// 信号连接构建器,用于以流畅的方式连接Godot信号 +/// +/// 要连接信号的目标节点 +/// 要连接的信号名称 +public sealed class SignalBuilder(Node target, StringName signal) +{ + private GodotObject.ConnectFlags? _flags; + + /// + /// 设置连接标志 + /// + /// 连接标志 + /// 当前构建器实例 + public SignalBuilder WithFlags(GodotObject.ConnectFlags flags) + { + _flags = flags; + return this; + } + + /// + /// 将信号连接到指定的处理方法 + /// + /// 信号触发时要调用的处理方法 + public void To(Callable callable) + { + // 根据是否设置了标志来决定使用哪种连接方法 + if (_flags is null) + { + target.Connect(signal, callable); + return; + } + + target.Connect(signal, callable, (uint)_flags); + } +} \ No newline at end of file diff --git a/GFramework.Godot/extensions/signal/SignalFluentExtensions.cs b/GFramework.Godot/extensions/signal/SignalFluentExtensions.cs new file mode 100644 index 0000000..90da99b --- /dev/null +++ b/GFramework.Godot/extensions/signal/SignalFluentExtensions.cs @@ -0,0 +1,20 @@ +using Godot; + +namespace GFramework.Godot.extensions.signal; + +/// +/// 为Godot Node节点提供信号相关的流畅API扩展方法 +/// +public static class SignalFluentExtensions +{ + /// + /// 为指定节点创建信号构建器 + /// + /// 要创建信号的节点 + /// 信号名称 + /// 信号构建器实例 + public static SignalBuilder Signal( + this Node node, + StringName signal) + => new(node, signal); +} \ No newline at end of file