using System.Collections.Generic;
using TriLibCore.General;
using TriLibCore.Utils;
using UnityEngine;
namespace TriLibCore.Mappers
{
/// Represents a Mapper that finds Animator Override Animation Clips by name-matching.
[CreateAssetMenu(menuName = "TriLib/Mappers/Animation Clip/By Name Animator Override Animation Clip Mapper", fileName = "ByNameAnimatorOverrideAnimationClipMapper")]
public class ByNameAnimatorOverrideAnimationClipMapper : AnimatorOverrideAnimationClipMapper
{
///
/// String comparison mode to use on the mapping.
///
[Header("Left = Animator Override Clip Names, Right = Loaded Clip Names")]
public StringComparisonMode StringComparisonMode;
///
/// Is the string comparison case insensitive?
///
public bool CaseInsensitive = true;
///
public override AnimationClip[] MapArray(AssetLoaderContext assetLoaderContext, AnimationClip[] sourceAnimationClips)
{
if (AnimatorOverrideController != null)
{
for (var i = 0; i < sourceAnimationClips.Length; i++)
{
var animationClip = sourceAnimationClips[i];
var overrides = new List>(AnimatorOverrideController.overridesCount);
AnimatorOverrideController.GetOverrides(overrides);
for (var j = 0; j < overrides.Count; j++)
{
var kvp = overrides[j];
var keyName = kvp.Key.name;
var clipName = animationClip.name;
if (StringComparer.Matches(StringComparisonMode, CaseInsensitive, keyName, clipName))
{
overrides[j] = new KeyValuePair(kvp.Key, animationClip);
}
}
AnimatorOverrideController.ApplyOverrides(overrides);
}
}
return base.MapArray(assetLoaderContext, sourceAnimationClips);
}
}
}