60 lines
2.1 KiB
C#
60 lines
2.1 KiB
C#
using UnityEngine;
|
|
|
|
namespace Ashwild.Settings
|
|
{
|
|
/// <summary>
|
|
/// Binds the audio volume widgets (master, music, SFX) to the <see cref="SettingsManager"/>,
|
|
/// configuring each slider from the authored <see cref="SettingsDefinition"/>.
|
|
/// </summary>
|
|
public class AudioSettingsSubPanel : SettingsSubPanel
|
|
{
|
|
#region Serialized Fields
|
|
|
|
[Header("Widgets")]
|
|
[SerializeField] private SettingSliderWidget masterSlider;
|
|
[SerializeField] private SettingSliderWidget musicSlider;
|
|
[SerializeField] private SettingSliderWidget sfxSlider;
|
|
|
|
#endregion
|
|
|
|
#region Unity Lifecycle
|
|
|
|
/// <summary>
|
|
/// Initializes each volume slider from the definition with its apply action.
|
|
/// </summary>
|
|
private void Awake()
|
|
{
|
|
SettingsManager s = SettingsManager.Instance;
|
|
if (s == null || s.Definition == null)
|
|
{
|
|
Debug.LogError($"[AudioSettingsSubPanel] SettingsManager/Definition unavailable on '{name}'.", this);
|
|
return;
|
|
}
|
|
SettingsDefinition def = s.Definition;
|
|
|
|
masterSlider.Init(def.MasterVolume.Min, def.MasterVolume.Max, def.MasterVolume.LabelScale, def.MasterVolume.LabelFormat, v => s.SetMasterVolume(v));
|
|
musicSlider.Init(def.MusicVolume.Min, def.MusicVolume.Max, def.MusicVolume.LabelScale, def.MusicVolume.LabelFormat, v => s.SetMusicVolume(v));
|
|
sfxSlider.Init(def.SfxVolume.Min, def.SfxVolume.Max, def.SfxVolume.LabelScale, def.SfxVolume.LabelFormat, v => s.SetSfxVolume(v));
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Public API
|
|
|
|
/// <summary>
|
|
/// Pushes the manager's current volumes into the sliders.
|
|
/// </summary>
|
|
public override void Refresh()
|
|
{
|
|
SettingsManager s = SettingsManager.Instance;
|
|
if (s == null) return;
|
|
|
|
masterSlider.SetValue(s.MasterVolume);
|
|
musicSlider.SetValue(s.MusicVolume);
|
|
sfxSlider.SetValue(s.SfxVolume);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|