fixed hud wobble and removed deprecated scripts

This commit is contained in:
Derek
2025-03-06 08:32:43 -06:00
parent 0da561f425
commit 7ab4813d2a
7 changed files with 14 additions and 664 deletions

View File

@@ -1,145 +0,0 @@
extends Node3D
var start_position
var start_rotation
var random_spread_start
var cycle_count_start
var cycle_count
@export_group("Gun Feel")
@export var gun_name : String
@export var gun_icon : Texture2D
@export_enum("Light", "Medium", "Heavy", "Shotgun", "Rocket") var ammo_type: int
@export_enum("Auto", "Single", "Burst") var fire_mode: int
@export var fov_zoom_amt = .98
@export var ads : bool = false
@export var recoil_amount : Vector3 = Vector3(.2,0,0)
@export var spread : Vector3 = Vector3(1,1,1)
@export var kick_amount : float = 5
@export var max_ammo = 15
@export var start_mags = 3
@export var pellets_per_shot = 12
@export var bullet_damage = 1
@export var bullet_force_mod = 5
@export var blast_power = 50.0
@export var bullet_speed : float = 150
@export var bullet_drop = .3
@export var random_spread_amt = 1.0
@export var fire_pitch_scale_amt = .2
@export_group("Gun Assets")
@export_subgroup("Main Assets")
@export var bullet : Resource
@export_subgroup("Raycast Nodes")
@export var anim_player : Node
@export var barrel_raycast : Node
@export_subgroup("Audio Clips")
@export var audio_fire : Node
@export var audio_empty : Node
@export var audio_reload : Node
@onready var smoke: GPUParticles3D = $BlunderbusHandle/Blunderbus/Smoke
@onready var player = get_tree().current_scene.player
@onready var level_control = get_tree().current_scene
@onready var ammo_current
@onready var smoke_timer: Timer = $SmokeTimer
@onready var fire_smoke: GPUParticles3D = $BlunderbusHandle/Blunderbus/fire_smoke
var rng = RandomNumberGenerator.new()
var gun_index
#var ammo_current
var ammo_reserve
# Called when the node enters the scene tree for the first time.
func _ready():
#smoke.emitting = false
start_position = self.position
start_rotation = self.rotation
random_spread_start = random_spread_amt
if fire_mode == 0:
cycle_count = 1
cycle_count_start = 1
elif fire_mode == 1:
cycle_count = 1
cycle_count_start = 1
elif fire_mode == 2:
cycle_count = 3
cycle_count_start = 3
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta):
pass
func reload_finished():
if GameGlobals.ammo_reserve[str(ammo_type)] >= max_ammo:
GameGlobals.gun_ammo[gun_name] += max_ammo
GameGlobals.ammo_reserve[str(ammo_type)] -= max_ammo
else:
GameGlobals.gun_ammo[gun_name] += GameGlobals.ammo_reserve[str(ammo_type)]
GameGlobals.ammo_reserve[str(ammo_type)] -= GameGlobals.ammo_reserve[str(ammo_type)]
func shoot(delta):
if GameGlobals.gun_ammo[gun_name] > 0:
if !anim_player.is_playing():
anim_player.play("shoot")
elif !anim_player.is_playing() and cycle_count != 0:
anim_player.play("empty")
audio_empty.play()
func fire():
GameGlobals.gun_ammo[gun_name] -= 1
audio_fire.pitch_scale = 1 + rng.randf_range(-fire_pitch_scale_amt,fire_pitch_scale_amt)
audio_fire.play()
pellet_spawn()
vibration()
fire_smoke.restart()
fire_smoke.emitting = true
smoke_timer.start()
player.recoil.add_recoil(Vector3(0,recoil_amount.y,recoil_amount.z),10,10)
player.recoil.add_gun_recoil(recoil_amount.x)
player.velocity += player.bullet_ray.global_basis * Vector3(0,0, kick_amount)
SignalBus.emit_signal("shot_fired")
func reload():
if GameGlobals.gun_ammo[gun_name] < max_ammo and player.gun.anim_player.get_current_animation() != "reload" and GameGlobals.ammo_reserve[str(ammo_type)] > 0:
#player.reloading = true
anim_player.play("reload")
audio_reload.play()
if anim_player.is_playing() and anim_player.current_animation == "reload":
if GameGlobals.gun_ammo[gun_name] == 0:
GameGlobals.gun_ammo[gun_name] = 0
else:
GameGlobals.gun_ammo[gun_name] = 1
func pellet_spawn():
var pellets_remaining = pellets_per_shot
while pellets_remaining > 0:
var lv_x = rng.randf_range(-spread.x,spread.x)
var lv_y = rng.randf_range(-spread.y,spread.y)
# instance bullet
var instance_bullet = bullet.instantiate()
instance_bullet.position = player.bullet_ray.global_position
instance_bullet.transform.basis = player.bullet_ray.global_transform.basis
instance_bullet.linear_velocity += instance_bullet.transform.basis * Vector3(lv_x, lv_y, -bullet_speed) + player.velocity
instance_bullet.bullet_damage = bullet_damage
instance_bullet.bullet_force_mod = bullet_force_mod
instance_bullet.player_position = player.global_position
get_tree().get_root().add_child(instance_bullet)
pellets_remaining -= 1
func swapped_out():
queue_free()
func _on_smoke_timer_timeout() -> void:
smoke.restart()
smoke.emitting = true
smoke_timer.stop()
func vibration():
Input.start_joy_vibration(0,.5,.9,.2)

