Spray sfx is pitch-shifted based on relative angle to player

This commit is contained in:
Rob Kelly 2025-04-03 12:49:53 -06:00
parent a8d1128eaf
commit b60ab2e74f
4 changed files with 20 additions and 1 deletions

View File

@ -1,6 +1,9 @@
class_name SpraySFX extends AudioStreamPlayer3D
## Plays only as long as `activate` is called every frame.
@export var base_pitch := 1.0
@export var pitch_shape_scale := 0.5
var _active_this_frame := false
@ -8,6 +11,14 @@ func activate() -> void:
_active_this_frame = true
func set_angle_from_normal(normal: Vector3) -> void:
var to_player := Player.instance.global_position - global_position
var angle_to_player := normal.angle_to(to_player)
# linear pitch shape
pitch_scale = base_pitch - (2 * angle_to_player / PI) * pitch_shape_scale
func _process(_delta: float) -> void:
if _active_this_frame:
if not playing:

View File

@ -11,6 +11,7 @@ class_name PointSpray extends Spray
func _spray() -> void:
if laser.is_colliding():
spray_sfx.activate()
spray_sfx.set_angle_from_normal(laser.get_collision_normal())
var collider := laser.get_collider()
if collider is GunkBody:

View File

@ -43,6 +43,7 @@ func _spray() -> void:
for laser: LaserCast in spray_casts.get_children():
if laser.is_colliding():
spray_sfx.activate()
spray_sfx.set_angle_from_normal(laser.get_collision_normal())
var collider := laser.get_collider()
if collider is GunkBody:

View File

@ -98,3 +98,9 @@
- CC0
- retrieved from https://freesound.org/people/zolopher/sounds/44203/
- assets/sfx/grunk/splat*.wav
- "shower.mp3"
- author: geodylabs
- CC BY 4.0
- retrieved from https://freesound.org/people/geodylabs/sounds/122810/
- assets/sfx/tools/spray.wav
- modified