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