From 5ebd57d6e40c4f6060ae2bb54ebea4ad4b1ca776 Mon Sep 17 00:00:00 2001 From: chai Date: Sat, 11 Sep 2021 11:08:25 +0800 Subject: +animation favorite --- Assets/ActionTool/Editor/ActionEditor.cs | 114 ++++++++++++++++++++++--- Assets/ActionTool/Editor/ActionEditorStyles.cs | 38 +++++++-- Assets/ActionTool/Editor/ActionManager.cs | 14 ++- 3 files changed, 141 insertions(+), 25 deletions(-) (limited to 'Assets') diff --git a/Assets/ActionTool/Editor/ActionEditor.cs b/Assets/ActionTool/Editor/ActionEditor.cs index b84b9e0e..554beb3d 100644 --- a/Assets/ActionTool/Editor/ActionEditor.cs +++ b/Assets/ActionTool/Editor/ActionEditor.cs @@ -21,16 +21,35 @@ namespace ActionTool ActionEditorUI ui; int currentPickerWindow; + IEnumerator coLoadAnimationAssets; + Dictionary animationAssets = new Dictionary(); + public void OnEnable() { titleContent = new GUIContent("Action Editor"); + + EditorApplication.update += OnUpdate; + ActionManager.onSelectObj += OnSelectObj; } - public void OnDisable() + void OnUpdate() + { + if(coLoadAnimationAssets != null) + { + if (!coLoadAnimationAssets.MoveNext()) + { + coLoadAnimationAssets = null; + } + } + } + + public void OnDisable() { + EditorApplication.update -= OnUpdate; + ActionManager.onSelectObj -= OnSelectObj; } - public void OnGUI() + public void OnGUI() { if (styles == null) styles = ActionEditorStyles.Get(); if (ui == null) ui = ActionEditorUI.Get(); @@ -44,15 +63,8 @@ namespace ActionTool GUILayout.Space(5); } - public enum Foo - { - A =0, - B= 0, - } - private void GUI_SelectUnit() { - GUILayout.BeginHorizontal(); GameObject selectObj = EditorGUILayout.ObjectField(ActionManager.CurrentUnit, typeof(GameObject), false, GUILayout.Width(position.width - 160)) as GameObject; @@ -143,13 +155,49 @@ namespace ActionTool continue; bool bChecked = ActionManager.CurrentAnimationName == animName; EditorGUILayout.BeginHorizontal(); - bool check = GUILayout.Toggle(bChecked, animName, style, GUILayout.Width(position.width - 42), GUILayout.Height(15)); + + bool check = GUILayout.Toggle(bChecked, animName, style, GUILayout.Width(position.width - 60), GUILayout.Height(15)); if (check && ActionManager.CurrentAnimationName != animName) ActionManager.OnSelectAnimation(animName); - if(GUILayout.Button("", styles.selectObj, GUILayout.Width(15), GUILayout.Height(15))) + + bool isFavorite = false; + if (animationAssets != null && animationAssets.ContainsKey(file)) + { + var labels = AssetDatabase.GetLabels(animationAssets[file]); + for (int j = 0; j < labels.Length; ++j) + { + if (labels[j] == "GoodAnimation") + isFavorite = true; + } + } + if (!animationAssets.ContainsKey(file) && coLoadAnimationAssets == null) + { + coLoadAnimationAssets = CoLoadAnimationAssets(); + } + Color bgColor = GUI.backgroundColor; + GUI.backgroundColor = isFavorite ? Color.yellow : Color.gray; + if (GUILayout.Button("", styles.starButton, GUILayout.Width(12), GUILayout.Height(13))) + { + isFavorite = !isFavorite; + if(animationAssets.ContainsKey(file)) + { + if(!isFavorite) + { + AssetDatabase.SetLabels(animationAssets[file], new string[0]); + } + else + { + AssetDatabase.SetLabels(animationAssets[file], new string[1] { "GoodAnimation" }); + } + } + } + GUI.backgroundColor = bgColor; + + if (GUILayout.Button("", styles.selectObj, GUILayout.Width(15), GUILayout.Height(15))) { ui.SelectObject(file); } + EditorGUILayout.EndHorizontal(); } @@ -159,8 +207,48 @@ namespace ActionTool style.clipping = prevClipping; style.richText = prevRichText; } - } - } + IEnumerator CoLoadAnimationAssets() + { + if (!ActionManager.HasSelectObj()) + yield break; + + if (animationAssets != null) + animationAssets.Clear(); + else + animationAssets = new Dictionary(); + + string animFolder = ActionManager.unitAnimationClipFolder; + + string[] animfiles = Directory.GetFiles(animFolder); + + for (int i = 0; i < animfiles.Length; ++i) + { + string file = animfiles[i]; + if (file.Contains(".meta")) + continue; + var animFile = AssetDatabase.LoadMainAssetAtPath(file); + if (animationAssets.ContainsKey(file)) + { + animationAssets[file] = animFile; + } + else + { + animationAssets.Add(file, animFile); + } + yield return null; + } + + this.Repaint(); + } + + void OnSelectObj(params object[] objs) + { + animationAssets.Clear(); + coLoadAnimationAssets = CoLoadAnimationAssets(); + } + + } + } \ No newline at end of file diff --git a/Assets/ActionTool/Editor/ActionEditorStyles.cs b/Assets/ActionTool/Editor/ActionEditorStyles.cs index 6059f93a..18b0dde7 100644 --- a/Assets/ActionTool/Editor/ActionEditorStyles.cs +++ b/Assets/ActionTool/Editor/ActionEditorStyles.cs @@ -24,6 +24,9 @@ namespace ActionTool public GUIStyle keyButton; + public GUIStyle starButton; + public GUIStyle starButton2; + public Texture2D selectIcon; public Texture2D keyFrameIcon; public Texture2D addFileIcon; @@ -32,8 +35,10 @@ namespace ActionTool public Texture2D infoIcon; public Texture2D keyIcon; public Texture2D recordIcon; + public Texture2D starIcon; + public Texture2D starIcon2; - private static ActionEditorStyles s_instance; + private static ActionEditorStyles s_instance; public static ActionEditorStyles Get() { bool flag = s_instance == null; @@ -55,6 +60,8 @@ namespace ActionTool deleteIcon = EditorGUIUtility.FindTexture("d_P4_DeletedLocal"); infoIcon = EditorGUIUtility.FindTexture("console.infoicon"); keyIcon = EditorGUIUtility.FindTexture("d_animationkeyframe"); + starIcon = EditorGUIUtility.FindTexture("Favorite"); + starIcon2 = EditorGUIUtility.FindTexture("Favorite Icon"); recordIcon = EditorGUIUtility.FindTexture("d_Animation.Record"); InitStyle(out textBoldBig, GUI.skin.label, s => { @@ -108,13 +115,28 @@ namespace ActionTool s.focused.textColor = Color.yellow; s.hover.textColor = Color.yellow; }); - InitStyle(out keyButton, GUI.skin.button, s => { - s.normal.background = keyIcon; - s.active.background = keyIcon; - s.hover.background = keyIcon; - s.focused.background = keyIcon; - }); - InitStyle(out toggleSmallBold, GUI.skin.toggle, s => { + InitStyle(out keyButton, GUI.skin.button, s => + { + s.normal.background = keyIcon; + s.active.background = keyIcon; + s.hover.background = keyIcon; + s.focused.background = keyIcon; + }); + InitStyle(out starButton, GUI.skin.button, s => + { + s.normal.background = starIcon; + s.active.background = starIcon; + s.hover.background = starIcon; + s.focused.background = starIcon; + }); + InitStyle(out starButton2, GUI.skin.button, s => + { + s.normal.background = starIcon2; + s.active.background = starIcon2; + s.hover.background = starIcon2; + s.focused.background = starIcon2; + }); + InitStyle(out toggleSmallBold, GUI.skin.toggle, s => { s.fontSize = 10; //s.fontStyle = FontStyle.Bold; }); diff --git a/Assets/ActionTool/Editor/ActionManager.cs b/Assets/ActionTool/Editor/ActionManager.cs index f8eb327d..54322cd6 100644 --- a/Assets/ActionTool/Editor/ActionManager.cs +++ b/Assets/ActionTool/Editor/ActionManager.cs @@ -7,7 +7,10 @@ using UnityEngine; namespace ActionTool { - public static class ActionManager + // ActionTool callback delegates + public delegate void CallbackHandler(params object[] objs); + + public static class ActionManager { public enum UnitType { @@ -146,7 +149,9 @@ namespace ActionTool public static int colliderIndex; - public static void OnSelectObj(GameObject obj) + public static CallbackHandler onSelectObj; + + public static void OnSelectObj(GameObject obj) { Release(); s_CurrentUnit = obj; @@ -159,7 +164,8 @@ namespace ActionTool s_UnitInstance = GameObject.Instantiate(obj); InitializeUnitInstance(s_UnitInstance); } - } + onSelectObj?.Invoke(obj); + } public static void OnSelectAnimation(string animation) { @@ -521,4 +527,4 @@ namespace ActionTool copiedAnimationEvent = UnityEngine.Object.Instantiate(animEvent); } } -} \ No newline at end of file +} \ No newline at end of file -- cgit v1.1-26-g67d0