32 lines
1.0 KiB
GDScript
32 lines
1.0 KiB
GDScript
extends Node3D
|
|
|
|
@export var fire_rate: float = 0.5
|
|
@export var projectile_lifetime: float = 4.0
|
|
@export var projectile_prefab: PackedScene
|
|
@export var rotate_to_mouse: Node3D
|
|
@export var fire_point: Node3D
|
|
|
|
var can_fire: bool = true
|
|
|
|
func _process(_delta):
|
|
if Input.is_action_pressed("fire") and can_fire:
|
|
fire_projectile()
|
|
can_fire = false
|
|
await get_tree().create_timer(fire_rate).timeout
|
|
can_fire = true
|
|
|
|
func fire_projectile():
|
|
if projectile_prefab and fire_point and rotate_to_mouse:
|
|
var projectile_instance = projectile_prefab.instantiate()
|
|
get_parent().add_child(projectile_instance)
|
|
projectile_instance.global_position = fire_point.global_position
|
|
projectile_instance.set_fire_point(fire_point.global_transform.origin)
|
|
|
|
var direction = -rotate_to_mouse.global_transform.basis.z.normalized()
|
|
projectile_instance.direction = direction
|
|
projectile_instance.look_at(fire_point.global_position + -direction)
|
|
|
|
await get_tree().create_timer(projectile_lifetime).timeout
|
|
if projectile_instance:
|
|
projectile_instance.queue_free()
|