55 lines
1.4 KiB
GDScript
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()
|