using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace AssetStudio { public class AnimationClipOverride { public PPtr m_OriginalClip; public PPtr m_OverrideClip; public AnimationClipOverride(ObjectReader reader) { m_OriginalClip = new PPtr(reader); m_OverrideClip = new PPtr(reader); } } public sealed class AnimatorOverrideController : RuntimeAnimatorController { public PPtr m_Controller; public AnimationClipOverride[] m_Clips; public AnimatorOverrideController(ObjectReader reader) : base(reader) { m_Controller = new PPtr(reader); int numOverrides = reader.ReadInt32(); m_Clips = new AnimationClipOverride[numOverrides]; for (int i = 0; i < numOverrides; i++) { m_Clips[i] = new AnimationClipOverride(reader); } } public override bool IsContainsAnimationClip(AnimationClip clip) { AnimationClip animationClip; foreach (AnimationClipOverride overClip in m_Clips) { if (overClip.m_OriginalClip.TryGet(out animationClip) && animationClip.Equals(clip)) { return true; } else if (overClip.m_OverrideClip.TryGet(out animationClip) && animationClip.Equals(clip)) { return true; } } if (m_Controller.TryGet(out var baseController)) { return baseController.IsContainsAnimationClip(clip); } return false; } } }