## ProjectileDef — 弹道生成参数描述
## ACTION 节点写入，SpellEvaluator 读取并调用 BulletManager.spawn_bullet
## 跨切片约束：reset() 必须重置 spawn_position（P6-N41）
extends RefCounted
class_name ProjectileDef

var spawn_position:    Vector2 = Vector2.ZERO  # P6-N41: 必须在 reset() 中重置
var direction:         Vector2 = Vector2.RIGHT
var speed:             float   = 300.0
var lifetime:          float   = 4.0
var radius:            float   = 6.0
var base_damage:       float   = 3.0
var damage_mult:       float   = 1.0
var damage_type:       int     = 0    # DamageType.PHYSICAL
var owner_id:          int     = 0
var source_tags:       int     = 0
var acceleration:      float   = 0.0
var on_hit_payload_id: int     = -1   # -1 = 无触发
var pierce_remaining:  int     = 0
var bounce_remaining:  int     = 0

func reset() -> void:
	spawn_position    = Vector2.ZERO  # P6-N41
	direction         = Vector2.RIGHT
	speed             = 300.0
	lifetime          = 4.0
	radius            = 6.0
	base_damage       = 3.0
	damage_mult       = 1.0
	damage_type       = 0
	owner_id          = 0
	source_tags       = 0
	acceleration      = 0.0
	on_hit_payload_id = -1
	pierce_remaining  = 0
	bounce_remaining  = 0

func get_velocity() -> Vector2:
	return direction.normalized() * speed
