Started working on implementing bullet flyby sounds spawning

feature-flyby
unfa 2021-11-21 23:53:04 +01:00
parent 1566707420
commit 3b0d4e8745
4 changed files with 69 additions and 0 deletions

View File

@ -0,0 +1,7 @@
extends Spatial
#func _ready():
# pass
func _on_SoundPlayer_SoundPlayer_finished():
queue_free()

View File

@ -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"]

View File

@ -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")

View File

@ -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