diff options
author | chai <chaifix@163.com> | 2021-09-15 12:50:26 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-09-15 12:50:26 +0800 |
commit | 98f31f197a126850a5878cd6e583ae6dbf64ab3d (patch) | |
tree | 207f726fb027c227d2fd58bd1bc340cb3a7eaf67 /Assets/Tools/ActionTool/Editor/ActionEditor.cs | |
parent | ad950c25abdf7f5a2f0428863d4035e9eb168fd5 (diff) |
*rename
Diffstat (limited to 'Assets/Tools/ActionTool/Editor/ActionEditor.cs')
-rw-r--r-- | Assets/Tools/ActionTool/Editor/ActionEditor.cs | 262 |
1 files changed, 262 insertions, 0 deletions
diff --git a/Assets/Tools/ActionTool/Editor/ActionEditor.cs b/Assets/Tools/ActionTool/Editor/ActionEditor.cs new file mode 100644 index 00000000..b06ef89b --- /dev/null +++ b/Assets/Tools/ActionTool/Editor/ActionEditor.cs @@ -0,0 +1,262 @@ +using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEditor;
+using UnityEngine;
+using UnityEditor.SceneManagement;
+
+namespace ActionTool
+{
+
+ public class ActionEditor : EditorWindow
+ {
+ [MenuItem("Erika/ActionTool/Open")]
+ static void OpenTools()
+ {
+ ActionManager.AnimationWindow = GetWindow<ActionEditor>();
+ }
+
+ string m_SearchText = "";
+ ActionEditorStyles styles;
+ ActionEditorUI ui;
+ int currentPickerWindow;
+
+ IEnumerator coLoadAnimationAssets;
+ Dictionary<string, Object> animationAssets = new Dictionary<string, Object>();
+
+ public void OnEnable()
+ {
+ titleContent = new GUIContent("Action Editor");
+
+ EditorApplication.update += OnUpdate;
+ ActionManager.onSelectObj += OnSelectObj;
+ }
+
+ void OnUpdate()
+ {
+ if(coLoadAnimationAssets != null)
+ {
+ if (!coLoadAnimationAssets.MoveNext())
+ {
+ coLoadAnimationAssets = null;
+ }
+ }
+ }
+
+ public void OnDisable()
+ {
+ EditorApplication.update -= OnUpdate;
+ ActionManager.onSelectObj -= OnSelectObj;
+ }
+
+ public void OnGUI()
+ {
+ if (styles == null) styles = ActionEditorStyles.Get();
+ if (ui == null) ui = ActionEditorUI.Get();
+ if (ActionManager.CurrentUnit == null)
+ ActionManager.Release();
+
+ GUILayout.Space(5);
+ GUI_SelectUnit();
+ GUILayout.Space(5);
+ GUI_AnimationList();
+ GUILayout.Space(5);
+ }
+
+ private void GUI_SelectUnit()
+ {
+ GUILayout.BeginHorizontal();
+
+ GameObject selectObj = EditorGUILayout.ObjectField(ActionManager.CurrentUnit, typeof(GameObject), false, GUILayout.Width(position.width - 160)) as GameObject;
+
+ if (selectObj != null && selectObj != ActionManager.CurrentUnit)
+ {
+ ActionManager.OnSelectObj(selectObj);
+ if (ActionManager.AnimationWindow != null)
+ {
+ ActionManager.AnimationWindow.Repaint();
+ }
+ }
+
+ if (GUILayout.Button("Select", GUILayout.Width(70)))
+ {
+ currentPickerWindow = EditorGUIUtility.GetControlID(FocusType.Passive) + 100;
+ EditorGUIUtility.ShowObjectPicker<GameObject>(ActionManager.CurrentUnit, false, "l:UnitPrefab", currentPickerWindow);
+ }
+
+ string commandName = Event.current.commandName;
+ if(/*commandName.Equals("ObjectSelectorUpdated") || */commandName.Equals("ObjectSelectorClosed"))
+ {
+ GameObject go = EditorGUIUtility.GetObjectPickerObject() as GameObject;
+ if (/*go != null && */ActionManager.CurrentUnit != go)
+ {
+ ActionManager.OnSelectObj(go);
+ this.Repaint();
+ }
+ }
+
+ if (GUILayout.Button("Reimport", GUILayout.Width(70)))
+ {
+ ActionManager.OnSelectObj(ActionManager.CurrentUnit);
+ }
+
+ GUILayout.EndHorizontal();
+
+ //var scene = EditorSceneManager.GetActiveScene();
+ //if (scene == null || scene.path != ActionManager.scenePath)
+ //{
+ // if(GUILayout.Button("打开ActionToolScene"))
+ // {
+ // EditorSceneManager.OpenScene(ActionManager.scenePath);
+ // }
+ //}
+
+ if (ActionManager.CurrentUnit == null)
+ {
+ EditorGUILayout.HelpBox("选择角色prefab", MessageType.Warning);
+ }
+
+ }
+
+ private Vector2 m_AnimtionListScroll;
+ private void GUI_AnimationList()
+ {
+ if (!ActionManager.HasSelectObj())
+ return;
+
+ EditorGUILayout.LabelField("Animation List");
+
+ m_SearchText = GUILayout.TextField(m_SearchText, "SearchTextField", GUILayout.Width(position.width - 20)).ToLower();
+
+ string animFolder = ActionManager.unitAnimationClipFolder;
+
+ string[] animfiles = Directory.GetFiles(animFolder);
+
+ if (animfiles != null && animfiles.Length > 0)
+ {
+ GUIStyle style = GUI.skin.GetStyle("Button");
+ TextAnchor prevAnchor = style.alignment;
+ TextClipping prevClipping = style.clipping;
+ bool prevRichText = style.richText;
+ style.alignment = TextAnchor.MiddleCenter;
+ style.clipping = TextClipping.Clip;
+ style.richText = false;
+
+ m_AnimtionListScroll = EditorGUILayout.BeginScrollView(m_AnimtionListScroll);
+
+ for (int i = 0; i < animfiles.Length; ++i)
+ {
+ string file = animfiles[i];
+ if (file.Contains(".meta"))
+ continue;
+ string animName = Path.GetFileNameWithoutExtension(file);
+ bool show = m_SearchText == string.Empty || m_SearchText == "" || animName.ToLower().Contains(m_SearchText);
+ if (!show)
+ continue;
+ bool bChecked = ActionManager.CurrentAnimationName == animName;
+ EditorGUILayout.BeginHorizontal();
+
+ bool check = GUILayout.Toggle(bChecked, animName, style, GUILayout.Width(position.width - 60));
+ if (check && ActionManager.CurrentAnimationName != animName)
+ ActionManager.OnSelectAnimation(animName);
+
+ bool isFavorite = false;
+ if (animationAssets != null && animationAssets.ContainsKey(file))
+ {
+ isFavorite = IsFavoritAnimation(animationAssets[file]);
+ }
+ if ((!animationAssets.ContainsKey(file) || animationAssets[file] == null) && 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();
+ }
+
+ EditorGUILayout.EndScrollView();
+
+ style.alignment = prevAnchor;
+ style.clipping = prevClipping;
+ style.richText = prevRichText;
+ }
+ }
+
+ bool IsFavoritAnimation(Object animationFile)
+ {
+ var labels = AssetDatabase.GetLabels(animationFile);
+ for (int j = 0; j < labels.Length; ++j)
+ {
+ if (labels[j] == "GoodAnimation")
+ return true;
+ }
+ return false;
+ }
+
+ IEnumerator CoLoadAnimationAssets()
+ {
+ if (!ActionManager.HasSelectObj())
+ yield break;
+
+ if (animationAssets != null)
+ animationAssets.Clear();
+ else
+ animationAssets = new Dictionary<string, Object>();
+
+ 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);
+ }
+ if (IsFavoritAnimation(animFile))
+ {
+ this.Repaint();
+ }
+ yield return null;
+ }
+ }
+
+ void OnSelectObj(params object[] objs)
+ {
+ animationAssets.Clear();
+ coLoadAnimationAssets = CoLoadAnimationAssets();
+ }
+
+ }
+
+}
\ No newline at end of file |