View File

@@ -1,176 +0,0 @@
extends Node3D
@export_group("Gun Feel")
@export var gun_name : String
@export var gun_icon : Texture2D
@export_enum("Light", "Medium", "Heavy", "Shotgun", "Rocket") var ammo_type: int
@export_enum("Auto", "Single", "Burst") var fire_mode: int
@export var gun_info : gun_stats
@export var hitscan_enabled : bool = false
@export var fov_zoom_amt = .98
@export var ads : bool = false
@export var recoil_amount : Vector3 = Vector3(.2,.05,.05)
@export var kick_amount : float = .1
@export var max_ammo = 15
@export var start_mags = 3
@export var bullet_damage = 1
@export var smoke_enabled : bool = false
@export var bullet_force_mod = 5.0
@export var bullet_speed = 150
@export var bullet_drop = .3
@export var random_spread_amt = 1.0
@export var fire_pitch_scale_amt = .2
@export_group("Gun Assets")
@export_subgroup("Main Assets")
@export var r_hand_location : Node
@export var l_hand_location : Node
@export var flare_light : Node
@export var bullet : Resource
@export var bullet_fake : Resource
@export var bullethole : Resource
@export var casing : Resource
@export var mag : Resource
@export_subgroup("Raycast Nodes")
@export var anim_player : Node
@export var barrel_raycast : Node
@export var casing_ejector : Node
@export var mag_ejector : Node
@export_subgroup("Audio Clips")
@export var audio_fire : Node
@export var audio_empty : Node
@export var audio_reload : Node
@onready var player = get_tree().current_scene.player
@onready var level_control = get_tree().current_scene
@onready var muzzle_smoke = preload("res://assets/muzzle_smoke.tscn")
var start_position
var start_rotation
var random_spread_start
var cycle_count_start
var cycle_count
var rng = RandomNumberGenerator.new()
var gun_index
# Called when the node enters the scene tree for the first time.
func _ready():
random_spread_start = random_spread_amt
if fire_mode == 0:
cycle_count = 1
cycle_count_start = 1
elif fire_mode == 1:
cycle_count = 1
cycle_count_start = 1
elif fire_mode == 2:
cycle_count = 3
cycle_count_start = 3
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta):
pass
func reload_finished():
if GameGlobals.ammo_reserve[str(ammo_type)] >= max_ammo:
GameGlobals.gun_ammo[gun_name] += max_ammo
GameGlobals.ammo_reserve[str(ammo_type)] -= max_ammo
else:
GameGlobals.gun_ammo[gun_name] += GameGlobals.ammo_reserve[str(ammo_type)]
GameGlobals.ammo_reserve[str(ammo_type)] -= GameGlobals.ammo_reserve[str(ammo_type)]
func shoot(delta):
if GameGlobals.gun_ammo[gun_name] > 0 and cycle_count > 0:
if !anim_player.is_playing():
GameGlobals.gun_ammo[gun_name] -= 1
#audio and anims
audio_fire.pitch_scale = 1 + rng.randf_range(-fire_pitch_scale_amt,fire_pitch_scale_amt)
audio_fire.play()
anim_player.play("shoot")
vibration()
bullet_fire()
hitscan_fire()
spawn_casing()
if smoke_enabled:
spawn_muzzle_smoke()
player.recoil.add_recoil(Vector3(0,recoil_amount.y,recoil_amount.z),10,10)
player.recoil.add_gun_recoil(recoil_amount.x)
#player.velocity += player.bullet_ray.global_basis * Vector3(0,0, kick_amount)
SignalBus.emit_signal("shot_fired")
if fire_mode != 0:
cycle_count -= 1
elif !anim_player.is_playing() and cycle_count != 0:
anim_player.play("empty")
audio_empty.play()
func reload():
if GameGlobals.gun_ammo[gun_name] < max_ammo and player.gun.anim_player.get_current_animation() != "reload" and GameGlobals.ammo_reserve[str(ammo_type)] > 0:
#player.reloading = true
anim_player.play("reload")
audio_reload.play()
if anim_player.is_playing() and anim_player.current_animation == "reload":
if GameGlobals.gun_ammo[gun_name] == 0:
GameGlobals.gun_ammo[gun_name] = 0
else:
GameGlobals.gun_ammo[gun_name] = 1
func spawn_mag():
var instance_mag = mag.instantiate()
instance_mag.position = mag_ejector.global_position
instance_mag.transform.basis = mag_ejector.global_transform.basis
instance_mag.linear_velocity += transform.basis * Vector3(0, -20, 0) + player.velocity
get_tree().get_root().add_child(instance_mag)
func spawn_casing():
# Casing transform
var instance_casing = casing.instantiate()
instance_casing.position = casing_ejector.global_position
instance_casing.transform.basis = casing_ejector.global_transform.basis
instance_casing.player_velocity = player.velocity * transform.basis
get_tree().get_root().add_child(instance_casing)
func spawn_muzzle_smoke():
var instance_smoke = muzzle_smoke.instantiate()
instance_smoke.global_transform.basis = barrel_raycast.global_transform.basis
add_child(instance_smoke)
func bullet_fire():
var instance_bullet
if hitscan_enabled:
instance_bullet = bullet_fake.instantiate()
else:
instance_bullet = bullet.instantiate()
instance_bullet.position = player.bullet_ray.global_position
#shoot bullet from real gun if gun is folded up
if player.gun_folded == false:
instance_bullet.transform.basis = player.bullet_ray.global_transform.basis
else:
instance_bullet.transform.basis = barrel_raycast.global_transform.basis
instance_bullet.bullet_speed = bullet_speed
instance_bullet.player_velocity = player.velocity * transform.basis
instance_bullet.bullet_drop = bullet_drop
instance_bullet.random_spread_amt = random_spread_amt
instance_bullet.bullet_damage = bullet_damage
instance_bullet.bullet_force_mod = bullet_force_mod
instance_bullet.instance_bullethole = bullethole.instantiate()
instance_bullet.player_position = player.global_position
get_tree().current_scene.add_child(instance_bullet)
func hitscan_fire():
if hitscan_enabled:
# Fire hitscan
if player.gun_folded == false:
player.bullet_ray.hitscan_fire(bullet_damage,bullet_force_mod,bullethole)
else:
barrel_raycast.hitscan_fire(bullet_damage,bullet_force_mod,bullethole)
func swapped_out():
queue_free()
func vibration():
Input.start_joy_vibration(0,.1,.5,.1)

