From d748d489e253faeb2a3cc45e4aad1196fe2ceab4 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Tue, 8 Nov 2022 23:49:53 +0200 Subject: [PATCH] Fixed rare thread crashes --- core/src/com/unciv/UncivGame.kt | 6 ++++-- core/src/com/unciv/ui/audio/MusicController.kt | 9 +++++---- core/src/com/unciv/ui/audio/SoundPlayer.kt | 4 +--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/core/src/com/unciv/UncivGame.kt b/core/src/com/unciv/UncivGame.kt index cb8b7bff82..6e0e3577c4 100644 --- a/core/src/com/unciv/UncivGame.kt +++ b/core/src/com/unciv/UncivGame.kt @@ -141,6 +141,8 @@ class UncivGame(parameters: UncivGameParameters) : Game() { TileSetCache.loadTileSetConfigs() SkinCache.loadSkinConfigs() + val vanillaRuleset = RulesetCache.getVanillaRuleset() + if (settings.multiplayer.userId.isEmpty()) { // assign permanent user id settings.multiplayer.userId = UUID.randomUUID().toString() settings.save() @@ -157,7 +159,7 @@ class UncivGame(parameters: UncivGameParameters) : Game() { musicController.chooseTrack(suffixes = listOf(MusicMood.Menu, MusicMood.Ambient), flags = EnumSet.of(MusicTrackChooserFlags.SuffixMustMatch)) - ImageGetter.ruleset = RulesetCache.getVanillaRuleset() // so that we can enter the map editor without having to load a game first + ImageGetter.ruleset = vanillaRuleset // so that we can enter the map editor without having to load a game first when { settings.isFreshlyCreated -> setAsRootScreen(LanguagePickerScreen()) @@ -381,7 +383,7 @@ class UncivGame(parameters: UncivGameParameters) : Game() { override fun pause() { val curGameInfo = gameInfo if (curGameInfo != null) files.requestAutoSave(curGameInfo) - musicController.pause() + if (::musicController.isInitialized) musicController.pause() super.pause() } diff --git a/core/src/com/unciv/ui/audio/MusicController.kt b/core/src/com/unciv/ui/audio/MusicController.kt index 57b5fd1fac..f4fd781239 100644 --- a/core/src/com/unciv/ui/audio/MusicController.kt +++ b/core/src/com/unciv/ui/audio/MusicController.kt @@ -1,12 +1,12 @@ package com.unciv.ui.audio -import com.badlogic.gdx.Gdx import com.badlogic.gdx.Files.FileType +import com.badlogic.gdx.Gdx import com.badlogic.gdx.audio.Music import com.badlogic.gdx.files.FileHandle import com.unciv.UncivGame -import com.unciv.models.metadata.GameSettings import com.unciv.logic.multiplayer.storage.DropBox +import com.unciv.models.metadata.GameSettings import com.unciv.utils.Log import com.unciv.utils.debug import java.util.* @@ -418,9 +418,10 @@ class MusicController { */ fun pause(speedFactor: Float = 1f) { debug("MusicTrackController.pause called") - if ((state != ControllerState.Playing && state != ControllerState.PlaySingle) || current == null) return + val controller = current + if ((state != ControllerState.Playing && state != ControllerState.PlaySingle) || controller == null) return val fadingStep = defaultFadingStep * speedFactor.coerceIn(0.001f..1000f) - current!!.startFade(MusicTrackController.State.FadeOut, fadingStep) + controller.startFade(MusicTrackController.State.FadeOut, fadingStep) if (next?.state == MusicTrackController.State.FadeIn) next!!.startFade(MusicTrackController.State.FadeOut) state = ControllerState.Pause diff --git a/core/src/com/unciv/ui/audio/SoundPlayer.kt b/core/src/com/unciv/ui/audio/SoundPlayer.kt index df25ab200a..d9b447a365 100644 --- a/core/src/com/unciv/ui/audio/SoundPlayer.kt +++ b/core/src/com/unciv/ui/audio/SoundPlayer.kt @@ -173,9 +173,7 @@ object SoundPlayer { if (initialDelay > 0 || resource.play(volume) == -1L) { Concurrency.run("DelayedSound") { delay(initialDelay.toLong()) - while (resource.play(volume) == -1L) { - delay(20L) - } + while (resource.play(volume) == -1L) delay(20L) } } }