123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- // Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //
- #if UNITY_EDITOR
- using System;
- using System.Collections.Generic;
- using System.IO;
- using UnityEditor;
- using UnityEngine;
- using Object = UnityEngine.Object;
- namespace Animancer.Editor
- {
- /// <summary>[Editor-Only] A custom Inspector for <see cref="DirectionalAnimationSet"/>s.</summary>
- /// https://kybernetik.com.au/animancer/api/Animancer.Editor/DirectionalAnimationSetEditor
- [CustomEditor(typeof(DirectionalAnimationSet), true), CanEditMultipleObjects]
- public class DirectionalAnimationSetEditor : ScriptableObjectEditor
- {
- /************************************************************************************************************************/
- [MenuItem("CONTEXT/" + nameof(DirectionalAnimationSet) + "/Find Animations")]
- private static void FindSimilarAnimations(MenuCommand command)
- {
- var set = (DirectionalAnimationSet)command.context;
- var directory = AssetDatabase.GetAssetPath(set);
- directory = Path.GetDirectoryName(directory);
- var guids = AssetDatabase.FindAssets(
- $"{set.name} t:{nameof(AnimationClip)}",
- new string[] { directory });
- using (new ModifySerializedField(set, "Find Animations"))
- {
- for (int i = 0; i < guids.Length; i++)
- {
- var path = AssetDatabase.GUIDToAssetPath(guids[i]);
- var clip = AssetDatabase.LoadAssetAtPath<AnimationClip>(path);
- if (clip == null)
- continue;
- set.SetClipByName(clip);
- }
- }
- }
- /************************************************************************************************************************/
- [MenuItem(
- itemName: Strings.CreateMenuPrefix + "Directional Animation Set/From Selection",
- priority = Strings.AssetMenuOrder + 5)]
- private static void CreateDirectionalAnimationSet()
- {
- var nameToAnimations = new Dictionary<string, List<AnimationClip>>();
- var selection = Selection.objects;
- for (int i = 0; i < selection.Length; i++)
- {
- var clip = selection[i] as AnimationClip;
- if (clip == null)
- continue;
- var name = clip.name;
- for (DirectionalAnimationSet.Direction direction = 0; direction < (DirectionalAnimationSet.Direction)4; direction++)
- {
- name = name.Replace(direction.ToString(), "");
- }
- if (!nameToAnimations.TryGetValue(name, out var clips))
- {
- clips = new();
- nameToAnimations.Add(name, clips);
- }
- clips.Add(clip);
- }
- if (nameToAnimations.Count == 0)
- throw new InvalidOperationException("No clips are selected");
- var sets = new List<Object>();
- foreach (var nameAndAnimations in nameToAnimations)
- {
- var set = nameAndAnimations.Value.Count <= 4 ?
- CreateInstance<DirectionalAnimationSet>() :
- CreateInstance<DirectionalAnimationSet8>();
- set.AllowSetClips();
- for (int i = 0; i < nameAndAnimations.Value.Count; i++)
- {
- set.SetClipByName(nameAndAnimations.Value[i]);
- }
- var path = AssetDatabase.GetAssetPath(nameAndAnimations.Value[0]);
- path = $"{Path.GetDirectoryName(path)}/{nameAndAnimations.Key}.asset";
- AssetDatabase.CreateAsset(set, path);
- sets.Add(set);
- }
- Selection.objects = sets.ToArray();
- }
- /************************************************************************************************************************/
- [MenuItem("CONTEXT/" + nameof(DirectionalAnimationSet) + "/Toggle Looping")]
- private static void ToggleLooping(MenuCommand command)
- {
- var set = (DirectionalAnimationSet)command.context;
- var count = set.ClipCount;
- for (int i = 0; i < count; i++)
- {
- var clip = set.GetClip(i);
- if (clip == null)
- continue;
- var isLooping = !clip.isLooping;
- for (i = 0; i < count; i++)
- {
- clip = set.GetClip(i);
- if (clip == null)
- continue;
- AnimancerEditorUtilities.SetLooping(clip, isLooping);
- }
- break;
- }
- }
- /************************************************************************************************************************/
- }
- }
- #endif
|