View File

@@ -1,19 +0,0 @@
extends Resource
class_name gun_stats
@export var gun_name : String
@export var gun_icon : Texture2D
@export_enum("Light", "Medium", "Heavy", "Shotgun", "Rocket") var ammo_type: int
@export var fov_zoom_amt = .98
@export var use_ads : bool = false
@export var recoil_amount : Vector3 = Vector3(.2,.05,.05)
@export var kick_amount : float = .1
@export var max_ammo = 15
@export var start_mags = 3
@export var bullet_damage = 1
@export var smoke_enabled : bool = false
@export var bullet_force_mod = 5.0
@export var bullet_speed = 150
@export var bullet_drop = .3
@export var random_spread_amt = 1.0
@export var fire_pitch_scale_amt = .2

View File

@@ -624,12 +624,18 @@ func grab_moveable(body):
held_item.set_collision_layer_value(1,false)
func hud_wobble(delta):
const HUD_WOBBLE_MAX : float = 10
const MOUSE_AMT = 0
const VELOCITY_AMT = 10
var dir = Vector2(-velocity.x * VELOCITY_AMT - mouse_input.x * MOUSE_AMT,velocity.y * VELOCITY_AMT - mouse_input.y * MOUSE_AMT)
var dir_clamped = clamp(dir,Vector2(-HUD_WOBBLE_MAX,-HUD_WOBBLE_MAX),Vector2(HUD_WOBBLE_MAX,HUD_WOBBLE_MAX))
hud.position = lerp(hud.position, dir_clamped, delta * 5)
const HUD_WOBBLE_MAX : float = 20
const MOUSE_AMT = 10
const VELOCITY_AMT = 100
const HUD_SPEED = 10
var dir_mouse = Vector2(-mouse_input.x * MOUSE_AMT,-mouse_input.y * MOUSE_AMT)
var velocity_dir_transformed = velocity.normalized() * global_basis
var velocity_lengh_clamped = clamp(velocity.length(),-VELOCITY_AMT,VELOCITY_AMT)
var dir_velocity = Vector2(-velocity_dir_transformed.x * velocity_lengh_clamped,velocity_dir_transformed.y * velocity_lengh_clamped)
var dir_clamped = clamp(dir_mouse + dir_velocity,Vector2(-HUD_WOBBLE_MAX,-HUD_WOBBLE_MAX),Vector2(HUD_WOBBLE_MAX,HUD_WOBBLE_MAX))
var offset = lerp(hud.position, dir_clamped, delta * HUD_SPEED)
hud.position = offset
hud.crosshair.position = -offset
func hold_item(_delta):
# Move Held Items

