44 lines
1.0 KiB
GDScript
44 lines
1.0 KiB
GDScript
extends Node3D
|
|
class_name EnemyWeaponSlot
|
|
|
|
@export var lead_speed := 10
|
|
@export var weapon : Weapon
|
|
@onready var audio_stream_player_3d: AudioStreamPlayer3D = $AudioStreamPlayer3D
|
|
|
|
var target : Node3D
|
|
var can_shoot := true
|
|
|
|
|
|
func _ready() -> void:
|
|
if weapon.shooting_sound:
|
|
audio_stream_player_3d.stream = weapon.shooting_sound
|
|
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
if is_instance_valid(target) && target:
|
|
var dist = (target.global_position - global_position).length()
|
|
var time_to_target = dist/lead_speed
|
|
var lead = (target.velocity*time_to_target)
|
|
look_at(target.global_position+Vector3(0,.5,0) + lead)
|
|
shoot()
|
|
else:
|
|
rotation = Vector3.ZERO
|
|
|
|
|
|
func shoot():
|
|
if can_shoot:
|
|
get_tree().create_timer(weapon.cooldown).timeout.connect(reload)
|
|
audio_stream_player_3d.play()
|
|
can_shoot = false
|
|
var new_projectile = weapon.projectile_scene.instantiate()
|
|
new_projectile.global_transform = global_transform
|
|
get_tree().root.add_child(new_projectile)
|
|
|
|
|
|
func reload():
|
|
can_shoot = true
|
|
|
|
|
|
func set_target(value: Node3D):
|
|
target = value
|