extends Node3D @export var weapon : Weapon @export var weapon_key : String = "shoot1" @export var weapon_signal_name = "minigun" @onready var audio_stream_player_3d: AudioStreamPlayer3D = $AudioStreamPlayer3D @export var max_ammo : int = 1000 var can_shoot := true @onready var current_ammo : int = max_ammo @export var target : Node3D func set_target(value: Node3D): target = value func _ready() -> void: if weapon.shooting_sound: audio_stream_player_3d.stream = weapon.shooting_sound func _physics_process(delta: float) -> void: if Input.is_action_pressed(weapon_key): shoot() if is_instance_valid(target) && target: look_at(target.global_position+Vector3(0,.5,0)) else: rotation = Vector3.ZERO func reload(): can_shoot = true func shoot(): if can_shoot and current_ammo > 0: HudSignalBus.emit_signal(weapon_signal_name, current_ammo, max_ammo) current_ammo = current_ammo - 1 print(current_ammo) audio_stream_player_3d.play() can_shoot = false get_tree().create_timer(weapon.cooldown).timeout.connect(reload) var new_projectile = weapon.projectile_scene.instantiate() new_projectile.global_transform = global_transform get_tree().root.add_child(new_projectile) func _on_area_entered(area: Area3D) -> void: if area is WeaponPickup: if area.signal_name == weapon_signal_name: current_ammo = clamp(current_ammo + area.value, 0, max_ammo) HudSignalBus.emit_signal(weapon_signal_name, current_ammo, max_ammo) area.activate()