41 lines
960 B
GDScript
41 lines
960 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: float
|
|
@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)
|
|
_already_hit.append(body)
|