Started working on implementing bullet flyby sounds spawning
parent
1566707420
commit
3b0d4e8745
|
@ -0,0 +1,7 @@
|
||||||
|
extends Spatial
|
||||||
|
|
||||||
|
#func _ready():
|
||||||
|
# pass
|
||||||
|
|
||||||
|
func _on_SoundPlayer_SoundPlayer_finished():
|
||||||
|
queue_free()
|
|
@ -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"]
|
|
@ -1,6 +1,8 @@
|
||||||
extends Node3D
|
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.
|
# 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
|
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_file("*01.wav") var SoundClip := SFX_dir + "/" + "Test_01.wav"
|
||||||
@export var AutoPlay := false
|
@export var AutoPlay := false
|
||||||
|
@ -165,3 +167,7 @@ func pick_random():
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
#func _process(delta):
|
#func _process(delta):
|
||||||
# pass
|
# pass
|
||||||
|
|
||||||
|
|
||||||
|
func _on_AudioStreamPlayer3D_finished():
|
||||||
|
emit_signal(&"SoundPlayer_finished")
|
||||||
|
|
|
@ -12,6 +12,7 @@ var casing = preload("res://Assets/Weapons/Handgun/Casing.tscn")
|
||||||
var flash = preload("res://Assets/Effects/MuzzleFlash.tscn")
|
var flash = preload("res://Assets/Effects/MuzzleFlash.tscn")
|
||||||
var tracer = preload("res://Assets/Effects/BulletTracer.tscn")
|
var tracer = preload("res://Assets/Effects/BulletTracer.tscn")
|
||||||
var impact_wall = preload("res://Assets/Effects/ImpactSparks.tscn")
|
var impact_wall = preload("res://Assets/Effects/ImpactSparks.tscn")
|
||||||
|
var flyby_sound = preload("res://Assets/Audio/BulletFlyBySoundPlayer.tscn")
|
||||||
|
|
||||||
|
|
||||||
# accuracy
|
# 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
|
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)
|
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
|
return # skip the rest - it's deprecated code
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
####################### DEPRACATED ↓↓↓↓↓↓↓↓
|
####################### DEPRACATED ↓↓↓↓↓↓↓↓
|
||||||
|
|
||||||
var impact_vfx
|
var impact_vfx
|
||||||
|
|
Reference in New Issue