From 32a7aba47c3e2c79938888ad384c425a63edadc8 Mon Sep 17 00:00:00 2001 From: unfa Date: Sat, 18 Dec 2021 17:04:29 +0100 Subject: [PATCH] Implemented player land sound Also added option to remotely set unit_db on SoundPlayer Removed debug prints in WindSFX and Player --- Asset Sources/HUD/MuteIcon.svg | 73 ++++++++++++++++++++++++ Game/Assets/Audio/SoundPlayer.gd | 3 + Game/Assets/Audio/WindSFX.gd | 6 +- Game/Assets/Characters/Player.gd | 27 +++++++-- Game/Assets/Characters/Player.tscn | 27 ++++++++- Game/Assets/SFX/Player_Impact.wav | 3 + Game/Assets/SFX/Player_Impact.wav.import | 22 +++++++ 7 files changed, 150 insertions(+), 11 deletions(-) create mode 100644 Asset Sources/HUD/MuteIcon.svg create mode 100644 Game/Assets/SFX/Player_Impact.wav create mode 100644 Game/Assets/SFX/Player_Impact.wav.import diff --git a/Asset Sources/HUD/MuteIcon.svg b/Asset Sources/HUD/MuteIcon.svg new file mode 100644 index 0000000..20197a2 --- /dev/null +++ b/Asset Sources/HUD/MuteIcon.svg @@ -0,0 +1,73 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/Game/Assets/Audio/SoundPlayer.gd b/Game/Assets/Audio/SoundPlayer.gd index ba3c0a1..3fb7e17 100644 --- a/Game/Assets/Audio/SoundPlayer.gd +++ b/Game/Assets/Audio/SoundPlayer.gd @@ -111,6 +111,9 @@ func pick_random(): assert(len(clips) > 0, "SoundPlayer has no clips to choose from") return randi() % len(clips) +@rpc(call_local, any_peer, reliable) func set_unit_db(value): + $AudioStreamPlayer3D.unit_db = value + @rpc(call_local, any_peer, reliable) func play(): # temporary diff --git a/Game/Assets/Audio/WindSFX.gd b/Game/Assets/Audio/WindSFX.gd index c2eb52a..f1ece35 100644 --- a/Game/Assets/Audio/WindSFX.gd +++ b/Game/Assets/Audio/WindSFX.gd @@ -31,7 +31,7 @@ func _physics_process(delta): playing = false var speed = get_parent().get_parent().motion_velocity.length() - print("speed: ", speed) + #print("speed: ", speed) if speed > min_speed + min_speed_hysteresis / 2: stream_paused = false @@ -39,7 +39,7 @@ func _physics_process(delta): stream_paused = true volume_db = speed_to_volume.interpolate_baked(speed / max_speed) - print(volume_db) + #print(volume_db) audio_filter.cutoff_hz = speed_to_cutoff.interpolate_baked(speed / max_speed) * 10 # cnvert to 0-1 kHz range - print(audio_filter.cutoff_hz) + #print(audio_filter.cutoff_hz) diff --git a/Game/Assets/Characters/Player.gd b/Game/Assets/Characters/Player.gd index e34ef56..61e1c5f 100644 --- a/Game/Assets/Characters/Player.gd +++ b/Game/Assets/Characters/Player.gd @@ -111,8 +111,8 @@ var velocity := Vector3.ZERO var gravity_vec := Vector3.ZERO var previously_on_floor := false - -var lagging_movement_velocity = Vector3.ZERO +var previous_motion_velocity := Vector3.ZERO +var lagging_movement_velocity := Vector3.ZERO var dead = false#: # used to workaround Godot crash when destroying player_nodes # set(value): @@ -505,17 +505,34 @@ func _physics_process(delta): $Head/Camera/Hand/Weapon.transform.origin.y -= 0.025 #$Head/Camera/Hand/Weapon.transform.origin.y -= 0.05 - if is_on_floor() and not previously_on_floor: - $Head/Camera/Hand/Weapon.transform.origin.y -= 1 + if is_on_floor() and not previously_on_floor: # we just landed from a jump or fall + var impact = (motion_velocity - previous_motion_velocity).length_squared() + #print ("impact: ", impact) + + $Head/Camera/Hand/Weapon.transform.origin.y -= impact / 3000 + + # only play "ugh!" for certain force of impact + if impact >= 250: + $LandSFX.rpc(&"play") + + # change volue based on impact force + $ImpactSFX.rpc(&"set_unit_db", min(-45 + (impact / 25), 0)) + $ImpactSFX.rpc(&"play") + # if # $Head/Camera/Hand/Weapon.transform.origin.y -= 0.25 + #print("on floor now: ", is_on_floor(), " previously: ", previously_on_floor) + speed = speed_type[medium] accel = accel_type[medium] velocity = velocity.lerp(direction * speed, accel * delta) + previous_motion_velocity = motion_velocity motion_velocity = velocity + gravity_vec + + previously_on_floor = is_on_floor() move_and_slide() if not is_on_floor() and not ground_check.is_colliding(): # while in mid-air collisions affect momentum @@ -523,7 +540,7 @@ func _physics_process(delta): velocity.z = motion_velocity.z gravity_vec.y = motion_velocity.y - previously_on_floor = is_on_floor() + #lagging_movement_velocity.lerp(motion_velocity, delta) diff --git a/Game/Assets/Characters/Player.tscn b/Game/Assets/Characters/Player.tscn index a0cd9ee..e8b00e7 100644 --- a/Game/Assets/Characters/Player.tscn +++ b/Game/Assets/Characters/Player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=44 format=3 uid="uid://cwuys43c7ak61"] +[gd_scene load_steps=46 format=3 uid="uid://cwuys43c7ak61"] [ext_resource type="Script" path="res://Assets/Characters/Player.gd" id="1"] [ext_resource type="AudioStream" uid="uid://cy80oknjqs5om" path="res://Assets/SFX/Wind.wav" id="2_4ifi7"] @@ -11,9 +11,11 @@ [ext_resource type="AudioStream" uid="uid://dnffb1xcdi2u5" path="res://Assets/SFX/Player_Pain_01.wav" id="6_a4nh8"] [ext_resource type="AudioStream" uid="uid://dpxtkvkdj2ri3" path="res://Assets/SFX/Player_Jump_02.wav" id="6_s024f"] [ext_resource type="AudioStream" uid="uid://gqypp5xk2ka7" path="res://Assets/SFX/Player_Pain_02.wav" id="7_0tfg5"] -[ext_resource type="Texture2D" uid="uid://w2koos4gq0r8" path="res://Assets/Effects/Busy.png" id="8_0hice"] [ext_resource type="AudioStream" uid="uid://ddj28v4w4whkg" path="res://Assets/SFX/Player_Pain_03.wav" id="8_n5il5"] [ext_resource type="AudioStream" uid="uid://xe0bppsq0wef" path="res://Assets/SFX/Player_Pain_04.wav" id="9_bobut"] +[ext_resource type="AudioStream" uid="uid://b2vgruyk0hae" path="res://Assets/SFX/Player_Land_01.wav" id="14_31oxc"] +[ext_resource type="Texture2D" uid="uid://bf7idsht43ljr" path="res://Assets/Effects/FocusMenu.png" id="14_54yom"] +[ext_resource type="AudioStream" uid="uid://dnd66qj5vjnvd" path="res://Assets/SFX/Player_Impact.wav" id="15_6s4ha"] [sub_resource type="StandardMaterial3D" id="4"] albedo_color = Color(0.545098, 0.545098, 0.545098, 1) @@ -227,7 +229,7 @@ tracks/0/keys = { transparency = 1 no_depth_test = true shading_mode = 0 -albedo_texture = ExtResource( "8_0hice" ) +albedo_texture = ExtResource( "14_54yom" ) disable_receive_shadows = true billboard_mode = 1 point_size = 47.3 @@ -392,6 +394,23 @@ attenuation_filter_db = -8.0 [node name="AudioStreamPlayer3D" parent="JumpSFX" index="0"] stream = ExtResource( "6_s024f" ) +unit_size = 10.0 + +[node name="LandSFX" parent="." instance=ExtResource( "5_yiom2" )] + +[node name="AudioStreamPlayer3D" parent="LandSFX" index="0"] +stream = ExtResource( "14_31oxc" ) +unit_size = 10.0 +max_db = 0.0 +autoplay = true + +[node name="ImpactSFX" parent="." instance=ExtResource( "5_yiom2" )] + +[node name="AudioStreamPlayer3D" parent="ImpactSFX" index="0"] +stream = ExtResource( "15_6s4ha" ) +unit_size = 10.0 +max_db = 0.0 +autoplay = true [node name="FocusBanner" type="MeshInstance3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0) @@ -400,3 +419,5 @@ cast_shadow = 0 mesh = SubResource( "QuadMesh_nhjmb" ) [editable path="JumpSFX"] +[editable path="LandSFX"] +[editable path="ImpactSFX"] diff --git a/Game/Assets/SFX/Player_Impact.wav b/Game/Assets/SFX/Player_Impact.wav new file mode 100644 index 0000000..1bffd6a --- /dev/null +++ b/Game/Assets/SFX/Player_Impact.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:246383b801d77c629e975553850d33a007409ca70847bf0b8fe2576e53b62322 +size 28700 diff --git a/Game/Assets/SFX/Player_Impact.wav.import b/Game/Assets/SFX/Player_Impact.wav.import new file mode 100644 index 0000000..2bbb60c --- /dev/null +++ b/Game/Assets/SFX/Player_Impact.wav.import @@ -0,0 +1,22 @@ +[remap] + +importer="wav" +type="AudioStreamSample" +uid="uid://dnd66qj5vjnvd" +path="res://.godot/imported/Player_Impact.wav-51550f51971e5b11ac00ae23762047f5.sample" + +[deps] + +source_file="res://Assets/SFX/Player_Impact.wav" +dest_files=["res://.godot/imported/Player_Impact.wav-51550f51971e5b11ac00ae23762047f5.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop=false +compress/mode=0