DCDC25-TwinCity/Assets/VRUIP/Scripts/UI/ToggleController.cs
2025-05-15 16:25:40 +02:00

102 lines
3.2 KiB
C#

using TMPro;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
namespace VRUIP
{
public class ToggleController : A_ColorController
{
[Header("Normal Colors")]
[SerializeField] private Color textNormalColor = Color.black;
[SerializeField] private Color boxNormalColor = Color.white;
[Header("Selected Colors")]
[SerializeField] private Color textSelectedColor = Color.green;
[SerializeField] private Color boxSelectedColor = Color.gray;
[SerializeField] private Color checkmarkColor = Color.black;
[Header("Properties")]
[SerializeField] private bool crossOutSelected;
[SerializeField] private AudioClip toggleSound;
[Header("Components")]
[SerializeField] private Toggle toggle;
[SerializeField] private Image boxImage;
[SerializeField] private Image checkmarkImage;
[SerializeField] private TextMeshProUGUI toggleText;
[SerializeField] private AudioSource audioSource;
public bool IsOn => toggle.isOn;
private void Awake()
{
SetupToggle();
}
/// <summary>
/// Setup this toggle.
/// </summary>
[ContextMenu("Setup Toggle (VRUIP)")]
private void SetupToggle()
{
boxImage.color = boxNormalColor;
toggleText.color = textNormalColor;
checkmarkImage.color = checkmarkColor;
toggle.onValueChanged.AddListener(HandleToggleChanged);
audioSource.clip = toggleSound;
}
// Handle toggle value changed.
private void HandleToggleChanged(bool on)
{
audioSource.Play();
if (on)
{
TurnOn();
}
else
{
TurnOff();
}
}
// Turn on toggle.
private void TurnOn()
{
boxImage.color = boxSelectedColor;
toggleText.color = textSelectedColor;
if (crossOutSelected) toggleText.fontStyle = FontStyles.Strikethrough;
}
// Turn off toggle.
private void TurnOff()
{
boxImage.color = boxNormalColor;
toggleText.color = textNormalColor;
if (crossOutSelected) toggleText.fontStyle = FontStyles.Normal;
}
protected override void SetColors(ColorTheme theme)
{
textNormalColor = theme.secondaryColor;
textSelectedColor = theme.fourthColor;
boxNormalColor = theme.secondaryColor;
boxSelectedColor = theme.secondaryColor;
checkmarkColor = theme.primaryColor;
boxImage.color = IsOn ? boxSelectedColor : boxNormalColor;
toggleText.color = IsOn ? textSelectedColor : textNormalColor;
checkmarkImage.color = checkmarkColor;
}
/// <summary>
/// Register a listener for when the toggle value changes.
/// </summary>
/// <param name="action"></param>
public void RegisterOnToggleChanged(UnityAction<bool> action)
{
toggle.onValueChanged.AddListener(action);
}
}
}