mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-07-18 03:24:15 -04:00
Fix parsing of legacy Tuanjie AnimationClip assets
This commit is contained in:
@ -1075,9 +1075,18 @@ namespace AssetStudio
|
||||
{
|
||||
using (var muscleReader = new EndianBinaryReader(muscleStream, EndianType.LittleEndian))
|
||||
{
|
||||
_ = muscleReader.ReadUInt32();
|
||||
var objReader = new ObjectReader(muscleReader, assetsFile, objInfo);
|
||||
m_MuscleClip = new ClipMuscleConstant(objReader);
|
||||
if (!m_Legacy)
|
||||
{
|
||||
_ = objReader.ReadUInt32();
|
||||
m_MuscleClip = new ClipMuscleConstant(objReader);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_EulerCurves = Vector3CurveArray(objReader);
|
||||
m_PositionCurves = Vector3CurveArray(objReader);
|
||||
m_ScaleCurves = Vector3CurveArray(objReader);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1127,27 +1136,10 @@ namespace AssetStudio
|
||||
{
|
||||
if (version >= (5, 3)) //5.3 and up
|
||||
{
|
||||
int numEulerCurves = reader.ReadInt32();
|
||||
m_EulerCurves = new Vector3Curve[numEulerCurves];
|
||||
for (int i = 0; i < numEulerCurves; i++)
|
||||
{
|
||||
m_EulerCurves[i] = new Vector3Curve(reader);
|
||||
}
|
||||
}
|
||||
|
||||
int numPCurves = reader.ReadInt32();
|
||||
m_PositionCurves = new Vector3Curve[numPCurves];
|
||||
for (int i = 0; i < numPCurves; i++)
|
||||
{
|
||||
m_PositionCurves[i] = new Vector3Curve(reader);
|
||||
}
|
||||
|
||||
int numSCurves = reader.ReadInt32();
|
||||
m_ScaleCurves = new Vector3Curve[numSCurves];
|
||||
for (int i = 0; i < numSCurves; i++)
|
||||
{
|
||||
m_ScaleCurves[i] = new Vector3Curve(reader);
|
||||
m_EulerCurves = Vector3CurveArray(reader);
|
||||
}
|
||||
m_PositionCurves = Vector3CurveArray(reader);
|
||||
m_ScaleCurves = Vector3CurveArray(reader);
|
||||
}
|
||||
|
||||
int numFCurves = reader.ReadInt32();
|
||||
@ -1178,16 +1170,25 @@ namespace AssetStudio
|
||||
}
|
||||
if (version >= 4)//4.0 and up
|
||||
{
|
||||
m_MuscleClipSize = reader.ReadUInt32();
|
||||
m_MuscleClipSize = reader.ReadUInt32(); //m_AnimDataSize (Tuanjie)
|
||||
if (!version.IsTuanjie)
|
||||
{
|
||||
m_MuscleClip = new ClipMuscleConstant(reader);
|
||||
}
|
||||
else if (m_MuscleClipSize > 0)
|
||||
{
|
||||
_ = reader.ReadInt32();
|
||||
m_MuscleClip = new ClipMuscleConstant(reader); //m_AnimData (Tuanjie)
|
||||
m_StreamingInfo = new StreamingInfo(reader);
|
||||
if (!m_Legacy)
|
||||
{
|
||||
_ = reader.ReadInt32();
|
||||
m_MuscleClip = new ClipMuscleConstant(reader); //m_AnimData (Tuanjie)
|
||||
m_StreamingInfo = new StreamingInfo(reader);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_EulerCurves = Vector3CurveArray(reader);
|
||||
m_PositionCurves = Vector3CurveArray(reader);
|
||||
m_ScaleCurves = Vector3CurveArray(reader);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (version >= (4, 3)) //4.3 and up
|
||||
@ -1212,6 +1213,17 @@ namespace AssetStudio
|
||||
}
|
||||
}
|
||||
|
||||
private static Vector3Curve[] Vector3CurveArray(ObjectReader reader)
|
||||
{
|
||||
var curveNum = reader.ReadInt32();
|
||||
var vector3Curve = new Vector3Curve[curveNum];
|
||||
for (var i = 0; i < curveNum; i++)
|
||||
{
|
||||
vector3Curve[i] = new Vector3Curve(reader);
|
||||
}
|
||||
return vector3Curve;
|
||||
}
|
||||
|
||||
public class EqComparer : IEqualityComparer<AnimationClip>
|
||||
{
|
||||
public bool Equals(AnimationClip clipA, AnimationClip clipB)
|
||||
|
Reference in New Issue
Block a user