]> purplebirdman git - frog-ninja.git/blob - asset/projectile/projectile.gd
772732090a98548dcc294703ec9abfaaca23e490
[frog-ninja.git] / asset / projectile / projectile.gd
1 extends Node3D
2 class_name Projectile
3
4
5 @export var speed := 20.0
6 @export var max_range := 30.0
7
8 var last_movement_direction: Vector3
9 var weapon: Weapon
10 var collision_layer: int = 1
11 var collision_mask: int = 1
12
13 var _origin: Vector3
14
15 @onready var hurtbox: Hurtbox = $Model/Hurtbox
16
17
18 func _ready() -> void:
19         if last_movement_direction:
20                 last_movement_direction = last_movement_direction.normalized()
21         else:
22                 last_movement_direction = Vector3.BACK.rotated(Vector3.UP, global_rotation.y)
23                 
24         hurtbox.weapon = weapon
25         hurtbox.is_attacking = true
26         hurtbox.set_collision_layer(collision_layer)
27         hurtbox.set_collision_mask(collision_mask)
28         _origin = global_position
29         
30         # TODO: if projectile gets reflected, this must be recalculated!
31         var target_angle := Vector3.BACK.signed_angle_to(last_movement_direction, Vector3.UP)
32         global_rotate(Vector3.UP, target_angle)
33
34
35 func _process(delta: float) -> void:
36         if (global_position - _origin).length() > max_range:
37                 queue_free()
38         else:
39                 global_position = lerp(
40                         global_position, 
41                         global_position + speed * last_movement_direction, 
42                         delta
43                         )