View File

@@ -1,192 +0,0 @@
extends Node3D
var start_position
var start_rotation
var random_spread_start
var cycle_count_start
var cycle_count
@export_group("Gun Feel")
@export var gun_name : String
@export var gun_icon : Texture2D
@export_enum("Light", "Medium", "Heavy", "Shotgun", "Rocket") var ammo_type: int
@export_enum("Auto", "Single", "Burst") var fire_mode: int
@export var fov_zoom_amt = 10
@export var ads : bool = false
@export var recoil_amount : Vector3 = Vector3(1,.1,.1)
@export var recoil_speed_change : float = 4
@export var max_ammo = 15
@export var start_mags = 3
@export var bullet_damage = 1
@export var kick_amount = 1
@export var bullet_force_mod = 5
@export var bullet_speed = 150
@export var bullet_drop = .3
@export var random_spread_amt = 1.0
@export var fire_pitch_scale_amt = .2
@export_group("Gun Assets")
@export_subgroup("Main Assets")
@export var r_hand_location : Node
@export var l_hand_location : Node
@export var chamber : Node
@export var bullet : Resource
@export var bullethole : Resource
@export var spawn_casing : Resource
@export_subgroup("Revolver/Casings")
@export var casing0 : Node
@export var casing1 : Node
@export var casing2 : Node
@export var casing3 : Node
@export var casing4 : Node
@export var casing5 : Node
@export var casing_spawn0 : Node
@export var casing_spawn1 : Node
@export var casing_spawn2 : Node
@export var casing_spawn3 : Node
@export var casing_spawn4 : Node
@export var casing_spawn5 : Node
@export_subgroup("Revolver/Bullets")
@export var bullet0 : Node
@export var bullet1 : Node
@export var bullet2 : Node
@export var bullet3 : Node
@export var bullet4 : Node
@export var bullet5 : Node
@export_subgroup("Raycast Nodes")
@export var anim_player : Node
@export var barrel_raycast : Node
@export_subgroup("Audio Clips")
@export var audio_fire : Node
@export var audio_empty : Node
@export var audio_reload : Node
@onready var player = get_tree().current_scene.player
@onready var level_control = get_tree().current_scene
@onready var ammo_current
var chamber_rot_amt = 0
var casing_array = []
var casing_spawn_array = []
var bullet_array = []
var rng = RandomNumberGenerator.new()
var gun_index
var casings_chamber_last
# Called when the node enters the scene tree for the first time.
func _ready():
start_position = self.position
start_rotation = self.rotation
random_spread_start = random_spread_amt
casings_chamber_last = max_ammo
casing_array = [casing0,casing1,casing2,casing3,casing4,casing5]
casing_spawn_array = [casing_spawn0,casing_spawn1,casing_spawn2,casing_spawn3,casing_spawn4,casing_spawn5]
bullet_array = [bullet0,bullet1,bullet2,bullet3,bullet4,bullet5]
if fire_mode == 0:
cycle_count = 1
cycle_count_start = 1
elif fire_mode == 1:
cycle_count = 1
cycle_count_start = 1
elif fire_mode == 2:
cycle_count = 3
cycle_count_start = 3
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
var rot_amount = chamber_rot_amt * delta * 10
chamber.rotate_object_local(Vector3(0,-1,0),deg_to_rad(rot_amount))
chamber_rot_amt -= rot_amount
func reload_finished():
#if max ammo in reserve fill all the way
if GameGlobals.ammo_reserve[str(ammo_type)] >= max_ammo:
GameGlobals.gun_ammo[gun_name] += max_ammo
GameGlobals.ammo_reserve[str(ammo_type)] -= max_ammo
casings_chamber_last = max_ammo
for i in casing_array:
i.visible = true
for i in bullet_array:
i.visible = true
player.reloading = false
#if not max ammo in reserve add remaining ammo
else:
GameGlobals.gun_ammo[gun_name] += GameGlobals.ammo_reserve[str(ammo_type)]
var casings_in_chamber = GameGlobals.ammo_reserve[str(ammo_type)]
casings_chamber_last = GameGlobals.ammo_reserve[str(ammo_type)]
GameGlobals.ammo_reserve[str(ammo_type)] -= GameGlobals.ammo_reserve[str(ammo_type)]
while casings_in_chamber > 0:
casing_array[casings_in_chamber].visible = true
bullet_array[casings_in_chamber].visible = true
casings_in_chamber -= 1
await get_tree().create_timer(.01).timeout
player.reloading = false
func shoot(delta):
if GameGlobals.gun_ammo[gun_name] > 0 and cycle_count > 0:
if !anim_player.is_playing():
GameGlobals.gun_ammo[gun_name] -= 1
audio_fire.pitch_scale = 1 + rng.randf_range(-fire_pitch_scale_amt,fire_pitch_scale_amt)
audio_fire.play()
anim_player.play("shoot") #actual bullet spawn triggered by animation
SignalBus.emit_signal("shot_fired")
if fire_mode != 0:
cycle_count -= 1
elif !anim_player.is_playing() and cycle_count != 0:
anim_player.play("empty")
audio_empty.play()
func fire(delta):
var instance_bullet = bullet.instantiate()
instance_bullet.position = player.bullet_ray.global_position
#shoot bullet from real gun if gun is folded up
if player.gun_folded == false:
instance_bullet.transform.basis = player.bullet_ray.global_transform.basis
else:
instance_bullet.transform.basis = barrel_raycast.global_transform.basis
instance_bullet.bullet_speed = bullet_speed
instance_bullet.bullet_drop = bullet_drop
instance_bullet.bullet_damage = bullet_damage
instance_bullet.random_spread_amt = random_spread_amt
instance_bullet.bullet_force_mod = bullet_force_mod
instance_bullet.player_position = player.global_position
instance_bullet.player_velocity = (player.velocity * player.transform.basis)
instance_bullet.instance_bullethole = bullethole.instantiate()
get_tree().get_root().add_child(instance_bullet)
player.recoil.add_recoil(Vector3(0,recoil_amount.y,recoil_amount.z),10,recoil_speed_change)
player.recoil.add_gun_recoil(recoil_amount.x)
chamber_rot_amt += 60
Input.start_joy_vibration(0,.5,.9,.2)
func reload():
if GameGlobals.gun_ammo[gun_name] < max_ammo and player.gun.anim_player.get_current_animation() != "reload" and GameGlobals.ammo_reserve[str(ammo_type)] > 0:
anim_player.play("reload")
audio_reload.play()
for i in bullet_array:
i.visible = false
if anim_player.is_playing() and anim_player.current_animation == "reload":
GameGlobals.gun_ammo[gun_name] = 0
func spawn_casings():
for i in casing_array:
i.visible = false
if casings_chamber_last > 0:
var instance_casing = spawn_casing.instantiate()
instance_casing.position = i.global_position
instance_casing.random_rotation = false
instance_casing.transform.basis = i.global_transform.basis
instance_casing.player_velocity = player.velocity * transform.basis
instance_casing.rotation.x += deg_to_rad(90)
instance_casing.linear_velocity.y = -(8 + rng.randf_range(0,3))
get_tree().get_root().add_child(instance_casing)
casings_chamber_last -= 1
func swapped_out():
queue_free()

