using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEditor.SceneManagement; namespace RootMotion.FinalIK { [CustomEditor(typeof(EditorIK))] public class EditorIKInspector : Editor { private EditorIK script { get { return target as EditorIK; } } public override void OnInspectorGUI() { base.OnInspectorGUI(); if (Application.isPlaying) return; if (!script.enabled) return; EditorGUILayout.Space(); if (script.defaultPose != null && script.ik != null && !script.ik.GetIKSolver().executedInEditor) { if (GUILayout.Button("Store Default Pose")) { script.StoreDefaultPose(); serializedObject.ApplyModifiedProperties(); EditorUtility.SetDirty(script.defaultPose); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } if (script.defaultPose.poseStored && script.defaultPose.localPositions.Length == script.bones.Length) { if (GUILayout.Button("Reset To Default Pose")) { script.defaultPose.Restore(script.bones); EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); } } } EditorGUILayout.Space(); if (script.defaultPose != null && script.defaultPose.poseStored && script.ik != null) { if (!script.ik.GetIKSolver().executedInEditor) { bool isValid = script.ik.GetIKSolver().IsValid(); EditorGUI.BeginDisabledGroup(!isValid); if (GUILayout.Button(isValid? "Start Solver": "'Start Solver' disabled for invalid solver setup")) { bool initiated = script.Initiate(); serializedObject.ApplyModifiedProperties(); EditorUtility.SetDirty(script.defaultPose); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); var ikS = new SerializedObject(script.ik); ikS.FindProperty("solver").FindPropertyRelative("executedInEditor").boolValue = initiated; ikS.ApplyModifiedProperties(); script.Update(); EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); } EditorGUI.EndDisabledGroup(); } if (script.ik.GetIKSolver().executedInEditor) { if (GUILayout.Button("Stop")) { var ikS = new SerializedObject(script.ik); ikS.FindProperty("solver").FindPropertyRelative("executedInEditor").boolValue = false; ikS.ApplyModifiedProperties(); } } } } } }