using System; using Pumkin.AvatarTools; using Pumkin.DataStructures; using Pumkin.HelperFunctions; using UnityEditor; using UnityEngine; namespace Pumkin.Presets { public class CreateBlendshapePopup : CreatePresetPopupBase { public static void ShowWindow(PumkinsBlendshapePreset newPreset = null) { AssignOrCreatePreset(newPreset); newPreset = (PumkinsBlendshapePreset)preset; if(PumkinsAvatarTools.SelectedAvatar) newPreset.SetupPreset("", PumkinsAvatarTools.SelectedAvatar); if(!_window || _window.GetType() != typeof(CreateBlendshapePopup)) { _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.editBlendshapePreset); _overwriteFile = true; } else { _window.titleContent = new GUIContent(Strings.Presets.createBlendshapePreset); } _window.ShowUtility(); } void OnEnable() { PumkinsAvatarTools.AvatarSelectionChanged += HandleSelectionChanged; } private new void OnDisable() { PumkinsAvatarTools.AvatarSelectionChanged -= HandleSelectionChanged; base.OnDisable(); } private void OnDestroy() { if(editingExistingPreset) SetupPreset(); } public void HandleSelectionChanged(GameObject selection) { SetupPreset(); } private void SetupPreset() { PumkinsBlendshapePreset preset = (PumkinsBlendshapePreset)CreatePresetPopupBase.preset; preset.SetupPreset(preset.name, PumkinsAvatarTools.SelectedAvatar); CreatePresetPopupBase.preset = preset; } private void OnGUI() { scroll = EditorGUILayout.BeginScrollView(scroll); try { PumkinsBlendshapePreset preset = (PumkinsBlendshapePreset)CreatePresetPopupBase.preset; if(!preset) { AssignOrCreatePreset(preset); return; } EditorGUILayout.Space(); preset.name = EditorGUILayout.TextField(Strings.Presets.presetName, preset.name); Helpers.DrawGUILine(); PumkinsAvatarTools.DrawAvatarSelectionWithButtonGUI(false, false); Helpers.DrawGUILine(); DrawBlendshapePresetControls(); EditorGUILayout.EndScrollView(); Helpers.DrawGUILine(); EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(preset.name) || !PumkinsAvatarTools.SelectedAvatar); { if(!editingExistingPreset) { _overwriteFile = GUILayout.Toggle(_overwriteFile, Strings.Presets.overwriteFile); if(GUILayout.Button(Strings.Buttons.savePreset, Styles.BigButton)) { EditorApplication.delayCall += () => { preset.SavePreset(_overwriteFile); Close(); }; } } } EditorGUI.EndDisabledGroup(); EditorGUILayout.Space(); CreatePresetPopupBase.preset = preset; } catch { EditorGUILayout.EndScrollView(); Close(); } } private void DrawBlendshapePresetControls() { PumkinsBlendshapePreset p = (PumkinsBlendshapePreset)preset; if(PumkinsAvatarTools.SelectedAvatar) Helpers.DrawBlendshapeSlidersWithDeleteAndAdd(ref p.renderers, PumkinsAvatarTools.SelectedAvatar); else EditorGUILayout.TextField(Strings.PoseEditor.selectHumanoidAvatar, Styles.HelpBox_OneLine); } protected override void RefreshSelectedPresetIndex() { PumkinsAvatarTools.RefreshPresetIndexByString(preset.name); } } }