View File

@@ -1,126 +0,0 @@
extends Node3D
var start_position
var start_rotation
var random_spread_start
var cycle_count_start
var cycle_count
var ads = false
@export_group("Gun Feel")
@export var gun_name : String
@export var gun_icon : Texture2D
@export_enum("Light", "Medium", "Heavy", "Shotgun", "Rocket") var ammo_type: int
@export_enum("Auto", "Single", "Burst") var fire_mode: int
@export var fov_zoom_amt = .98
@export var recoil_amount : Vector3 = Vector3(.2,0,0)
@export var max_ammo = 15
@export var start_mags = 3
@export var bullet_damage = 1
@export var blast_power = 50.0
@export var bullet_speed : float = 150
@export var bullet_drop = .3
@export var random_spread_amt = 1.0
@export var fire_pitch_scale_amt = .2
@export_group("Gun Assets")
@export_subgroup("Main Assets")
@export var flare_light : Node
@export var bullet : Resource
@export var casing : Resource
@export var mag : Resource
@export_subgroup("Raycast Nodes")
@export var anim_player : Node
@export var barrel_raycast : Node
@export var casing_ejector : Node
@export var mag_ejector : Node
@export_subgroup("Audio Clips")
@export var audio_fire : Node
@export var audio_empty : Node
@export var audio_reload : Node
@onready var player = get_tree().current_scene.player
@onready var level_control = get_tree().current_scene
var rng = RandomNumberGenerator.new()
var gun_index
# Called when the node enters the scene tree for the first time.
func _ready():
start_position = self.position
start_rotation = self.rotation
random_spread_start = random_spread_amt
if fire_mode == 0:
cycle_count = 1
cycle_count_start = 1
elif fire_mode == 1:
cycle_count = 1
cycle_count_start = 1
elif fire_mode == 2:
cycle_count = 3
cycle_count_start = 3
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta):
pass
func reload_finished():
if GameGlobals.ammo_reserve[str(ammo_type)] >= max_ammo:
GameGlobals.gun_ammo[gun_name] += max_ammo
GameGlobals.ammo_reserve[str(ammo_type)] -= max_ammo
else:
GameGlobals.gun_ammo[gun_name] += GameGlobals.ammo_reserve[str(ammo_type)]
GameGlobals.ammo_reserve[str(ammo_type)] -= GameGlobals.ammo_reserve[str(ammo_type)]
func shoot(delta):
if GameGlobals.gun_ammo[gun_name] > 0 and cycle_count > 0:
if !anim_player.is_playing():
GameGlobals.gun_ammo[gun_name] -= 1
#RECOIL --- fix later to happen over a period of time
audio_fire.pitch_scale = 1 + rng.randf_range(-fire_pitch_scale_amt,fire_pitch_scale_amt)
audio_fire.play()
anim_player.play("shoot")
# instance bullet
var instance_bullet = bullet.instantiate()
instance_bullet.position = barrel_raycast.global_position
instance_bullet.transform.basis = barrel_raycast.global_transform.basis
instance_bullet.bullet_speed = bullet_speed
instance_bullet.player_velocity = player.velocity
instance_bullet.bullet_damage = bullet_damage
instance_bullet.blast_power = blast_power
instance_bullet.player_position = player.global_position
get_tree().get_root().add_child(instance_bullet)
player.recoil.add_recoil(recoil_amount,10,10)
SignalBus.emit_signal("shot_fired")
if fire_mode != 0:
cycle_count -= 1
elif !anim_player.is_playing() and cycle_count != 0:
anim_player.play("empty")
audio_empty.play()
func reload():
if GameGlobals.gun_ammo[gun_name] < max_ammo and player.gun.anim_player.get_current_animation() != "reload" and GameGlobals.ammo_reserve[str(ammo_type)] > 0:
#player.reloading = true
anim_player.play("reload")
audio_reload.play()
if anim_player.is_playing() and anim_player.current_animation == "reload":
if GameGlobals.gun_ammo[gun_name] == 0:
GameGlobals.gun_ammo[gun_name] = 0
else:
GameGlobals.gun_ammo[gun_name] = 1
func spawn_mag():
var instance_mag = mag.instantiate()
instance_mag.position = mag_ejector.global_position
instance_mag.transform.basis = mag_ejector.global_transform.basis
get_tree().get_root().add_child(instance_mag)
func swapped_out():
queue_free()

View File

@@ -262,6 +262,8 @@ func bullet_fire():
revolver_chamber_rot_amt += 60
if weapon_info.smoke_enabled:
spawn_muzzle_smoke()
if casing_ejector != null:
spawn_casing()
player.recoil.add_recoil(Vector3(0,weapon_info.recoil_amount.y,weapon_info.recoil_amount.z),10,10)
player.recoil.add_gun_recoil(weapon_info.recoil_amount.x)