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 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: play() else: stop() _active_this_frame = false