A Third-Person-Shooter Godot game.
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

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