You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
3.3 KiB
112 lines
3.3 KiB
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
|
|
|
|
|