using System.Collections; using System.Collections.Generic; using UnityEngine; using Sirenix.OdinInspector; using UnityEngine.Audio; namespace KairoEngine.Core.ConfigOptions { [CreateAssetMenu(fileName = "VolumeConfigOption", menuName = "KairoEngine/ConfigOptions/Volume", order = 1), HideMonoScript] public class VolumeConfigOption : ConfigOptionBase { [PropertyOrder(4)] public AudioMixerGroup audioMixerChannel; [PropertyOrder(4)] public AudioMixer masterMixer; [PropertyOrder(5), Range(0.0001f, 1f)] public float defaultVolume; [PropertyOrder(6), TextArea(), HideLabel, PropertySpace(4,0)] public string description; private float currentVolume = 0; public override ConfigOptionUiData GetUiData() { Debug.Log($"Current {title} is {currentVolume}"); var sliderData = new ConfigOptionUiData.SliderData(0.0001f, 1f, currentVolume); return new ConfigOptionUiData(title, description, sliderData); } public override void LoadValue(bool debug) { currentVolume = PlayerPrefs.GetFloat(id, defaultVolume); masterMixer.GetFloat(id, out float oldVolume); ApplyConfig(); masterMixer.GetFloat(id, out float newVolume); if(debug) Debug.Log($"{title} changed from {Mathf.Pow(10, oldVolume/20).ToString("F2")} to {Mathf.Pow(10, newVolume/20).ToString("F2")}"); } public override void SetDefaultValue() { currentVolume = defaultVolume; PlayerPrefs.SetFloat(id, defaultVolume); ApplyConfig(); } public override void SetValue(ConfigOptionData data, bool save = false) { PlayerPrefs.SetFloat(id, data.floatValue); currentVolume = data.floatValue; ApplyConfig(); if(save) PlayerPrefs.SetFloat(id, currentVolume); } private void ApplyConfig() { var value = Mathf.Log10(currentVolume) * 20f; bool worked = masterMixer.SetFloat(id, value); if(worked == false) Debug.LogError($"Error setting volume for {title}"); } [Button("Apply Default"), PropertyOrder(100), PropertySpace(4,4)] private void ApplyDefaultConfig() { currentVolume = defaultVolume; ApplyConfig(); } } }