From a34aa2388a7bed108c4d9ad70a6e6a5010466ea0 Mon Sep 17 00:00:00 2001 From: GwWuYou <95328647+GeWuYou@users.noreply.github.com> Date: Fri, 2 Jan 2026 20:22:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(signal):=20=E6=B7=BB=E5=8A=A0=E4=BF=A1?= =?UTF-8?q?=E5=8F=B7=E8=BF=9E=E6=8E=A5=E6=9E=84=E5=BB=BA=E5=99=A8=E5=92=8C?= =?UTF-8?q?=E6=B5=81=E7=95=85API=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现 SignalBuilder 类用于流畅方式连接 Godot 信号 - 提供 WithFlags 方法设置连接标志 - 提供 To 方法将信号连接到指定处理方法 - 添加 SignalFluentExtensions 扩展方法提供流畅API - 支持通过扩展方法创建信号构建器实例 --- .../extensions/signal/SignalBuilder.cs | 40 +++++++++++++++++++ .../signal/SignalFluentExtensions.cs | 20 ++++++++++ 2 files changed, 60 insertions(+) create mode 100644 GFramework.Godot/extensions/signal/SignalBuilder.cs create mode 100644 GFramework.Godot/extensions/signal/SignalFluentExtensions.cs 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