extends AudioStreamPlayer const NORMAL_DB := -10.0 const DUCKED_DB := -24.0 const DUCK_IN := 0.15 const DUCK_OUT := 0.4 # these paths wwould need to be updated if renamed or moved const BARK_PATHS := [ "../CanvasPanel/ElevatorPanel/SfxRobotDeepBreath", "../CanvasPanel/ElevatorPanel/SfxRobotSoundsDifficult", "../CanvasPanel/ElevatorPanel/SfxRobotIUnderstand", "../CanvasPanel/ElevatorPanel/SfxRobotThankYou", ] var _barks: Array = [] var _ducked: bool = false var _tween: Tween var _started: bool = false func _ready() -> void: volume_db = NORMAL_DB finished.connect(play) for p in BARK_PATHS: var n := get_node_or_null(p) if n: _barks.append(n) EventBus.game_started.connect(_on_game_started) EventBus.game_won.connect(_on_game_ended) func _process(_delta: float) -> void: if not playing: return var any := false for b in _barks: if b.playing: any = true break if any and not _ducked: _ducked = true _to_db(DUCKED_DB, DUCK_IN) elif not any and _ducked: _ducked = false _to_db(NORMAL_DB, DUCK_OUT) func _to_db(target: float, time: float) -> void: if _tween: _tween.kill() _tween = create_tween() _tween.tween_property(self, "volume_db", target, time) func _on_game_started() -> void: if _started: return _started = true _ducked = false volume_db = NORMAL_DB play() func _on_game_ended() -> void: stop()