63 lines
1.9 KiB
GDScript
63 lines
1.9 KiB
GDScript
extends RigidBody3D
|
|
|
|
@export var gun_resource : Resource
|
|
@export_enum("Ammo", "Stamina", "Health", "Money","Weapon") var pickupType: int
|
|
|
|
@onready var level_control = get_tree().current_scene
|
|
|
|
var pickupable = true
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready():
|
|
add_to_group("persist")
|
|
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(delta):
|
|
pass
|
|
|
|
func picked_up():
|
|
var spawn_gun = gun_resource.instantiate()
|
|
var gun_held = false
|
|
#check if gun is owned
|
|
for i in GameGlobals.held_guns:
|
|
if i == gun_resource:
|
|
gun_held = true
|
|
|
|
if spawn_gun.weapon_info.weapon_type == 0:
|
|
add_ammo(!gun_held,spawn_gun.weapon_info.gun_name,spawn_gun.weapon_info.bullet.ammo_type,spawn_gun.weapon_info.bullet.special_bullet_name,spawn_gun.weapon_info.max_ammo,spawn_gun.weapon_info.start_mags)
|
|
|
|
if !gun_held:
|
|
GameGlobals.held_guns.append(gun_resource)
|
|
var instance_gun = gun_resource.instantiate()
|
|
var weapon_id = GameGlobals.held_guns.size() - 1
|
|
if level_control.player.gun != null:
|
|
level_control.player.gun.anim_player.play("swap_out")
|
|
level_control.gun_spawn(weapon_id)
|
|
SignalBus.emit_signal("weapon_list_changed")
|
|
queue_free()
|
|
|
|
func add_ammo(new_gun,gun_name,ammo_type,special_bullet_name,max_ammo,start_mags):
|
|
if new_gun:
|
|
GameGlobals.gun_ammo[gun_name] = max_ammo
|
|
if GameGlobals.ammo_reserve.has(str(ammo_type)):
|
|
GameGlobals.ammo_reserve[str(ammo_type)] += start_mags * max_ammo
|
|
else:
|
|
GameGlobals.ammo_reserve[str(ammo_type)] = start_mags * max_ammo
|
|
|
|
print("GUN AMMO ",GameGlobals.gun_ammo)
|
|
print("RESERVE AMMO ", GameGlobals.ammo_reserve)
|
|
|
|
func save():
|
|
var save_dict = {
|
|
"filename" : get_scene_file_path(),
|
|
"parent" : get_parent().get_path(),
|
|
"pos_x" : position.x,
|
|
"pos_y" : position.y,
|
|
"pos_z" : position.z,
|
|
"rot_x" : rotation.x,
|
|
"rot_y" : rotation.y,
|
|
"rot_z" : rotation.z,
|
|
}
|
|
return save_dict
|