UniversalViewer/Assets/Scripts/ModelViewerBase/UI/SliderPanel.cs

99 lines
3.1 KiB
C#
Raw Permalink Normal View History

2024-04-21 22:38:26 +08:00
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
using UnityEngine.Events;
public class SliderPanel : MonoBehaviour
{
public static SliderPanel Prefab;
public Slider Slider;
public TMPro.TMP_Text Text;
public Toggle Toggle;
public float DefaultValue;
public MorphHelper MorphHelper;
2024-04-21 22:38:26 +08:00
public float value {
get { return Slider.value; }
set { Slider.value = value; }
}
public float maxValue
{
get { return Slider.maxValue; }
set { Slider.maxValue = value; }
}
public float minValue
{
get { return Slider.minValue; }
set { Slider.minValue = value; }
}
[Header("private")]
[SerializeField] private SliderDisplay _display;
[SerializeField] private SliderCallbackExtension _sliderCallbacks;
private void Awake()
{
_display.UpdateDisplay(Slider.value);
}
public static SliderPanel CreateMorph(ObjectContainer container, SkinnedMeshRenderer meshRenderer, int index, string displayName, Transform parent)
{
SliderPanel panel = Instantiate(SharedResources.Instance.SliderPanel, parent);
panel.MorphHelper = new MorphHelper(meshRenderer, meshRenderer.sharedMesh.GetBlendShapeName(index), panel.Slider);
2024-04-21 22:38:26 +08:00
panel.Text.text = displayName;
panel.Slider.value = meshRenderer.GetBlendShapeWeight(index);
panel.SetOnValueChanged((value) => {panel.MorphHelper.UpdateMorph(value);});
2024-04-21 22:38:26 +08:00
panel.SetOnRelease((value) => { container.SetKeyframe(); });
panel.SetOnRightClick(null);
return panel;
}
public static SliderPanel CreateToggle(string label, bool isOn, Transform parent, UnityAction<bool> callback)
{
SliderPanel panel = Instantiate(SharedResources.Instance.TogglePanel, parent);
panel.Slider.gameObject.SetActive(false);
panel.Toggle.gameObject.SetActive(true);
panel.Toggle.SetIsOnWithoutNotify(isOn);
panel.Text.text = label;
panel.Toggle.onValueChanged.AddListener(callback);
return panel;
}
public SliderPanel SetOnValueChanged(UnityAction<float> action)
{
_sliderCallbacks.ValueChangedAction.RemoveAllListeners();
if (action != null)
{
_sliderCallbacks.ValueChangedAction.AddListener(action);
}
return this;
}
public SliderPanel SetOnRelease(UnityAction<float> action)
{
_sliderCallbacks.PointerUpAction.RemoveAllListeners();
if (action != null)
{
_sliderCallbacks.PointerUpAction.AddListener(action);
}
return this;
}
public SliderPanel SetOnRightClick(UnityAction action)
{
_sliderCallbacks.RightClickAction.RemoveAllListeners();
_sliderCallbacks.RightClickAction.AddListener(ResetSlider);
if(action != null)
{
_sliderCallbacks.RightClickAction.AddListener(action);
}
return this;
}
public void ResetSlider()
{
Slider.value = DefaultValue;
_sliderCallbacks.PointerUpAction.Invoke(DefaultValue);
}
}