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;
}
}