using Godot; namespace GFramework.Godot.Extensions.Signal; /// /// 信号连接构建器,用于以流畅的方式连接Godot信号 /// /// 要连接信号的目标节点 /// 要连接的信号名称 public sealed class SignalBuilder(GodotObject target, StringName signal) { private GodotObject.ConnectFlags? _flags; /// /// 设置连接标志 /// /// 连接标志 /// 当前构建器实例 public SignalBuilder WithFlags(GodotObject.ConnectFlags flags) { _flags = flags; return this; } /// /// 连接信号到指定的可调用对象 /// /// 要连接的可调用对象 /// 连接标志 /// 当前构建器实例 public SignalBuilder To(Callable callable, GodotObject.ConnectFlags? flags = null) { var finalFlags = flags ?? _flags; // 根据是否设置了标志来决定连接方式 if (finalFlags is null) target.Connect(signal, callable); else target.Connect(signal, callable, (uint)finalFlags); return this; } /// /// 连接信号到指定的可调用对象并立即调用 /// /// 要连接的可调用对象 /// 连接标志 /// 调用参数 /// 当前构建器实例 public SignalBuilder ToAndCall(Callable callable, GodotObject.ConnectFlags? flags = null, params Variant[] args) { To(callable, flags); callable.Call(args); return this; } /// /// 显式结束,返回 Node /// /// 目标节点 public GodotObject End() { return target; } }