(Feat) Add Remmaping
This commit is contained in:
@@ -1,43 +1,59 @@
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Ashwild.Settings
|
||||
{
|
||||
/// <summary>
|
||||
/// Binds the control widgets (sensitivity, invert-Y, crosshair) to the <see cref="SettingsManager"/>,
|
||||
/// configuring the sensitivity slider from the authored <see cref="SettingsDefinition"/>.
|
||||
/// </summary>
|
||||
public class ControlsSettingsSubPanel : SettingsSubPanel
|
||||
{
|
||||
[Header("Controls")]
|
||||
[SerializeField] private Slider sensitivitySlider;
|
||||
[SerializeField] private TMP_Text sensitivityLabel;
|
||||
[SerializeField] private Toggle invertYToggle;
|
||||
[SerializeField] private Toggle crosshairToggle;
|
||||
#region Serialized Fields
|
||||
|
||||
private bool wiring;
|
||||
[Header("Widgets")]
|
||||
[SerializeField] private SettingSliderWidget sensitivitySlider;
|
||||
[SerializeField] private SettingToggleWidget invertYToggle;
|
||||
[SerializeField] private SettingToggleWidget crosshairToggle;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Unity Lifecycle
|
||||
|
||||
/// <summary>
|
||||
/// Initializes each control widget from the definition with its apply action.
|
||||
/// </summary>
|
||||
private void Awake()
|
||||
{
|
||||
sensitivitySlider.onValueChanged.AddListener(OnSensitivityChanged);
|
||||
invertYToggle.onValueChanged.AddListener(v => { if (!wiring) SettingsManager.Instance.SetInvertY(v); });
|
||||
crosshairToggle.onValueChanged.AddListener(v => { if (!wiring) SettingsManager.Instance.SetCrosshairEnabled(v); });
|
||||
SettingsManager s = SettingsManager.Instance;
|
||||
if (s == null || s.Definition == null)
|
||||
{
|
||||
Debug.LogError($"[ControlsSettingsSubPanel] SettingsManager/Definition unavailable on '{name}'.", this);
|
||||
return;
|
||||
}
|
||||
SettingsDefinition def = s.Definition;
|
||||
|
||||
sensitivitySlider.Init(def.Sensitivity.Min, def.Sensitivity.Max, def.Sensitivity.LabelScale, def.Sensitivity.LabelFormat, v => s.SetSensitivity(v));
|
||||
invertYToggle.Init(v => s.SetInvertY(v));
|
||||
crosshairToggle.Init(v => s.SetCrosshairEnabled(v));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public API
|
||||
|
||||
/// <summary>
|
||||
/// Pushes the manager's current control values into the widgets.
|
||||
/// </summary>
|
||||
public override void Refresh()
|
||||
{
|
||||
SettingsManager s = SettingsManager.Instance;
|
||||
if (s == null) return;
|
||||
|
||||
wiring = true;
|
||||
sensitivitySlider.SetValueWithoutNotify(s.Sensitivity);
|
||||
if (sensitivityLabel != null) sensitivityLabel.text = s.Sensitivity.ToString("F2");
|
||||
invertYToggle.SetIsOnWithoutNotify(s.InvertY);
|
||||
crosshairToggle.SetIsOnWithoutNotify(s.CrosshairEnabled);
|
||||
wiring = false;
|
||||
sensitivitySlider.SetValue(s.Sensitivity);
|
||||
invertYToggle.SetValue(s.InvertY);
|
||||
crosshairToggle.SetValue(s.CrosshairEnabled);
|
||||
}
|
||||
|
||||
private void OnSensitivityChanged(float v)
|
||||
{
|
||||
if (sensitivityLabel != null) sensitivityLabel.text = v.ToString("F2");
|
||||
if (!wiring) SettingsManager.Instance.SetSensitivity(v);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user