2025-03-29 12:31:23 -06:00
|
|
|
class_name SpraySFX extends AudioStreamPlayer3D
|
|
|
|
## Plays only as long as `activate` is called every frame.
|
|
|
|
|
2025-04-03 12:49:53 -06:00
|
|
|
@export var base_pitch := 1.0
|
|
|
|
@export var pitch_shape_scale := 0.5
|
|
|
|
|
2025-03-29 12:31:23 -06:00
|
|
|
var _active_this_frame := false
|
|
|
|
|
|
|
|
|
|
|
|
func activate() -> void:
|
|
|
|
_active_this_frame = true
|
|
|
|
|
|
|
|
|
2025-04-03 12:49:53 -06:00
|
|
|
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
|
|
|
|
|
|
|
|
|
2025-03-29 12:31:23 -06:00
|
|
|
func _process(_delta: float) -> void:
|
|
|
|
if _active_this_frame:
|
|
|
|
if not playing:
|
|
|
|
play()
|
|
|
|
else:
|
|
|
|
stop()
|
|
|
|
|
|
|
|
_active_this_frame = false
|