KitchenChaos/Assets/Scripts/UI/OptionsUI.cs

118 lines
5.3 KiB
C#

using System;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class OptionsUI : MonoBehaviour
{
public static OptionsUI Instance { get; private set; }
[SerializeField] private Button soundEffectsButton;
[SerializeField] private Button musicButton;
[SerializeField] private Button closeButton;
[SerializeField] private Button moveUpButton;
[SerializeField] private Button moveDownButton;
[SerializeField] private Button moveLeftButton;
[SerializeField] private Button moveRightButton;
[SerializeField] private Button interactButton;
[SerializeField] private Button interactAlternateButton;
[SerializeField] private Button pauseButton;
[SerializeField] private Button gamepadInteractButton;
[SerializeField] private Button gamepadInteractAlternateButton;
[SerializeField] private Button gamepadPauseButton;
[SerializeField] private TextMeshProUGUI soundEffectsText;
[SerializeField] private TextMeshProUGUI musicText;
[SerializeField] private TextMeshProUGUI moveUpText;
[SerializeField] private TextMeshProUGUI moveDownText;
[SerializeField] private TextMeshProUGUI moveLeftText;
[SerializeField] private TextMeshProUGUI moveRightText;
[SerializeField] private TextMeshProUGUI interactText;
[SerializeField] private TextMeshProUGUI interactAlternateText;
[SerializeField] private TextMeshProUGUI pauseText;
[SerializeField] private TextMeshProUGUI gamepadInteractText;
[SerializeField] private TextMeshProUGUI gamepadInteractAlternateText;
[SerializeField] private TextMeshProUGUI gamepadPauseText;
[SerializeField] private Transform pressToRebindKeyTransform;
private Action onCloseButtonAction;
private void Awake()
{
Instance = this;
soundEffectsButton.onClick.AddListener(() =>
{
SoundManager.Instance.ChangeVolume();
UpdateVisual();
});
musicButton.onClick.AddListener(() =>
{
MusicManager.Instance.ChangeVolume();
UpdateVisual();
});
closeButton.onClick.AddListener(() =>
{
Hide();
onCloseButtonAction();
});
moveUpButton.onClick.AddListener(() => RebindBinding(GameInput.Binding.MoveUp));
moveDownButton.onClick.AddListener(() => RebindBinding(GameInput.Binding.MoveDown));
moveLeftButton.onClick.AddListener(() => RebindBinding(GameInput.Binding.MoveLeft));
moveRightButton.onClick.AddListener(() => RebindBinding(GameInput.Binding.MoveRight));
interactButton.onClick.AddListener(() => RebindBinding(GameInput.Binding.Interact));
interactAlternateButton.onClick.AddListener(() => RebindBinding(GameInput.Binding.InteractAlternate));
pauseButton.onClick.AddListener(() => RebindBinding(GameInput.Binding.Pause));
gamepadInteractButton.onClick.AddListener(() => RebindBinding(GameInput.Binding.Gamepad_Interact));
gamepadInteractAlternateButton.onClick.AddListener(() => RebindBinding(GameInput.Binding.Gamepad_InteractAlternate));
gamepadPauseButton.onClick.AddListener(() => RebindBinding(GameInput.Binding.Gamepad_Pause));
}
private void Start()
{
KitchenGameManager.Instance.OnGameUnpaused += KitchenGameManager_OnGameUnpaused;
UpdateVisual();
Hide();
HidePressToRebindKey();
}
private void KitchenGameManager_OnGameUnpaused(object sender, System.EventArgs e) => Hide();
private void UpdateVisual()
{
soundEffectsText.text = $"Sound Effects: {Mathf.Round(SoundManager.Instance.GetVolume() * 10f)}";
musicText.text = $"Music: {Mathf.Round(MusicManager.Instance.GetVolume() * 10f)}";
moveUpText.text = GameInput.Instance.GetBindingText(GameInput.Binding.MoveUp);
moveDownText.text = GameInput.Instance.GetBindingText(GameInput.Binding.MoveDown);
moveLeftText.text = GameInput.Instance.GetBindingText(GameInput.Binding.MoveLeft);
moveRightText.text = GameInput.Instance.GetBindingText(GameInput.Binding.MoveRight);
interactText.text = GameInput.Instance.GetBindingText(GameInput.Binding.Interact);
interactAlternateText.text = GameInput.Instance.GetBindingText(GameInput.Binding.InteractAlternate);
pauseText.text = GameInput.Instance.GetBindingText(GameInput.Binding.Pause);
gamepadInteractText.text = GameInput.Instance.GetBindingText(GameInput.Binding.Gamepad_Interact);
gamepadInteractAlternateText.text = GameInput.Instance.GetBindingText(GameInput.Binding.Gamepad_InteractAlternate);
gamepadPauseText.text = GameInput.Instance.GetBindingText(GameInput.Binding.Gamepad_Pause);
}
public void Show(Action onCloseButton)
{
onCloseButtonAction = onCloseButton;
gameObject.SetActive(true);
closeButton.Select();
}
private void Hide() => gameObject.SetActive(false);
private void ShowPressToRebindKey() => pressToRebindKeyTransform.gameObject.SetActive(true);
private void HidePressToRebindKey() => pressToRebindKeyTransform.gameObject.SetActive(false);
private void RebindBinding(GameInput.Binding binding)
{
ShowPressToRebindKey();
GameInput.Instance.RebindBinding(binding, () =>
{
HidePressToRebindKey();
UpdateVisual();
});
}
}