avatar/Assets/VRCSDK/SDK3A/Editor/Components3/VRCAnimatorTrackingControlEditor.cs
2022-09-27 20:47:45 -07:00

131 lines
4.8 KiB
C#

#if VRC_SDK_VRCSDK3
using UnityEngine;
using UnityEditor;
using VRC.SDK3.Avatars.Components;
[CustomEditor(typeof(VRCAnimatorTrackingControl))]
public class VRCAnimatorTrackingControlEditor : Editor
{
VRCAnimatorTrackingControl control;
const float columnWidth = 64f;
VRC.SDKBase.VRC_AnimatorTrackingControl.TrackingType trackingAll;
string[] PopupOptions = new string[3]
{
"Tracking",
"Animation",
"None",
};
public void OnEnable()
{
if (target==null)
return;
if (control == null)
control = (VRCAnimatorTrackingControl)target;
serializedObject.ApplyModifiedProperties();
}
public override void OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.LabelField("Tracking Control");
EditorGUILayout.BeginVertical(GUI.skin.box);
//Labels
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("");
EditorGUILayout.LabelField("No Change", GUILayout.MinWidth(columnWidth));
EditorGUILayout.LabelField("Tracking", GUILayout.MinWidth(columnWidth));
EditorGUILayout.LabelField("Animation", GUILayout.MinWidth(columnWidth));
EditorGUILayout.EndHorizontal();
//Force all
var trackingAll = CheckAll();
var lastAll = trackingAll;
DrawTrackingOption("All", ref trackingAll);
if (lastAll != trackingAll)
{
control.trackingHead =
control.trackingLeftHand =
control.trackingRightHand =
control.trackingHip =
control.trackingLeftFoot =
control.trackingRightFoot =
control.trackingLeftFingers =
control.trackingRightFingers =
control.trackingEyes =
control.trackingMouth = trackingAll;
}
EditorGUILayout.Space();
//Individual
EditorGUI.BeginChangeCheck();
{
DrawTrackingOption("Head", ref control.trackingHead);
DrawTrackingOption("Left Hand", ref control.trackingLeftHand);
DrawTrackingOption("Right Hand", ref control.trackingRightHand);
DrawTrackingOption("Hip", ref control.trackingHip);
DrawTrackingOption("Left Foot", ref control.trackingLeftFoot);
DrawTrackingOption("Right Foot", ref control.trackingRightFoot);
DrawTrackingOption("Left Fingers", ref control.trackingLeftFingers);
DrawTrackingOption("Right Fingers", ref control.trackingRightFingers);
DrawTrackingOption("Eyes & Eyelids", ref control.trackingEyes);
DrawTrackingOption("Mouth & Jaw", ref control.trackingMouth);
}
if (EditorGUI.EndChangeCheck())
trackingAll = (VRC.SDKBase.VRC_AnimatorTrackingControl.TrackingType)999;
EditorGUILayout.EndVertical();
control.debugString = EditorGUILayout.TextField("Debug String", control.debugString);
serializedObject.ApplyModifiedProperties();
//if (_repaint)
// EditorUtility.SetDirty(target);
}
void DrawTrackingOption(string name, ref VRCAnimatorTrackingControl.TrackingType value)
{
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField(name);
bool result;
//No Change
result = EditorGUILayout.Toggle(value == VRC.SDKBase.VRC_AnimatorTrackingControl.TrackingType.NoChange, GUILayout.MinWidth(columnWidth));
if (result)
value = VRC.SDKBase.VRC_AnimatorTrackingControl.TrackingType.NoChange;
//Tracking
result = EditorGUILayout.Toggle(value == VRC.SDKBase.VRC_AnimatorTrackingControl.TrackingType.Tracking, GUILayout.MinWidth(columnWidth));
if (result)
value = VRC.SDKBase.VRC_AnimatorTrackingControl.TrackingType.Tracking;
//Animation
result = EditorGUILayout.Toggle(value == VRC.SDKBase.VRC_AnimatorTrackingControl.TrackingType.Animation, GUILayout.MinWidth(columnWidth));
if (result)
value = VRC.SDKBase.VRC_AnimatorTrackingControl.TrackingType.Animation;
EditorGUILayout.EndHorizontal();
}
VRC.SDKBase.VRC_AnimatorTrackingControl.TrackingType CheckAll()
{
var type = control.trackingHead;
bool same = (control.trackingHead == type &&
control.trackingLeftHand == type &&
control.trackingRightHand == type &&
control.trackingHip == type &&
control.trackingLeftFoot == type &&
control.trackingRightFoot == type &&
control.trackingLeftFingers == type &&
control.trackingRightFingers == type &&
control.trackingEyes == type &&
control.trackingMouth == type);
return same ? type : (VRC.SDKBase.VRC_AnimatorTrackingControl.TrackingType)999;
}
}
#endif