94 lines
2.3 KiB
C#
94 lines
2.3 KiB
C#
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.InputSystem;
|
|
using UnityEngine.UI;
|
|
|
|
namespace Michsky.UI.Heat
|
|
{
|
|
public class SliderInputHandler : MonoBehaviour
|
|
{
|
|
[Header("Resources")]
|
|
[SerializeField]
|
|
private Slider sliderObject;
|
|
|
|
[SerializeField]
|
|
private GameObject indicator;
|
|
|
|
[Header("Settings")]
|
|
[Range(0.1f, 50f)]
|
|
public float valueMultiplier = 1f;
|
|
|
|
[SerializeField]
|
|
[Range(0.01f, 1f)]
|
|
private float deadzone = 0.1f;
|
|
|
|
[SerializeField]
|
|
private bool optimizeUpdates = true;
|
|
|
|
public bool requireSelecting = true;
|
|
|
|
[SerializeField]
|
|
private bool reversePosition;
|
|
|
|
[SerializeField]
|
|
private bool divideByMaxValue;
|
|
|
|
private float divideValue = 1000f;
|
|
|
|
private void OnEnable()
|
|
{
|
|
if (ControllerManager.instance == null || sliderObject == null)
|
|
{
|
|
Object.Destroy(this);
|
|
}
|
|
if (indicator == null)
|
|
{
|
|
indicator = new GameObject();
|
|
indicator.name = "[Generated Indicator]";
|
|
indicator.transform.SetParent(base.transform);
|
|
}
|
|
indicator.SetActive(value: false);
|
|
if (divideByMaxValue)
|
|
{
|
|
divideValue = sliderObject.maxValue;
|
|
}
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (Gamepad.current == null || ControllerManager.instance == null)
|
|
{
|
|
indicator.SetActive(value: false);
|
|
return;
|
|
}
|
|
if (requireSelecting && EventSystem.current.currentSelectedGameObject != base.gameObject)
|
|
{
|
|
indicator.SetActive(value: false);
|
|
return;
|
|
}
|
|
if (optimizeUpdates && ControllerManager.instance != null && !ControllerManager.instance.gamepadEnabled)
|
|
{
|
|
indicator.SetActive(value: false);
|
|
return;
|
|
}
|
|
indicator.SetActive(value: true);
|
|
if (reversePosition && ControllerManager.instance.hAxis >= deadzone)
|
|
{
|
|
sliderObject.value -= valueMultiplier / divideValue * ControllerManager.instance.hAxis;
|
|
}
|
|
else if (!reversePosition && ControllerManager.instance.hAxis >= deadzone)
|
|
{
|
|
sliderObject.value += valueMultiplier / divideValue * ControllerManager.instance.hAxis;
|
|
}
|
|
else if (reversePosition && ControllerManager.instance.hAxis <= 0f - deadzone)
|
|
{
|
|
sliderObject.value += valueMultiplier / divideValue * Mathf.Abs(ControllerManager.instance.hAxis);
|
|
}
|
|
else if (!reversePosition && ControllerManager.instance.hAxis <= 0f - deadzone)
|
|
{
|
|
sliderObject.value -= valueMultiplier / divideValue * Mathf.Abs(ControllerManager.instance.hAxis);
|
|
}
|
|
}
|
|
}
|
|
}
|