AssetStudio-Genshin-MoYi/AssetStudio/Classes/AnimatorOverrideController.cs
2023-10-29 00:46:17 +08:00

59 lines
1.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace AssetStudio
{
public class AnimationClipOverride
{
public PPtr<AnimationClip> m_OriginalClip;
public PPtr<AnimationClip> m_OverrideClip;
public AnimationClipOverride(ObjectReader reader)
{
m_OriginalClip = new PPtr<AnimationClip>(reader);
m_OverrideClip = new PPtr<AnimationClip>(reader);
}
}
public sealed class AnimatorOverrideController : RuntimeAnimatorController
{
public PPtr<RuntimeAnimatorController> m_Controller;
public AnimationClipOverride[] m_Clips;
public AnimatorOverrideController(ObjectReader reader) : base(reader)
{
m_Controller = new PPtr<RuntimeAnimatorController>(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;
}
}
}