From 7ab4813d2a69a2de55564777873d6f623cd8d78c Mon Sep 17 00:00:00 2001 From: Derek Date: Thu, 6 Mar 2025 08:32:43 -0600 Subject: [PATCH] fixed hud wobble and removed deprecated scripts --- scripts/blunderbus.gd | 145 ------------------------- scripts/gun.gd | 176 ------------------------------- scripts/gun_stats_resource.gd | 19 ---- scripts/player.gd | 18 ++-- scripts/revolver_1.gd | 192 ---------------------------------- scripts/rocket_launcher.gd | 126 ---------------------- scripts/weapon_uberscript.gd | 2 + 7 files changed, 14 insertions(+), 664 deletions(-) delete mode 100644 scripts/blunderbus.gd delete mode 100644 scripts/gun.gd delete mode 100644 scripts/gun_stats_resource.gd delete mode 100644 scripts/revolver_1.gd delete mode 100644 scripts/rocket_launcher.gd diff --git a/scripts/blunderbus.gd b/scripts/blunderbus.gd deleted file mode 100644 index eb183dd..0000000 --- a/scripts/blunderbus.gd +++ /dev/null @@ -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) diff --git a/scripts/gun.gd b/scripts/gun.gd deleted file mode 100644 index 5b2cd40..0000000 --- a/scripts/gun.gd +++ /dev/null @@ -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) diff --git a/scripts/gun_stats_resource.gd b/scripts/gun_stats_resource.gd deleted file mode 100644 index 8d55c71..0000000 --- a/scripts/gun_stats_resource.gd +++ /dev/null @@ -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 diff --git a/scripts/player.gd b/scripts/player.gd index c7a4842..e30f802 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -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 diff --git a/scripts/revolver_1.gd b/scripts/revolver_1.gd deleted file mode 100644 index 95dd2bd..0000000 --- a/scripts/revolver_1.gd +++ /dev/null @@ -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() diff --git a/scripts/rocket_launcher.gd b/scripts/rocket_launcher.gd deleted file mode 100644 index e1bfe20..0000000 --- a/scripts/rocket_launcher.gd +++ /dev/null @@ -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() diff --git a/scripts/weapon_uberscript.gd b/scripts/weapon_uberscript.gd index d1806ca..0618125 100644 --- a/scripts/weapon_uberscript.gd +++ b/scripts/weapon_uberscript.gd @@ -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)