2025-01-30 23:38:06 +01:00

117 lines
4.1 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using TMPro;
namespace Michsky.MUIP
{
[RequireComponent(typeof(Slider))]
public class SliderManager : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
// Resources
public Slider mainSlider;
public TextMeshProUGUI valueText;
public TextMeshProUGUI popupValueText;
// Saving
public bool enableSaving = false;
public bool invokeOnAwake = true;
public string sliderTag = "My Slider";
// Settings
public bool usePercent = false;
public bool showValue = true;
public bool showPopupValue = true;
public bool useRoundValue = false;
public float minValue;
public float maxValue;
// Events
[System.Serializable]
public class SliderEvent : UnityEvent<float> { }
[SerializeField]
public SliderEvent onValueChanged = new SliderEvent();
[Space(8)] public SliderEvent sliderEvent;
// Other Variables
[HideInInspector] public Animator sliderAnimator;
[HideInInspector] public float saveValue;
void Awake()
{
if (enableSaving == true)
{
if (PlayerPrefs.HasKey(sliderTag + "MUIPSliderValue") == false) { saveValue = mainSlider.value; }
else { saveValue = PlayerPrefs.GetFloat(sliderTag + "MUIPSliderValue"); }
mainSlider.value = saveValue;
mainSlider.onValueChanged.AddListener(delegate
{
saveValue = mainSlider.value;
PlayerPrefs.SetFloat(sliderTag + "MUIPSliderValue", saveValue);
});
}
mainSlider.onValueChanged.AddListener(delegate
{
sliderEvent.Invoke(mainSlider.value);
UpdateUI();
});
if (sliderAnimator == null && showPopupValue == true)
{
try { sliderAnimator = gameObject.GetComponent<Animator>(); }
catch { showPopupValue = false; }
}
if (invokeOnAwake == true) { sliderEvent.Invoke(mainSlider.value); }
UpdateUI();
}
public void UpdateUI()
{
if (useRoundValue == true)
{
if (usePercent == true)
{
if (valueText != null) { valueText.text = Mathf.Round(mainSlider.value * 1.0f).ToString() + "%"; }
if (popupValueText != null) { popupValueText.text = Mathf.Round(mainSlider.value * 1.0f).ToString() + "%"; }
}
else
{
if (valueText != null) { valueText.text = Mathf.Round(mainSlider.value * 1.0f).ToString(); }
if (popupValueText != null) { popupValueText.text = Mathf.Round(mainSlider.value * 1.0f).ToString(); }
}
}
else
{
if (usePercent == true)
{
if (valueText != null) { valueText.text = mainSlider.value.ToString("F1") + "%"; }
if (popupValueText != null) { popupValueText.text = mainSlider.value.ToString("F1") + "%"; }
}
else
{
if (valueText != null) { valueText.text = mainSlider.value.ToString("F1"); }
if (popupValueText != null) { popupValueText.text = mainSlider.value.ToString("F1"); }
}
}
}
public void OnPointerEnter(PointerEventData eventData)
{
if (showPopupValue == true && sliderAnimator != null)
sliderAnimator.Play("Value In");
}
public void OnPointerExit(PointerEventData eventData)
{
if (showPopupValue == true && sliderAnimator != null)
sliderAnimator.Play("Value Out");
}
}
}