extends Node onready var player = get_parent() var weapons = [{"name": "AK-47", "available": true, "spread": 18.0, "movement_spread": 5.5, "aim_spread": -7, "crouch_spread": -6, "jump_spread": 12, "reload_speed": 0.8, "switch_speed": 1.2, "fire_rate": 8.0, "auto": true, "mag": 40, "mag_size": 40, "ammo_backup": 80, "ammo_backup_max": 80, "recoil": 0.075}, {"name": "ShitPistol", "available": true, "spread": 25.0, "movement_spread": 3.5, "aim_spread": -7, "crouch_spread": -5, "jump_spread": 10, "reload_speed": 0.8, "switch_speed": 1.5, "fire_rate": 6.0, "auto": false, "mag":15, "mag_size": 15, "ammo_backup": 30, "ammo_backup_max": 30, "recoil": 0.1}, {"name": "Pistol", "available": false, "spread": 25.0, "movement_spread": 3.5, "aim_spread": -7, "crouch_spread": -5, "jump_spread": 10, "reload_speed": 0.8, "switch_speed": 1.5, "fire_rate": 6.0, "auto": false, "mag":15, "mag_size": 15, "ammo_backup": 30, "ammo_backup_max": 30, "recoil": 0.1}, {"name": "Laser", "available": true, "spread": 18.0, "movement_spread": 5.5, "aim_spread": -7, "crouch_spread": -6, "jump_spread": 12, "reload_speed": 0.8, "switch_speed": 1.2, "fire_rate": 3.0, "auto": true, "mag": 9, "mag_size": 9, "ammo_backup": 999, "ammo_backup_max": 999, "recoil": 0.1}, ] onready var ui_stats = $"../UI/WeaponStatUI" onready var ui_ammo_loaded = ui_stats.get_node(@"ColorRect/AmmoLoaded") onready var ui_ammo_extra = ui_stats.get_node(@"ColorRect/AmmoExtra") # setters func update_ammo(): ui_ammo_loaded.text = String(mag()) ui_ammo_extra.text = String(ammo_backup()) func mag_decrement(): weapons[weapon_index()]["mag"] -= 1 update_ammo() func mag_fill(): var empty_space = mag_size() - mag() weapons[weapon_index()]["mag"] += min(empty_space, ammo_backup()) weapons[weapon_index()]["ammo_backup"] -= min(empty_space, ammo_backup()) update_ammo() func ammo_refill(ammo_type): weapons[ammo_type]["ammo_backup"] = weapons[ammo_type]["ammo_backup_max"] weapons[ammo_type]["mag"] = weapons[ammo_type]["mag_size"] update_ammo() # getters func weapon_index(): return player.current_weapon func weapon_name(): return weapons[weapon_index()]["name"] func spread(): return weapons[weapon_index()]["spread"] func movement_spread(): return weapons[weapon_index()]["movement_spread"] func aim_spread(): return weapons[weapon_index()]["aim_spread"] func crouch_spread(): return weapons[weapon_index()]["crouch_spread"] func jump_spread(): return weapons[weapon_index()]["jump_spread"] func reload_speed(): return weapons[weapon_index()]["reload_speed"] func fire_rate(): return weapons[weapon_index()]["fire_rate"] func auto(): return weapons[weapon_index()]["auto"] func recoil(): return weapons[weapon_index()]["recoil"] func mag(): return weapons[weapon_index()]["mag"] func mag_size(): return weapons[weapon_index()]["mag_size"] func ammo_backup(): return weapons[weapon_index()]["ammo_backup"] func switch_speed(): return weapons[weapon_index()]["switch_speed"] func animation(): return weapons[weapon_index()]["animation"] # Actions func shoot(shoot_origin, shoot_dir, col): if mag() > 0: player.weapon.get_node(weapon_name()).shoot(player, shoot_origin, shoot_dir, col) mag_decrement() return true return false func play_shoot_sound(): player.weapon.get_node(weapon_name()+"/Shoot").play() return