using Pumkin.AvatarTools; using Pumkin.DataStructures; using Pumkin.HelperFunctions; using Pumkin.PoseEditor; using UnityEditor; using UnityEngine; namespace Pumkin.Presets { public class CreatePosePresetPopup : CreatePresetPopupBase { public static string[] defaultMusclesNames; SerializedObject serializedPosePreset; SerializedProperty pMuscles, pTransformPaths, pTransformRotations; private void OnEnable() { if(defaultMusclesNames == null || defaultMusclesNames.Length == 0) defaultMusclesNames = HumanTrait.MuscleName; SetupProperties(); } private void SetupProperties() { if(preset is null) Close(); serializedPosePreset = new SerializedObject(preset); pMuscles = serializedPosePreset.FindProperty("muscles"); pTransformPaths = serializedPosePreset.FindProperty("transformPaths"); pTransformRotations = serializedPosePreset.FindProperty("transformRotations"); } public static void ShowWindow(PumkinsPosePreset newPreset = null) { AssignOrCreatePreset(newPreset); if(!_window || _window.GetType() != typeof(CreatePosePresetPopup)) { _window = CreateInstance(); _window.autoRepaintOnSceneChange = true; if(minWindowSize.magnitude > Vector2.zero.magnitude) { float maxX = Mathf.Max(_window.minSize.x, minWindowSize.x); float maxY = Mathf.Max(_window.minSize.y, minWindowSize.y); _window.minSize = new Vector2(maxX, maxY); } } if(editingExistingPreset) { _window.titleContent = new GUIContent(Strings.Presets.editPosePreset); _overwriteFile = true; } else { _window.titleContent = new GUIContent(Strings.Presets.createPosePreset); } _window.ShowUtility(); } private void OnGUI() { scroll = EditorGUILayout.BeginScrollView(scroll); try { PumkinsPosePreset preset = (PumkinsPosePreset)CreatePresetPopupBase.preset; if(!preset) { AssignOrCreatePreset(null); return; } EditorGUILayout.Space(); preset.name = EditorGUILayout.TextField(Strings.Presets.presetName, preset.name); Helpers.DrawGUILine(); PumkinsAvatarTools.DrawAvatarSelectionWithButtonGUI(false, false); Helpers.DrawGUILine(); preset.presetMode = (PumkinsPosePreset.PosePresetMode)EditorGUILayout.EnumPopup(Strings.Presets.poseMode, preset.presetMode); Helpers.DrawGUILine(); if(GUILayout.Button(Strings.Buttons.openPoseEditor, Styles.BigButton)) PumkinsPoseEditor.ShowWindow(); Helpers.DrawGUILine(); EditorGUILayout.EndScrollView(); Helpers.DrawGUILine(); EditorGUI.BeginDisabledGroup(!PumkinsAvatarTools.SelectedAvatar || !preset || string.IsNullOrEmpty(preset.name)); { if(!editingExistingPreset) { _overwriteFile = GUILayout.Toggle(_overwriteFile, Strings.Presets.overwriteFile); if(GUILayout.Button(Strings.Buttons.savePreset, Styles.BigButton)) { preset.SetupPreset(preset.name, PumkinsAvatarTools.SelectedAvatar, preset.presetMode); if(preset) { EditorApplication.delayCall += () => { preset.SavePreset(_overwriteFile); Close(); }; } } } } EditorGUI.EndDisabledGroup(); CreatePresetPopupBase.preset = preset; EditorGUILayout.Space(); } catch { EditorGUILayout.EndScrollView(); Close(); } } protected override void RefreshSelectedPresetIndex() { PumkinsAvatarTools.RefreshPresetIndexByString(preset.name); } private void OnDestroy() { if(editingExistingPreset) { PumkinsPosePreset preset = (PumkinsPosePreset)CreatePresetPopupBase.preset; if(!preset) AssignOrCreatePreset(null); preset.SetupPreset(preset.name, PumkinsAvatarTools.SelectedAvatar, preset.presetMode); } } } }