131 lines
4.8 KiB
C#
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
|