class_name WeaponSwordProjectile extends Node2D @export var speed: float = 500.0 @export var range: float = 200.0 @export var target: Node2D @export var damage_mult: float = 1.0 @export var on_hit_sig: Signal var _direction: Vector2 var _traveled: float = 0.0 var _already_hit: Array[PhysicsBody2D] = [] func _ready() -> void: _direction = global_position.direction_to(target.global_position).normalized() _traveled = 0.0 rotation = _direction.angle() if _direction.x < 0: rotation += PI var proj_manager = get_tree().get_first_node_in_group(GlobalConst.GROUP_PROJ_MANAGER) if not proj_manager: return reparent(proj_manager, true) func _physics_process(delta: float) -> void: var step = _direction * speed * delta global_position += step _traveled += step.length() if _traveled >= range: queue_free() func _on_area_2d_body_entered(body: Node2D) -> void: if body in _already_hit: return on_hit_sig.emit(self, body, damage_mult) _already_hit.append(body)