From dbbcf53471200b7f263a1b89aecc24305127233e Mon Sep 17 00:00:00 2001
From: Louis Capitanchik <contact@louiscap.co>
Date: Tue, 16 Aug 2022 03:06:09 +0100
Subject: [PATCH] Fix settings sync overflow

---
 Cargo.toml       |  2 +-
 src/music_box.rs | 28 +++++++++++++++-------------
 2 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index fd9740d..c6dea6f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "micro_musicbox"
-version = "0.3.1"
+version = "0.3.2"
 edition = "2021"
 license = "Apache-2.0"
 authors = ["Louis Capitanchik <louis@microhacks.co.uk>"]
diff --git a/src/music_box.rs b/src/music_box.rs
index 1d7c748..2a410f4 100644
--- a/src/music_box.rs
+++ b/src/music_box.rs
@@ -1,7 +1,7 @@
 use std::marker::PhantomData;
 
 use bevy::ecs::system::SystemParam;
-use bevy::prelude::{Assets, Commands, Handle, Res, ResMut};
+use bevy::prelude::{Assets, Commands, DetectChanges, Handle, Res, ResMut};
 use bevy_kira_audio::{AudioChannel, AudioControl, AudioInstance, AudioSource, AudioTween};
 
 use crate::utilities::{AudioSettings, SuppliesAudio, TrackType};
@@ -247,18 +247,20 @@ impl<'w, 's, T: SuppliesAudio> MusicBox<'w, 's, T> {
 	/// Sync the actual volumes of each track to their values defined in the `AudioSettings` resource,
 	/// modulated by the master volume setting
 	pub fn sync_settings(&self) {
-		self.channels
-			.music_channel
-			.set_volume((self.settings.music_volume * self.settings.master_volume) as f64);
-		self.channels
-			.ambiance_channel
-			.set_volume((self.settings.ambiance_volume * self.settings.master_volume) as f64);
-		self.channels
-			.sfx_channel
-			.set_volume((self.settings.sfx_volume * self.settings.master_volume) as f64);
-		self.channels
-			.ui_sfx_channel
-			.set_volume((self.settings.ui_volume * self.settings.master_volume) as f64);
+		if self.settings.is_changed() {
+			self.channels
+				.music_channel
+				.set_volume((self.settings.music_volume * self.settings.master_volume) as f64);
+			self.channels
+				.ambiance_channel
+				.set_volume((self.settings.ambiance_volume * self.settings.master_volume) as f64);
+			self.channels
+				.sfx_channel
+				.set_volume((self.settings.sfx_volume * self.settings.master_volume) as f64);
+			self.channels
+				.ui_sfx_channel
+				.set_volume((self.settings.ui_volume * self.settings.master_volume) as f64);
+		}
 	}
 
 	/// Get a reference to the settings object
-- 
GitLab