Skip to content

Commit 81cd6d7

Browse files
committed
Add AnimationClip equality comparer
1 parent 9024e6a commit 81cd6d7

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

AssetStudio/Classes/AnimationClip.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1200,5 +1200,21 @@ public AnimationClip(ObjectReader reader) : base(reader)
12001200
reader.AlignStream();
12011201
}
12021202
}
1203+
1204+
public class EqComparer : IEqualityComparer<AnimationClip>
1205+
{
1206+
public bool Equals(AnimationClip clipA, AnimationClip clipB)
1207+
{
1208+
return clipA?.m_PathID == clipB?.m_PathID
1209+
&& clipA?.byteSize == clipB?.byteSize;
1210+
}
1211+
1212+
public int GetHashCode(AnimationClip obj)
1213+
{
1214+
var result = obj.m_PathID * 31;
1215+
result = result * 31 + obj.byteSize;
1216+
return result.GetHashCode();
1217+
}
1218+
}
12031219
}
12041220
}

AssetStudioUtility/ModelConverter.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@ public class ModelConverter : IImported
1616

1717
private ImageFormat imageFormat;
1818
private Avatar avatar;
19-
private AnimationClip[] animationClipUniqArray = Array.Empty<AnimationClip>(); //TODO: a proper AnimationClip equality comparer
19+
private AnimationClip[] animationClipUniqArray = Array.Empty<AnimationClip>();
2020
private Dictionary<AnimationClip, string> boundAnimationPathDic = new Dictionary<AnimationClip, string>();
2121
private Dictionary<uint, string> bonePathHash = new Dictionary<uint, string>();
2222
private Dictionary<Texture2D, string> textureNameDictionary = new Dictionary<Texture2D, string>();
2323
private Dictionary<Transform, ImportedFrame> transformDictionary = new Dictionary<Transform, ImportedFrame>();
2424
Dictionary<uint, string> morphChannelNames = new Dictionary<uint, string>();
25+
private IEqualityComparer<AnimationClip> animationClipEqComparer = new AnimationClip.EqComparer();
2526

2627
public ModelConverter(GameObject m_GameObject, ImageFormat imageFormat, AnimationClip[] animationList = null)
2728
{
@@ -40,7 +41,7 @@ public ModelConverter(GameObject m_GameObject, ImageFormat imageFormat, Animatio
4041
}
4142
if (animationList != null)
4243
{
43-
animationClipUniqArray = animationList.Distinct().ToArray();
44+
animationClipUniqArray = animationList.Distinct(animationClipEqComparer).ToArray();
4445
}
4546
ConvertAnimations();
4647
}
@@ -67,7 +68,7 @@ public ModelConverter(string rootName, List<GameObject> m_GameObjects, ImageForm
6768
}
6869
if (animationList != null)
6970
{
70-
animationClipUniqArray = animationList.Distinct().ToArray();
71+
animationClipUniqArray = animationList.Distinct(animationClipEqComparer).ToArray();
7172
}
7273
ConvertAnimations();
7374
}
@@ -82,7 +83,7 @@ public ModelConverter(Animator m_Animator, ImageFormat imageFormat, AnimationCli
8283
}
8384
else
8485
{
85-
animationClipUniqArray = animationList.Distinct().ToArray();
86+
animationClipUniqArray = animationList.Distinct(animationClipEqComparer).ToArray();
8687
}
8788
ConvertAnimations();
8889
}
@@ -163,7 +164,7 @@ private void ConvertMeshRenderer(Transform m_Transform)
163164
animationList.Add(animationClip);
164165
}
165166
}
166-
animationClipUniqArray = animationList.Distinct().ToArray();
167+
animationClipUniqArray = animationList.Distinct(animationClipEqComparer).ToArray();
167168
}
168169

169170
foreach (var pptr in m_Transform.m_Children)
@@ -207,7 +208,7 @@ private void CollectAnimationClip(Animator m_Animator)
207208
break;
208209
}
209210
}
210-
animationClipUniqArray = animationList.Distinct().ToArray();
211+
animationClipUniqArray = animationList.Distinct(animationClipEqComparer).ToArray();
211212
}
212213
}
213214

0 commit comments

Comments
 (0)