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)
{
// 根据是否设置了标志来决定连接方式
if (_flags is null)
target.Connect(signal, callable);
else
target.Connect(signal, callable, (uint)_flags);
return this;
}
///
/// 连接信号到指定的可调用对象并立即调用
///
/// 要连接的可调用对象
/// 调用参数
/// 当前构建器实例
public SignalBuilder ToAndCall(Callable callable, params Variant[] args)
{
To(callable);
callable.Call(args);
return this;
}
///
/// 显式结束,返回 Node
///
/// 目标节点
public GodotObject End() => target;
}