]> purplebirdman git - frog-ninja.git/blobdiff - asset/projectile/projectile.gd
Squashed commit of the following:
[frog-ninja.git] / asset / projectile / projectile.gd
index 772732090a98548dcc294703ec9abfaaca23e490..b1c487431c2626530d4ffd2517f496080d6f92cf 100644 (file)
@@ -2,42 +2,40 @@ extends Node3D
 class_name Projectile
 
 
-@export var speed := 20.0
+## Linear speed of the projectile
+@export var speed := 10.0
+
+## Direction the projectile will travel in
+@export var direction: Vector3:
+       set(v):
+               model.last_movement_vector  = v
+       get:
+               return model.last_movement_vector
+
+## Maximum distance from the origin point that the projectile will travel
 @export var max_range := 30.0
 
-var last_movement_direction: Vector3
+## Weapon which emitted the projectile
 var weapon: Weapon
-var collision_layer: int = 1
-var collision_mask: int = 1
 
-var _origin: Vector3
+## Collision layer for projectile
+var collision_layer: int:
+       set(c):
+               model.collision_layer = c
+       get:
+               return model.collision_layer
+               
 
-@onready var hurtbox: Hurtbox = $Model/Hurtbox
+## Collision mask for projectile
+var collision_mask: int:
+       set(c):
+               model.collision_mask = c
+       get:
+               return model.collision_mask
 
 
-func _ready() -> void:
-       if last_movement_direction:
-               last_movement_direction = last_movement_direction.normalized()
-       else:
-               last_movement_direction = Vector3.BACK.rotated(Vector3.UP, global_rotation.y)
-               
-       hurtbox.weapon = weapon
-       hurtbox.is_attacking = true
-       hurtbox.set_collision_layer(collision_layer)
-       hurtbox.set_collision_mask(collision_mask)
-       _origin = global_position
-       
-       # TODO: if projectile gets reflected, this must be recalculated!
-       var target_angle := Vector3.BACK.signed_angle_to(last_movement_direction, Vector3.UP)
-       global_rotate(Vector3.UP, target_angle)
+@onready var model: ProjectileModel = $Model
 
 
 func _process(delta: float) -> void:
-       if (global_position - _origin).length() > max_range:
-               queue_free()
-       else:
-               global_position = lerp(
-                       global_position, 
-                       global_position + speed * last_movement_direction, 
-                       delta
-                       )
+       model.update(delta)