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.
		
		
		
		
		
			
		
			
				
	
	
		
			188 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			188 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C#
		
	
using System.Collections;
 | 
						|
using System.Collections.Generic;
 | 
						|
using UnityEditor;
 | 
						|
using UnityEditor.Experimental.SceneManagement;
 | 
						|
using UnityEngine;
 | 
						|
using UnityEditor.SceneManagement;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
namespace Autohand {
 | 
						|
    [CustomEditor(typeof(GrabbablePoseAdvanced))]
 | 
						|
    public class GrabPoseRadiusEditor : Editor {
 | 
						|
        GrabbablePoseAdvanced grabbablePose;
 | 
						|
 | 
						|
        private void OnEnable() {
 | 
						|
            grabbablePose = target as GrabbablePoseAdvanced;
 | 
						|
        }
 | 
						|
 | 
						|
        public override void OnInspectorGUI() {
 | 
						|
            DrawDefaultInspector();
 | 
						|
            var startBackground = GUI.backgroundColor;
 | 
						|
 | 
						|
            if(grabbablePose.gameObject.scene.name == null) {
 | 
						|
                EditorGUILayout.LabelField("This must be saved in the scene");
 | 
						|
                EditorGUILayout.LabelField("-> then use override to prefab to save");
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            else if(Application.isPlaying) {
 | 
						|
                EditorGUILayout.LabelField("Cannot edit during runtime");
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            if(grabbablePose.gameObject != null && PrefabStageUtility.GetPrefabStage(grabbablePose.gameObject) == null) {
 | 
						|
                EditorUtility.SetDirty(grabbablePose);
 | 
						|
                grabbablePose.showEditorTools = DrawAutoToggleHeader("Show Editor Tools", grabbablePose.showEditorTools);
 | 
						|
 | 
						|
                if(grabbablePose.showEditorTools) {
 | 
						|
 | 
						|
                    ShowScriptableSaveButton();
 | 
						|
 | 
						|
                    ShowHandEditorHand();
 | 
						|
 | 
						|
                    ShowSaveButtons();
 | 
						|
 | 
						|
                    DrawHorizontalLine();
 | 
						|
 | 
						|
                    ShowDeleteOptions();
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            GUI.backgroundColor = startBackground;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        public void ShowScriptableSaveButton() {
 | 
						|
            EditorGUILayout.Space();
 | 
						|
            EditorGUILayout.Space();
 | 
						|
 | 
						|
            grabbablePose.poseScriptable = (HandPoseScriptable)EditorGUILayout.ObjectField(new GUIContent("Pose Scriptable", "Allows you to save the pose to a scriptable pose, create scriptable pose by right clicking in project [Create > Auto hand > Custom Pose]"), grabbablePose.poseScriptable, typeof(HandPoseScriptable), true);
 | 
						|
 | 
						|
            if(grabbablePose.poseScriptable != null) {
 | 
						|
                EditorUtility.SetDirty(grabbablePose.poseScriptable);
 | 
						|
                var rect = EditorGUILayout.GetControlRect();
 | 
						|
 | 
						|
                if(GUI.Button(rect, "Overwrite Scriptable"))
 | 
						|
                    grabbablePose.SaveScriptable();
 | 
						|
 | 
						|
                EditorGUILayout.Space();
 | 
						|
            }
 | 
						|
            EditorGUILayout.Space();
 | 
						|
        }
 | 
						|
 | 
						|
        public void ShowDeleteOptions() {
 | 
						|
            GUI.backgroundColor = Color.red;
 | 
						|
 | 
						|
            if(GUILayout.Button("Delete Hand Copy")) {
 | 
						|
                if(string.Equals(grabbablePose.editorHand.transform.parent.name, "HAND COPY CONTAINER DELETE"))
 | 
						|
                    DestroyImmediate(grabbablePose.editorHand.transform.parent.gameObject);
 | 
						|
                else
 | 
						|
                    Debug.LogError("Not a copy - Will not delete");
 | 
						|
            }
 | 
						|
            if(GUILayout.Button("Clear Saved Poses"))
 | 
						|
                grabbablePose.EditorClearPoses();
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        public void ShowHandEditorHand() {
 | 
						|
            grabbablePose.editorHand = (Hand)EditorGUILayout.ObjectField(new GUIContent("Editor Hand", "This will be used as a reference to create a hand copy that can be used to model your new pose"), grabbablePose.editorHand, typeof(Hand), true);
 | 
						|
 | 
						|
            if(GUILayout.Button("Create Hand Copy"))
 | 
						|
                grabbablePose.EditorCreateCopySetPose(grabbablePose.editorHand, grabbablePose.transform);
 | 
						|
 | 
						|
            if(GUILayout.Button("Select Hand Copy"))
 | 
						|
                Selection.activeGameObject = grabbablePose.editorHand.gameObject;
 | 
						|
        }
 | 
						|
 | 
						|
        public void DrawHorizontalLine() {
 | 
						|
 | 
						|
            var rect = EditorGUILayout.GetControlRect();
 | 
						|
            rect.y += rect.height / 2f;
 | 
						|
            rect.height /= 10f;
 | 
						|
 | 
						|
            EditorGUI.DrawRect(rect, Color.grey);
 | 
						|
        }
 | 
						|
 | 
						|
        public bool DrawAutoToggleHeader(string label, bool value) {
 | 
						|
 | 
						|
            EditorGUILayout.Space();
 | 
						|
            EditorGUILayout.Space();
 | 
						|
 | 
						|
 | 
						|
            // draw header background and label
 | 
						|
            var headerRect = EditorGUILayout.GetControlRect();
 | 
						|
 | 
						|
            var biggerRect = new Rect(headerRect);
 | 
						|
            biggerRect.width += biggerRect.x*2;
 | 
						|
            biggerRect.x = 0;
 | 
						|
            biggerRect.y -= 5f;
 | 
						|
            biggerRect.height += 10f;
 | 
						|
            EditorGUI.DrawRect(biggerRect, Constants.BackgroundColor);
 | 
						|
 | 
						|
 | 
						|
            var labelStyle = Constants.LabelStyle;
 | 
						|
 | 
						|
            var oldColor1 = GUI.color;
 | 
						|
            if(!value) {
 | 
						|
                var newColor = new Color(0.65f, 0.65f, 0.65f, 1f);
 | 
						|
                newColor.a = 1;
 | 
						|
                GUI.contentColor = newColor;
 | 
						|
            }
 | 
						|
 | 
						|
            EditorGUI.LabelField(headerRect, new GUIContent(" " + label), labelStyle);
 | 
						|
 | 
						|
            GUI.contentColor = oldColor1;
 | 
						|
 | 
						|
            var oldColor = GUI.color;
 | 
						|
            GUI.color = value ? new Color(0.7f, 1f, 0.7f) : new Color(1f, 0.7f, 0.7f);
 | 
						|
 | 
						|
            var newRect = new Rect(headerRect);
 | 
						|
            newRect.position = new Vector2(newRect.x + newRect.width - 18, newRect.y);
 | 
						|
            value = EditorGUI.Toggle(newRect, value);
 | 
						|
 | 
						|
            GUI.color = oldColor;
 | 
						|
 | 
						|
 | 
						|
            return value;
 | 
						|
        }
 | 
						|
 | 
						|
        public void ShowSaveButtons() {
 | 
						|
            EditorGUILayout.Space();
 | 
						|
            EditorGUILayout.Space();
 | 
						|
 | 
						|
            EditorGUILayout.BeginHorizontal();
 | 
						|
 | 
						|
            if(grabbablePose.leftPoseSet || (grabbablePose.poseScriptable != null && grabbablePose.poseScriptable.leftSaved))
 | 
						|
                GUI.backgroundColor = Color.green;
 | 
						|
            else
 | 
						|
                GUI.backgroundColor = Color.red;
 | 
						|
 | 
						|
 | 
						|
            if(GUILayout.Button("Save Left")) {
 | 
						|
                if(grabbablePose.poseIndex != grabbablePose.editorHand.poseIndex)
 | 
						|
                    Debug.LogError("CANNOT SAVE: Your hand's \"Pose Index\" value does not match the local \"Pose Index\" value");
 | 
						|
                else
 | 
						|
                    grabbablePose.EditorSaveGrabPose(grabbablePose.editorHand, true);
 | 
						|
            }
 | 
						|
 | 
						|
 | 
						|
            if(grabbablePose.rightPoseSet || (grabbablePose.poseScriptable != null && grabbablePose.poseScriptable.rightSaved))
 | 
						|
                GUI.backgroundColor = Color.green;
 | 
						|
            else
 | 
						|
                GUI.backgroundColor = Color.red;
 | 
						|
 | 
						|
 | 
						|
            if(GUILayout.Button("Save Right")) {
 | 
						|
                if(grabbablePose.poseIndex != grabbablePose.editorHand.poseIndex)
 | 
						|
                    Debug.LogError("CANNOT SAVE: Your hand's \"Pose Index\" value does not match the local \"Pose Index\" value");
 | 
						|
                else
 | 
						|
                    grabbablePose.EditorSaveGrabPose(grabbablePose.editorHand, false);
 | 
						|
            }
 | 
						|
 | 
						|
 | 
						|
            GUILayout.EndHorizontal();
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
}
 |