(Feat) Add Remmaping

This commit is contained in:
2026-06-26 16:23:20 +02:00
parent 931bc9c9e2
commit 7bd2aa3120
249 changed files with 23712 additions and 6898 deletions
@@ -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
}
}