12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- using UnityEditor;
- using UnityEngine;
- using System.Collections;
- namespace RootMotion.FinalIK
- {
- /*
- * Base class for all RotationLimitInspector containing common helper methods and drawing instructions
- * */
- public class RotationLimitInspector : Editor
- {
- #region Public methods
- // Universal color pallettes
- public static Color colorDefault { get { return new Color(0.0f, 1.0f, 1.0f, 1.0f); } }
- public static Color colorDefaultTransparent
- {
- get
- {
- Color d = colorDefault;
- return new Color(d.r, d.g, d.b, 0.2f);
- }
- }
- public static Color colorHandles { get { return new Color(1.0f, 0.5f, 0.25f, 1.0f); } }
- public static Color colorRotationSphere { get { return new Color(1.0f, 1.0f, 1.0f, 0.1f); } }
- public static Color colorInvalid { get { return new Color(1.0f, 0.3f, 0.3f, 1.0f); } }
- public static Color colorValid { get { return new Color(0.2f, 1.0f, 0.2f, 1.0f); } }
- /*
- * Draws the default rotation limit sphere to the scene
- * */
- public static void DrawRotationSphere(Vector3 position)
- {
- Handles.color = colorRotationSphere;
- Inspector.SphereCap(0, position, Quaternion.identity, 2.0f);
- Handles.color = Color.white;
- }
- /*
- * Draws a custom arrow to the scene
- * */
- public static void DrawArrow(Vector3 position, Vector3 direction, Color color, string label = "", float size = 0.01f)
- {
- Handles.color = color;
- Handles.DrawLine(position, position + direction);
- Inspector.SphereCap(0, position + direction, Quaternion.identity, size);
- Handles.color = Color.white;
- if (label != "")
- {
- GUI.color = color;
- Handles.Label(position + direction, label);
- GUI.color = Color.white;
- }
- }
- /*
- * Draws a handle for adjusting rotation limits in the scene
- * */
- public static float DrawLimitHandle(float limit, Vector3 position, Quaternion rotation, float radius, string label, float openingValue)
- {
- limit = Inspector.ScaleValueHandleSphere(limit, position, rotation, radius, 1);
- string labelInfo = label + ": " + limit.ToString();
- // If value is 0, draw a button to 'open' the value, because we cant scale 0
- if (limit == 0)
- {
- labelInfo = "Open " + label;
- if (Inspector.SphereButton(position, rotation, radius * 0.2f, radius * 0.07f))
- {
- limit = openingValue;
- }
- }
- Handles.Label(position, labelInfo);
- return limit;
- }
- #endregion
- }
- }
|