124 lines
3.0 KiB
C#
124 lines
3.0 KiB
C#
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.Events;
|
|
using UnityEngine.InputSystem;
|
|
|
|
namespace Michsky.UI.Heat
|
|
{
|
|
[RequireComponent(typeof(TMP_InputField))]
|
|
public class SliderInput : MonoBehaviour
|
|
{
|
|
[Header("Resources")]
|
|
[SerializeField]
|
|
private SliderManager sliderManager;
|
|
|
|
[SerializeField]
|
|
private TMP_InputField inputField;
|
|
|
|
[Header("Settings")]
|
|
[SerializeField]
|
|
private bool multiplyValue;
|
|
|
|
[Range(1f, 10f)]
|
|
public int maxChar = 5;
|
|
|
|
[Range(0f, 4f)]
|
|
public int decimals = 1;
|
|
|
|
[Header("Events")]
|
|
public UnityEvent onSubmit;
|
|
|
|
private void Awake()
|
|
{
|
|
if (sliderManager == null)
|
|
{
|
|
Debug.LogWarning("'Slider Manager' is missing!");
|
|
return;
|
|
}
|
|
if (inputField == null)
|
|
{
|
|
inputField = GetComponent<TMP_InputField>();
|
|
}
|
|
if (sliderManager.mainSlider.wholeNumbers)
|
|
{
|
|
inputField.contentType = TMP_InputField.ContentType.IntegerNumber;
|
|
}
|
|
else if (sliderManager.mainSlider.wholeNumbers)
|
|
{
|
|
inputField.contentType = TMP_InputField.ContentType.DecimalNumber;
|
|
decimals = 0;
|
|
}
|
|
inputField.characterLimit = maxChar;
|
|
inputField.selectionColor = new Color(inputField.textComponent.color.r, inputField.textComponent.color.g, inputField.textComponent.color.b, inputField.selectionColor.a);
|
|
inputField.onDeselect.AddListener(delegate
|
|
{
|
|
SetText(sliderManager.mainSlider.value);
|
|
});
|
|
onSubmit.AddListener(SetValue);
|
|
sliderManager.mainSlider.onValueChanged.AddListener(SetText);
|
|
sliderManager.mainSlider.onValueChanged.Invoke(sliderManager.mainSlider.value);
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (!string.IsNullOrEmpty(inputField.text) && !(EventSystem.current.currentSelectedGameObject != inputField.gameObject) && Keyboard.current.enterKey.wasPressedThisFrame)
|
|
{
|
|
onSubmit.Invoke();
|
|
}
|
|
}
|
|
|
|
private void SetText(float value)
|
|
{
|
|
if (multiplyValue)
|
|
{
|
|
value *= 100f;
|
|
}
|
|
if (decimals == 0)
|
|
{
|
|
inputField.text = value.ToString("F0");
|
|
}
|
|
else if (decimals == 1)
|
|
{
|
|
inputField.text = value.ToString("F1");
|
|
}
|
|
else if (decimals == 2)
|
|
{
|
|
inputField.text = value.ToString("F2");
|
|
}
|
|
else if (decimals == 3)
|
|
{
|
|
inputField.text = value.ToString("F3");
|
|
}
|
|
else if (decimals == 4)
|
|
{
|
|
inputField.text = value.ToString("F4");
|
|
}
|
|
}
|
|
|
|
private void SetValue()
|
|
{
|
|
if (sliderManager.mainSlider.wholeNumbers)
|
|
{
|
|
sliderManager.mainSlider.value = int.Parse(inputField.text);
|
|
}
|
|
else if (multiplyValue)
|
|
{
|
|
sliderManager.mainSlider.value = float.Parse(inputField.text) / 100f;
|
|
}
|
|
else
|
|
{
|
|
sliderManager.mainSlider.value = float.Parse(inputField.text);
|
|
}
|
|
if (!multiplyValue && float.Parse(inputField.text) > sliderManager.mainSlider.maxValue)
|
|
{
|
|
sliderManager.mainSlider.value = sliderManager.mainSlider.maxValue;
|
|
}
|
|
else if (multiplyValue && float.Parse(inputField.text) / 100f > sliderManager.mainSlider.maxValue)
|
|
{
|
|
sliderManager.mainSlider.value = sliderManager.mainSlider.maxValue;
|
|
}
|
|
}
|
|
}
|
|
}
|