RAIDER_GameJam/player/weapon_slot.gd
Felix Kaiser 3f62e5e31d blergh
2025-02-17 16:46:19 +01:00

55 lines
1.4 KiB
GDScript

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()