Files
slopvivors/scenes/weapons/weapon_sword_projectile.gd

41 lines
984 B
GDScript

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)