You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.9 KiB
C#
89 lines
2.9 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
using UnityEditor;
|
|
|
|
namespace RootMotion.Dynamics
|
|
{
|
|
[CustomEditor(typeof(PuppetMasterProp))]
|
|
public class PuppetMasterPropInspector : Editor
|
|
{
|
|
|
|
private PuppetMasterProp script { get { return target as PuppetMasterProp; } }
|
|
|
|
private GUIStyle style = new GUIStyle();
|
|
private GUIStyle miniLabelStyle = new GUIStyle();
|
|
private static Color pro = new Color(0.5f, 0.7f, 0.3f, 1f);
|
|
private static Color free = new Color(0.2f, 0.3f, 0.1f, 1f);
|
|
private static Color sceneColor = new Color(0.2f, 0.7f, 1f);
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
if (script == null) return;
|
|
serializedObject.Update();
|
|
|
|
style.wordWrap = true;
|
|
style.normal.textColor = EditorGUIUtility.isProSkin ? pro : free;
|
|
|
|
miniLabelStyle.wordWrap = true;
|
|
miniLabelStyle.fontSize = 10;
|
|
miniLabelStyle.normal.textColor = EditorStyles.miniLabel.normal.textColor;
|
|
|
|
DrawDefaultInspector();
|
|
|
|
script.muscleProps.group = Muscle.Group.Prop;
|
|
|
|
serializedObject.ApplyModifiedProperties();
|
|
}
|
|
|
|
protected virtual void OnSceneGUI()
|
|
{
|
|
DrawScene(script);
|
|
}
|
|
|
|
protected void DrawScene(PuppetMasterProp script)
|
|
{
|
|
if (script == null) return;
|
|
if (Application.isPlaying) return;
|
|
|
|
GUIStyle sceneLabelStyle = new GUIStyle();
|
|
sceneLabelStyle.wordWrap = false;
|
|
sceneLabelStyle.normal.textColor = sceneColor;
|
|
|
|
Handles.color = sceneColor;
|
|
float size = GetHandleSize(script.transform.position);
|
|
|
|
if (script.additionalPinOffsetAdd != Vector3.zero)
|
|
{
|
|
SphereCapSafe(script.transform.position, Quaternion.identity, size);
|
|
Vector3 aPos = script.transform.position + script.transform.rotation * script.additionalPinOffsetAdd;
|
|
Handles.DrawLine(script.transform.position, aPos);
|
|
SphereCapSafe(aPos, Quaternion.identity, size);
|
|
|
|
if (Selection.activeGameObject == script.gameObject)
|
|
{
|
|
Handles.Label(aPos + script.additionalPinOffsetAdd.normalized * size * 2f, new GUIContent("Additional Pin"), sceneLabelStyle);
|
|
}
|
|
}
|
|
|
|
Handles.color = Color.white;
|
|
}
|
|
|
|
|
|
private static void SphereCapSafe(Vector3 position, Quaternion rotation, float size)
|
|
{
|
|
#if UNITY_5_6_OR_NEWER
|
|
Handles.SphereHandleCap(0, position, rotation, size, EventType.Repaint);
|
|
#else
|
|
Handles.SphereCap(0, position, rotation, size);
|
|
#endif
|
|
}
|
|
|
|
|
|
private static float GetHandleSize(Vector3 position)
|
|
{
|
|
float s = HandleUtility.GetHandleSize(position) * 0.1f;
|
|
return Mathf.Lerp(s, 0.025f, 0.2f);
|
|
}
|
|
}
|
|
}
|