grunk/src/equipment/beam_sfx/spray_sfx.gd

30 lines
671 B
GDScript3
Raw Normal View History

2025-03-29 12:31:23 -06:00
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
2025-03-29 12:31:23 -06:00
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
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