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.
		
		
		
		
		
			
		
			
	
	
		
			88 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			88 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
| 
								 
											1 year ago
										 
									 | 
							
								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
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |