Files
spellforge/scripts/autoloads/object_pool.gd
T
2026-07-20 10:56:52 +08:00

41 lines
1.1 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## ObjectPool — 通用对象池(Autoload: ObjectPool
## 权威来源:implementation_plan.md §2.1 Layer-0
##
## 使用约定:
## 1. 被池化对象必须实现 reset() 方法 (签名:func reset() -> void
## 2. 取出:pool.acquire() → 返回对象(内部已调 reset())
## 3. 归还:pool.release(obj)
extends Node
## 创建一个指定工厂和容量的对象池
func create_pool(capacity: int, factory: Callable) -> PoolInstance:
var p := PoolInstance.new()
p._factory = factory
for _i in capacity:
p._stack.append(factory.call())
return p
# ── PoolInstance 内部类(业务系统持有实例) ──────────────────────────────
class PoolInstance:
var _factory: Callable
var _stack: Array = []
func acquire() -> Object:
var obj: Object
if _stack.is_empty():
obj = _factory.call()
else:
obj = _stack.pop_back()
if obj.has_method("reset"):
obj.reset()
return obj
func release(obj: Object) -> void:
_stack.append(obj)
func get_available_count() -> int:
return _stack.size()
func drain() -> void:
_stack.clear()