## 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