Added fire mode select on gun script

This commit is contained in:
Derek
2024-07-14 20:06:00 -05:00
parent 582e03202a
commit 6fedc3e3c5
18 changed files with 382 additions and 31 deletions

View File

@@ -3,8 +3,11 @@ extends Node3D
var start_position
var start_rotation
var random_spread_start
var cycle_count_start
var cycle_count
@export_group("Gun Feel")
@export_enum("Auto", "Single", "Burst") var fire_mode: int
@export var recoil_amount = .2
@export var max_ammo = 15
@export var start_mags = 3
@@ -13,6 +16,7 @@ var random_spread_start
@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 flare_light : Node
@@ -38,6 +42,16 @@ 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
@@ -58,18 +72,18 @@ func _on_gun_anims_animation_finished(anim_name):
player.reloading = false
func shoot(player,delta):
if player.ammo > 0:
if player.ammo > 0 and cycle_count > 0:
if !anim_player.is_playing():
player.ammo -= 1
#RECOIL --- fix later to happen over a period of time
player.camera.rotation.x = clamp(lerp(player.camera.rotation.x, player.camera.rotation.x + recoil_amount, delta * 10), deg_to_rad(-90), deg_to_rad(60))
#(ADD PLAYER KICK HERE. RELATIVE TO GUN POSITION)
audio_fire.pitch_scale = 1 + rng.randf_range(-.2,.2)
audio_fire.pitch_scale = 1 + rng.randf_range(-fire_pitch_scale_amt,fire_pitch_scale_amt)
audio_fire.play()
anim_player.play("shoot")
# shoot real bullet from camera
# instance bullet
var instance_bullet = bullet.instantiate()
instance_bullet.position = player.bullet_ray.global_position
#shoot bullet from real gun if gun is folded up
@@ -88,8 +102,11 @@ func shoot(player,delta):
instance_casing.position = casing_ejector.global_position
instance_casing.transform.basis = casing_ejector.global_transform.basis
get_tree().get_root().add_child(instance_casing)
if fire_mode == 1 or fire_mode == 2:
cycle_count -= 1
elif !anim_player.is_playing():
elif !anim_player.is_playing() and cycle_count != 0:
anim_player.play("empty")
audio_empty.play()