Files

95 lines
3.0 KiB
C#
Raw Permalink Normal View History

using TMPro;
2021-11-02 15:28:40 +01:00
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
[RequireComponent(typeof(Audio))]
[RequireComponent(typeof(Button))]
[RequireComponent(typeof(Animator))]
public class BaseSelector : MonoBehaviour, ISelectHandler, IDeselectHandler, IPointerEnterHandler
{
[SerializeField] private TextMeshProUGUI _titleText = default;
[SerializeField] private TextMeshProUGUI _valueText = default;
2022-12-14 18:33:44 +02:00
[SerializeField] private PlayerPreferences _playerPreferences = default;
[SerializeField] private string[] _values = default;
[SerializeField] private Color _selectedColor = default;
[SerializeField] private Color _deselectedColor = default;
2022-12-14 18:33:44 +02:00
[SerializeField] private UnityEventInt _eventInt = default;
[SerializeField] private RectTransform _scrollView = default;
[SerializeField] private float _scrollUpAmount = default;
[SerializeField] private float _scrollDownAmount = default;
protected Audio _audio;
protected Button _button;
2021-11-02 15:28:40 +01:00
2022-12-14 18:33:44 +02:00
public int Value { get; private set; }
2022-01-20 03:15:32 +01:00
2021-11-02 15:28:40 +01:00
2022-12-14 18:33:44 +02:00
void Awake()
{
_audio = GetComponent<Audio>();
_button = GetComponent<Button>();
}
2021-11-02 15:28:40 +01:00
2022-12-14 18:33:44 +02:00
public void SetValue(int value)
{
2023-09-13 15:09:50 +03:00
if (_values.Length == 0)
return;
if (value < 0)
value = _values.Length - 1;
if (value > _values.Length - 1)
value = 0;
2021-12-07 00:18:53 +01:00
_audio?.Sound("Selected").Play();
Value = value;
_valueText.text = _values[Value];
_playerPreferences.SavePreference(gameObject.name.Substring(0, gameObject.name.IndexOf("_")), value);
_eventInt.Invoke(Value);
2022-12-14 18:33:44 +02:00
}
2021-11-02 15:28:40 +01:00
2022-12-14 18:33:44 +02:00
public void OnSelect(BaseEventData eventData)
{
_titleText.color = _selectedColor;
_valueText.color = _selectedColor;
2022-12-14 18:33:44 +02:00
}
2021-11-02 15:28:40 +01:00
2022-12-14 18:33:44 +02:00
public void OnDeselect(BaseEventData eventData)
{
_titleText.color = _deselectedColor;
_valueText.color = _deselectedColor;
2022-12-14 18:33:44 +02:00
}
2021-11-02 15:28:40 +01:00
2022-12-14 18:33:44 +02:00
public void OnPointerEnter(PointerEventData eventData)
{
_button.Select();
}
2021-11-02 15:28:40 +01:00
2022-12-14 18:33:44 +02:00
public void SelectValue(BaseEventData eventData)
{
AxisEventData axisEventData = eventData as AxisEventData;
if (axisEventData.moveDir == MoveDirection.Right)
NextValue();
if (axisEventData.moveDir == MoveDirection.Left)
PreviousValue();
}
2021-11-02 15:28:40 +01:00
2022-12-14 18:33:44 +02:00
public void MoveScrollDown(BaseEventData eventData)
{
AxisEventData axisEventData = eventData as AxisEventData;
if (axisEventData.moveDir == MoveDirection.Down)
_scrollView.anchoredPosition += new Vector2(0.0f, _scrollDownAmount);
}
2021-11-02 15:28:40 +01:00
2022-12-14 18:33:44 +02:00
public void MoveScrollUp(BaseEventData eventData)
{
AxisEventData axisEventData = eventData as AxisEventData;
if (axisEventData.moveDir == MoveDirection.Up)
_scrollView.anchoredPosition += new Vector2(0.0f, _scrollUpAmount);
}
2021-11-02 15:28:40 +01:00
2023-09-13 15:09:50 +03:00
public void SetValues(string[] values) => _values = values;
public void NextValue() => SetValue(Value + 1);
2021-11-02 15:28:40 +01:00
public void PreviousValue() => SetValue(Value - 1);
2021-11-02 15:28:40 +01:00
}