X-Git-Url: http://git.purplebirdman.com/frog-ninja.git/blobdiff_plain/df26d4a32e30692efba3fb3b7270501dc005bbff..1eb1a737c37fc3c2f7f124c912909b0d0e3ae7b3:/asset/projectile/projectile.gd diff --git a/asset/projectile/projectile.gd b/asset/projectile/projectile.gd index 7727320..b1c4874 100644 --- a/asset/projectile/projectile.gd +++ b/asset/projectile/projectile.gd @@ -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)