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,10 +1075,19 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
using (var muscleReader = new EndianBinaryReader(muscleStream, EndianType.LittleEndian))
|
using (var muscleReader = new EndianBinaryReader(muscleStream, EndianType.LittleEndian))
|
||||||
{
|
{
|
||||||
_ = muscleReader.ReadUInt32();
|
|
||||||
var objReader = new ObjectReader(muscleReader, assetsFile, objInfo);
|
var objReader = new ObjectReader(muscleReader, assetsFile, objInfo);
|
||||||
|
if (!m_Legacy)
|
||||||
|
{
|
||||||
|
_ = objReader.ReadUInt32();
|
||||||
m_MuscleClip = new ClipMuscleConstant(objReader);
|
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
|
if (version >= (5, 3)) //5.3 and up
|
||||||
{
|
{
|
||||||
int numEulerCurves = reader.ReadInt32();
|
m_EulerCurves = Vector3CurveArray(reader);
|
||||||
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_PositionCurves = Vector3CurveArray(reader);
|
||||||
|
m_ScaleCurves = Vector3CurveArray(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
int numFCurves = reader.ReadInt32();
|
int numFCurves = reader.ReadInt32();
|
||||||
@ -1178,17 +1170,26 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
if (version >= 4)//4.0 and up
|
if (version >= 4)//4.0 and up
|
||||||
{
|
{
|
||||||
m_MuscleClipSize = reader.ReadUInt32();
|
m_MuscleClipSize = reader.ReadUInt32(); //m_AnimDataSize (Tuanjie)
|
||||||
if (!version.IsTuanjie)
|
if (!version.IsTuanjie)
|
||||||
{
|
{
|
||||||
m_MuscleClip = new ClipMuscleConstant(reader);
|
m_MuscleClip = new ClipMuscleConstant(reader);
|
||||||
}
|
}
|
||||||
else if (m_MuscleClipSize > 0)
|
else if (m_MuscleClipSize > 0)
|
||||||
|
{
|
||||||
|
if (!m_Legacy)
|
||||||
{
|
{
|
||||||
_ = reader.ReadInt32();
|
_ = reader.ReadInt32();
|
||||||
m_MuscleClip = new ClipMuscleConstant(reader); //m_AnimData (Tuanjie)
|
m_MuscleClip = new ClipMuscleConstant(reader); //m_AnimData (Tuanjie)
|
||||||
m_StreamingInfo = new StreamingInfo(reader);
|
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
|
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 class EqComparer : IEqualityComparer<AnimationClip>
|
||||||
{
|
{
|
||||||
public bool Equals(AnimationClip clipA, AnimationClip clipB)
|
public bool Equals(AnimationClip clipA, AnimationClip clipB)
|
||||||
|
Reference in New Issue
Block a user