diff --git a/Game/Assets/Audio/BulletFlyBySoundPlayer.gd b/Game/Assets/Audio/BulletFlyBySoundPlayer.gd new file mode 100644 index 0000000..d0dc43e --- /dev/null +++ b/Game/Assets/Audio/BulletFlyBySoundPlayer.gd @@ -0,0 +1,7 @@ +extends Spatial + +#func _ready(): +# pass + +func _on_SoundPlayer_SoundPlayer_finished(): + queue_free() diff --git a/Game/Assets/Audio/BulletFlyBySoundPlayer.tscn b/Game/Assets/Audio/BulletFlyBySoundPlayer.tscn new file mode 100644 index 0000000..747f1d9 --- /dev/null +++ b/Game/Assets/Audio/BulletFlyBySoundPlayer.tscn @@ -0,0 +1,27 @@ +[gd_scene load_steps=5 format=3 uid="uid://d4iqe4blqefah"] + +[ext_resource type="PackedScene" uid="uid://c5cwnfuw4go1b" path="res://Assets/Audio/SoundPlayer.tscn" id="1"] +[ext_resource type="Script" path="res://Assets/Audio/BulletFlyBySoundPlayer.gd" id="2"] +[ext_resource type="AudioStream" uid="uid://dlbnvd5ypkwor" path="res://Assets/SFX/Weapons_BulletFlyBy_01.wav" id="3_rujqw"] + +[sub_resource type="BoxMesh" id="BoxMesh_8lyvt"] + +[node name="BulletFlyBySoundPlayer" type="Node3D"] +script = ExtResource( "2" ) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0) +mesh = SubResource( "BoxMesh_8lyvt" ) + +[node name="SoundPlayer" parent="." instance=ExtResource( "1" )] +SoundClip = "res://Assets/SFX/Weapons_BulletFlyBy_01.wav" +AutoPlay = true +RandomizePitch = 0.3 + +[node name="AudioStreamPlayer3D" parent="SoundPlayer" index="0"] +stream = ExtResource( "3_rujqw" ) + +[connection signal="SoundPlayer_finished" from="SoundPlayer" to="." method="_on_SoundPlayer_SoundPlayer_finished"] +[connection signal="finished" from="SoundPlayer/AudioStreamPlayer3D" to="SoundPlayer" method="_on_AudioStreamPlayer3D_finished"] + +[editable path="SoundPlayer"] diff --git a/Game/Assets/Audio/SoundPlayer.gd b/Game/Assets/Audio/SoundPlayer.gd index 086561e..93ff70d 100644 --- a/Game/Assets/Audio/SoundPlayer.gd +++ b/Game/Assets/Audio/SoundPlayer.gd @@ -1,6 +1,8 @@ extends Node3D # This Scene is meant for playing back sound groups. For simple, singular sound effects use stock Godot nodes, this is meant to play a random sound among a group with variations. +signal SoundPlayer_finished + const SFX_dir = "res://Assets/SFX" # all sound clips must reside somewhere in this directory @export_file("*01.wav") var SoundClip := SFX_dir + "/" + "Test_01.wav" @export var AutoPlay := false @@ -165,3 +167,7 @@ func pick_random(): # Called every frame. 'delta' is the elapsed time since the previous frame. #func _process(delta): # pass + + +func _on_AudioStreamPlayer3D_finished(): + emit_signal(&"SoundPlayer_finished") diff --git a/Game/Assets/Weapons/Weapon.gd b/Game/Assets/Weapons/Weapon.gd index d30438d..ef73b77 100644 --- a/Game/Assets/Weapons/Weapon.gd +++ b/Game/Assets/Weapons/Weapon.gd @@ -12,6 +12,7 @@ var casing = preload("res://Assets/Weapons/Handgun/Casing.tscn") var flash = preload("res://Assets/Effects/MuzzleFlash.tscn") var tracer = preload("res://Assets/Effects/BulletTracer.tscn") var impact_wall = preload("res://Assets/Effects/ImpactSparks.tscn") +var flyby_sound = preload("res://Assets/Audio/BulletFlyBySoundPlayer.tscn") # accuracy @@ -69,8 +70,36 @@ var spread = spread_min if is_multiplayer_authority(): # only do this on the attacker's local instance of the game give_damage(ray['collider'], ray['position'], ray['normal'], 20, self.global_transform.origin, Globals.DamageType.BULLET, 1.0) + ### bullet flyby sounds + + if ray: # if we hit something - use that to evaluate the flyby sound + to = ray['position'] + + var x := Vector3.ZERO + var A = from + var B = to + + var AB = B - A + var C = get_tree().get_root().get_camera_3d().global_transform.origin + + if A.dot(C) < 0 and B.dot(C) < 0: + print("Firing away from the camera") + elif A.dot(C) > 0 and B.dot(C) > 0: + print("Bullet hit before passing by") + else: + var d0 + var d1 + var X = d0/(d0-d1) + var flyby = flyby_sound.instantiate() + get_tree().root.add_child(flyby) + flyby.global_transform.origin = x + + # TODO - spawn + return # skip the rest - it's deprecated code + + ####################### DEPRACATED ↓↓↓↓↓↓↓↓ var impact_vfx