using GFramework.Core.Pool;
using Godot;
namespace GFramework.Godot.Pool;
///
/// 抽象节点对象池系统,用于管理Godot节点类型的对象池
///
/// 用作键的类型,必须不为null
/// 节点类型,必须继承自Node并实现IPoolableNode接口
public abstract class AbstractNodePoolSystem
: AbstractObjectPoolSystem
where TKey : notnull
where TNode : Node, IPoolableNode
{
///
/// 加载场景的抽象方法
///
/// 用于标识场景的键
/// 加载的PackedScene对象
protected abstract PackedScene LoadScene(TKey key);
///
/// 创建新节点实例的重写方法
///
/// 用于创建节点的键
/// 创建的新节点实例
protected override TNode Create(TKey key)
{
return LoadScene(key).Instantiate();
}
}