// 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
{
/// [Editor-Only] A custom Inspector for s.
/// 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(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>();
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