From d4f065b356c5a2932e65c91b4413d1bf76b5409e Mon Sep 17 00:00:00 2001 From: Bixilon Date: Sun, 5 Feb 2023 21:17:00 +0100 Subject: [PATCH] audio: check after queue again if sound can be skipped This should avoid more "No source available" errors --- .../gui/rendering/sound/AudioPlayer.kt | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/sound/AudioPlayer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/sound/AudioPlayer.kt index d08c6a0ec..8d9e6026d 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/sound/AudioPlayer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/sound/AudioPlayer.kt @@ -180,18 +180,24 @@ class AudioPlayer( return source } + private fun shouldPlay(sound: Sound, position: Vec3?): Boolean { + if (position == null) return true + val distance = (this.listener.position - position).length2() + if (distance >= sound.attenuationDistance * sound.attenuationDistance) { + return false + } + + return true + } + private fun playSound(sound: Sound, position: Vec3? = null, volume: Float = 1.0f, pitch: Float = 1.0f) { if (!profile.enabled) { return } - position?.let { - val distance = (this.listener.position - it).length() - if (distance >= sound.attenuationDistance) { - return - } - } + position?.let { if (!shouldPlay(sound, position)) return } queue += add@{ sound.load(connection.assetsManager) + position?.let { if (!shouldPlay(sound, position)) return@add } val source = getAvailableSource() if (source == null) { Log.log(LogMessageType.AUDIO, LogLevels.WARN) { "No source available: $sound" }