初次提交

This commit is contained in:
2026-07-20 10:56:52 +08:00
commit 7bcc0026e0
462 changed files with 50191 additions and 0 deletions
@@ -0,0 +1,44 @@
## SpellContext — 法术执行上下文(对象池化)
## 权威来源:architecture_design.md §3.2, implementation_plan.md §2.2
## registers 跨帧持久(LOGIC_EVERY_N_SHOTS 必须使用此处,禁用 CastState.registers
extends RefCounted
class_name SpellContext
var caster_id: int = 0
var stats: CastStats = null # 本次施法的修改层
## 跨帧持久寄存器(长度固定 4,P6-N48)
## R1-R4:供 LOGIC_EVERY_N_SHOTS 等指令跨帧计数
var registers: PackedFloat32Array = PackedFloat32Array()
func _init() -> void:
stats = CastStats.new()
registers.resize(4)
registers.fill(0.0)
func reset() -> void:
caster_id = 0
if stats:
stats.reset()
else:
stats = CastStats.new()
# registers 小心:仅当 Core 没有 PERSISTENT_MEMORY Feature 时才清零
# 具体清空逻辑在 SpellContextPool.acquire_for_wand() 中处理
func clear_registers() -> void:
registers.fill(0.0)
## CastState — 单次 execute() 的临时工作状态(不入池,每次 new)
## 注意区分:CastState.registers 每次 execute() 开始时重置,不跨调用保留
## LOGIC_EVERY_N_SHOTS 「必须」使用 SpellContext.registers,严禁使用 CastState.registers
class CastState:
var trigger_depth: int = 0
var registers: PackedFloat32Array = PackedFloat32Array()
func _init() -> void:
registers.resize(4)
registers.fill(0.0)
func reset() -> void:
trigger_depth = 0
registers.fill(0.0)