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;
|
2024-05-10 15:56:39 +08:00
|
|
|
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);
|
|
|
|
|
2024-05-10 15:56:39 +08:00
|
|
|
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);
|
2024-05-10 15:56:39 +08:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|