- [Core] Fix bug with assets parsing.
This commit is contained in:
@@ -91,7 +91,7 @@ namespace AssetStudio
|
||||
{
|
||||
var version = reader.version;
|
||||
int numCurves = reader.ReadInt32();
|
||||
m_Curve = new List<Keyframe<T>>(numCurves);
|
||||
m_Curve = new List<Keyframe<T>>();
|
||||
for (int i = 0; i < numCurves; i++)
|
||||
{
|
||||
m_Curve.Add(new Keyframe<T>(reader, readerFunc));
|
||||
@@ -568,7 +568,7 @@ namespace AssetStudio
|
||||
public PPtrCurve(ObjectReader reader)
|
||||
{
|
||||
int numCurves = reader.ReadInt32();
|
||||
curve = new List<PPtrKeyframe>(numCurves);
|
||||
curve = new List<PPtrKeyframe>();
|
||||
for (int i = 0; i < numCurves; i++)
|
||||
{
|
||||
curve.Add(new PPtrKeyframe(reader));
|
||||
@@ -646,7 +646,7 @@ namespace AssetStudio
|
||||
|
||||
public HandPose(ObjectReader reader)
|
||||
{
|
||||
m_GrabX = reader.ReadXForm(reader.version);
|
||||
m_GrabX = reader.ReadXForm();
|
||||
m_DoFArray = reader.ReadSingleArray();
|
||||
m_Override = reader.ReadSingle();
|
||||
m_CloseOpen = reader.ReadSingle();
|
||||
@@ -658,7 +658,7 @@ namespace AssetStudio
|
||||
{
|
||||
var handPose = new HandPose();
|
||||
|
||||
handPose.m_GrabX = reader.ReadXForm(reader.version, true);
|
||||
handPose.m_GrabX = reader.ReadXForm4();
|
||||
handPose.m_DoFArray = reader.ReadSingleArray(20);
|
||||
handPose.m_Override = reader.ReadSingle();
|
||||
handPose.m_CloseOpen = reader.ReadSingle();
|
||||
@@ -681,7 +681,7 @@ namespace AssetStudio
|
||||
public HumanGoal(ObjectReader reader)
|
||||
{
|
||||
var version = reader.version;
|
||||
m_X = reader.ReadXForm(reader.version);
|
||||
m_X = reader.ReadXForm();
|
||||
m_WeightT = reader.ReadSingle();
|
||||
m_WeightR = reader.ReadSingle();
|
||||
if (version[0] >= 5)//5.0 and up
|
||||
@@ -695,7 +695,7 @@ namespace AssetStudio
|
||||
{
|
||||
var humanGoal = new HumanGoal();
|
||||
|
||||
humanGoal.m_X = reader.ReadXForm(reader.version, true);
|
||||
humanGoal.m_X = reader.ReadXForm4();
|
||||
humanGoal.m_WeightT = reader.ReadSingle();
|
||||
humanGoal.m_WeightR = reader.ReadSingle();
|
||||
|
||||
@@ -714,7 +714,7 @@ namespace AssetStudio
|
||||
public XForm m_RootX;
|
||||
public Vector3 m_LookAtPosition;
|
||||
public Vector4 m_LookAtWeight;
|
||||
public HumanGoal[] m_GoalArray;
|
||||
public List<HumanGoal> m_GoalArray;
|
||||
public HandPose m_LeftHandPose;
|
||||
public HandPose m_RightHandPose;
|
||||
public float[] m_DoFArray;
|
||||
@@ -724,15 +724,15 @@ namespace AssetStudio
|
||||
public HumanPose(ObjectReader reader)
|
||||
{
|
||||
var version = reader.version;
|
||||
m_RootX = reader.ReadXForm(reader.version);
|
||||
m_RootX = reader.ReadXForm();
|
||||
m_LookAtPosition = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up
|
||||
m_LookAtWeight = reader.ReadVector4();
|
||||
|
||||
int numGoals = reader.ReadInt32();
|
||||
m_GoalArray = new HumanGoal[numGoals];
|
||||
m_GoalArray = new List<HumanGoal>();
|
||||
for (int i = 0; i < numGoals; i++)
|
||||
{
|
||||
m_GoalArray[i] = new HumanGoal(reader);
|
||||
m_GoalArray.Add(new HumanGoal(reader));
|
||||
}
|
||||
|
||||
m_LeftHandPose = new HandPose(reader);
|
||||
@@ -742,28 +742,23 @@ namespace AssetStudio
|
||||
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 2))//5.2 and up
|
||||
{
|
||||
int numTDof = reader.ReadInt32();
|
||||
m_TDoFArray = new Vector3[numTDof];
|
||||
for (int i = 0; i < numTDof; i++)
|
||||
{
|
||||
m_TDoFArray[i] = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up
|
||||
m_TDoFArray = reader.ReadVector3Array();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static HumanPose ParseGI(ObjectReader reader)
|
||||
{
|
||||
var version = reader.version;
|
||||
var humanPose = new HumanPose();
|
||||
|
||||
humanPose.m_RootX = reader.ReadXForm(version, true);
|
||||
humanPose.m_RootX = reader.ReadXForm4();
|
||||
humanPose.m_LookAtPosition = (Vector3)reader.ReadVector4();
|
||||
humanPose.m_LookAtWeight = reader.ReadVector4();
|
||||
|
||||
humanPose.m_GoalArray = new HumanGoal[4];
|
||||
humanPose.m_GoalArray = new List<HumanGoal>();
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
humanPose.m_GoalArray[i] = HumanGoal.ParseGI(reader);
|
||||
humanPose.m_GoalArray.Add(HumanGoal.ParseGI(reader));
|
||||
}
|
||||
|
||||
humanPose.m_LeftHandPose = HandPose.ParseGI(reader);
|
||||
@@ -771,11 +766,7 @@ namespace AssetStudio
|
||||
|
||||
humanPose.m_DoFArray = reader.ReadSingleArray(0x37);
|
||||
|
||||
humanPose.m_TDoFArray = new Vector3[0x15];
|
||||
for (int i = 0; i < 0x15; i++)
|
||||
{
|
||||
humanPose.m_TDoFArray[i] = (Vector3)reader.ReadVector4();
|
||||
}
|
||||
humanPose.m_TDoFArray = reader.ReadVector4Array(0x15).Select(x => (Vector3)x).ToArray();
|
||||
|
||||
reader.Position += 4;
|
||||
|
||||
@@ -973,17 +964,17 @@ namespace AssetStudio
|
||||
public class StreamedFrame
|
||||
{
|
||||
public float time;
|
||||
public StreamedCurveKey[] keyList;
|
||||
public List<StreamedCurveKey> keyList;
|
||||
|
||||
public StreamedFrame(EndianBinaryReader reader)
|
||||
{
|
||||
time = reader.ReadSingle();
|
||||
|
||||
int numKeys = reader.ReadInt32();
|
||||
keyList = new StreamedCurveKey[numKeys];
|
||||
keyList = new List<StreamedCurveKey>();
|
||||
for (int i = 0; i < numKeys; i++)
|
||||
{
|
||||
keyList[i] = new StreamedCurveKey(reader);
|
||||
keyList.Add(new StreamedCurveKey(reader));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1220,15 +1211,15 @@ namespace AssetStudio
|
||||
|
||||
public class ValueArrayConstant
|
||||
{
|
||||
public ValueConstant[] m_ValueArray;
|
||||
public List<ValueConstant> m_ValueArray;
|
||||
|
||||
public ValueArrayConstant(ObjectReader reader)
|
||||
{
|
||||
int numVals = reader.ReadInt32();
|
||||
m_ValueArray = new ValueConstant[numVals];
|
||||
m_ValueArray = new List<ValueConstant>();
|
||||
for (int i = 0; i < numVals; i++)
|
||||
{
|
||||
m_ValueArray[i] = new ValueConstant(reader);
|
||||
m_ValueArray.Add(new ValueConstant(reader));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1301,7 +1292,7 @@ namespace AssetStudio
|
||||
var bindings = new AnimationClipBindingConstant();
|
||||
var genericBindings = new List<GenericBinding>();
|
||||
var values = m_Binding;
|
||||
for (int i = 0; i < values.m_ValueArray.Length;)
|
||||
for (int i = 0; i < values.m_ValueArray.Count;)
|
||||
{
|
||||
var curveID = values.m_ValueArray[i].m_ID;
|
||||
var curveTypeID = values.m_ValueArray[i].m_TypeID;
|
||||
@@ -1336,7 +1327,7 @@ namespace AssetStudio
|
||||
i++;
|
||||
}
|
||||
}
|
||||
bindings.genericBindings = genericBindings.ToArray();
|
||||
bindings.genericBindings = genericBindings;
|
||||
return bindings;
|
||||
}
|
||||
}
|
||||
@@ -1371,7 +1362,7 @@ namespace AssetStudio
|
||||
public float m_CycleOffset;
|
||||
public float m_AverageAngularSpeed;
|
||||
public int[] m_IndexArray;
|
||||
public ValueDelta[] m_ValueArrayDelta;
|
||||
public List<ValueDelta> m_ValueArrayDelta;
|
||||
public float[] m_ValueArrayReferencePose;
|
||||
public bool m_Mirror;
|
||||
public bool m_LoopTime;
|
||||
@@ -1391,17 +1382,17 @@ namespace AssetStudio
|
||||
{
|
||||
var version = reader.version;
|
||||
m_DeltaPose = new HumanPose(reader);
|
||||
m_StartX = reader.ReadXForm(reader.version);
|
||||
m_StartX = reader.ReadXForm();
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 5))//5.5 and up
|
||||
{
|
||||
m_StopX = reader.ReadXForm(reader.version);
|
||||
m_StopX = reader.ReadXForm();
|
||||
}
|
||||
m_LeftFootStartX = reader.ReadXForm(reader.version);
|
||||
m_RightFootStartX = reader.ReadXForm(reader.version);
|
||||
m_LeftFootStartX = reader.ReadXForm();
|
||||
m_RightFootStartX = reader.ReadXForm();
|
||||
if (version[0] < 5)//5.0 down
|
||||
{
|
||||
m_MotionStartX = reader.ReadXForm(reader.version);
|
||||
m_MotionStopX = reader.ReadXForm(reader.version);
|
||||
m_MotionStartX = reader.ReadXForm();
|
||||
m_MotionStopX = reader.ReadXForm();
|
||||
}
|
||||
m_AverageSpeed = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up
|
||||
m_Clip = new Clip(reader);
|
||||
@@ -1425,10 +1416,10 @@ namespace AssetStudio
|
||||
var m_AdditionalCurveIndexArray = reader.ReadInt32Array();
|
||||
}
|
||||
int numDeltas = reader.ReadInt32();
|
||||
m_ValueArrayDelta = new ValueDelta[numDeltas];
|
||||
m_ValueArrayDelta = new List<ValueDelta>();
|
||||
for (int i = 0; i < numDeltas; i++)
|
||||
{
|
||||
m_ValueArrayDelta[i] = new ValueDelta(reader);
|
||||
m_ValueArrayDelta.Add(new ValueDelta(reader));
|
||||
}
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 3))//5.3 and up
|
||||
{
|
||||
@@ -1460,10 +1451,10 @@ namespace AssetStudio
|
||||
var clipMuscleConstant = new ClipMuscleConstant();
|
||||
|
||||
clipMuscleConstant.m_DeltaPose = HumanPose.ParseGI(reader);
|
||||
clipMuscleConstant.m_StartX = reader.ReadXForm(version, true);
|
||||
clipMuscleConstant.m_StopX = reader.ReadXForm(version, true);
|
||||
clipMuscleConstant.m_LeftFootStartX = reader.ReadXForm(version, true);
|
||||
clipMuscleConstant.m_RightFootStartX = reader.ReadXForm(version, true);
|
||||
clipMuscleConstant.m_StartX = reader.ReadXForm4();
|
||||
clipMuscleConstant.m_StopX = reader.ReadXForm4();
|
||||
clipMuscleConstant.m_LeftFootStartX = reader.ReadXForm4();
|
||||
clipMuscleConstant.m_RightFootStartX = reader.ReadXForm4();
|
||||
|
||||
clipMuscleConstant.m_AverageSpeed = (Vector3)reader.ReadVector4();
|
||||
|
||||
@@ -1510,10 +1501,10 @@ namespace AssetStudio
|
||||
if (valueArrayDeltaCount > 0)
|
||||
{
|
||||
reader.Position = valueArrayDeltaOffset;
|
||||
clipMuscleConstant.m_ValueArrayDelta = new ValueDelta[valueArrayDeltaCount];
|
||||
clipMuscleConstant.m_ValueArrayDelta = new List<ValueDelta>();
|
||||
for (int i = 0; i < valueArrayDeltaCount; i++)
|
||||
{
|
||||
clipMuscleConstant.m_ValueArrayDelta[i] = new ValueDelta(reader);
|
||||
clipMuscleConstant.m_ValueArrayDelta.Add(new ValueDelta(reader));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1611,25 +1602,25 @@ namespace AssetStudio
|
||||
|
||||
public class AnimationClipBindingConstant : IYAMLExportable
|
||||
{
|
||||
public GenericBinding[] genericBindings;
|
||||
public PPtr<Object>[] pptrCurveMapping;
|
||||
public List<GenericBinding> genericBindings;
|
||||
public List<PPtr<Object>> pptrCurveMapping;
|
||||
|
||||
public AnimationClipBindingConstant() { }
|
||||
|
||||
public AnimationClipBindingConstant(ObjectReader reader)
|
||||
{
|
||||
int numBindings = reader.ReadInt32();
|
||||
genericBindings = new GenericBinding[numBindings];
|
||||
genericBindings = new List<GenericBinding>();
|
||||
for (int i = 0; i < numBindings; i++)
|
||||
{
|
||||
genericBindings[i] = new GenericBinding(reader);
|
||||
genericBindings.Add(new GenericBinding(reader));
|
||||
}
|
||||
|
||||
int numMappings = reader.ReadInt32();
|
||||
pptrCurveMapping = new PPtr<Object>[numMappings];
|
||||
pptrCurveMapping = new List<PPtr<Object>>();
|
||||
for (int i = 0; i < numMappings; i++)
|
||||
{
|
||||
pptrCurveMapping[i] = new PPtr<Object>(reader);
|
||||
pptrCurveMapping.Add(new PPtr<Object>(reader));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1732,20 +1723,20 @@ namespace AssetStudio
|
||||
public bool m_Legacy;
|
||||
public bool m_Compressed;
|
||||
public bool m_UseHighQualityCurve;
|
||||
public QuaternionCurve[] m_RotationCurves;
|
||||
public CompressedAnimationCurve[] m_CompressedRotationCurves;
|
||||
public Vector3Curve[] m_EulerCurves;
|
||||
public Vector3Curve[] m_PositionCurves;
|
||||
public Vector3Curve[] m_ScaleCurves;
|
||||
public FloatCurve[] m_FloatCurves;
|
||||
public PPtrCurve[] m_PPtrCurves;
|
||||
public List<QuaternionCurve> m_RotationCurves;
|
||||
public List<CompressedAnimationCurve> m_CompressedRotationCurves;
|
||||
public List<Vector3Curve> m_EulerCurves;
|
||||
public List<Vector3Curve> m_PositionCurves;
|
||||
public List<Vector3Curve> m_ScaleCurves;
|
||||
public List<FloatCurve> m_FloatCurves;
|
||||
public List<PPtrCurve> m_PPtrCurves;
|
||||
public float m_SampleRate;
|
||||
public int m_WrapMode;
|
||||
public AABB m_Bounds;
|
||||
public uint m_MuscleClipSize;
|
||||
public ClipMuscleConstant m_MuscleClip;
|
||||
public AnimationClipBindingConstant m_ClipBindingConstant;
|
||||
public AnimationEvent[] m_Events;
|
||||
public List<AnimationEvent> m_Events;
|
||||
public StreamingInfo m_StreamData;
|
||||
|
||||
private bool hasStreamingInfo = false;
|
||||
@@ -1773,57 +1764,57 @@ namespace AssetStudio
|
||||
}
|
||||
reader.AlignStream();
|
||||
int numRCurves = reader.ReadInt32();
|
||||
m_RotationCurves = new QuaternionCurve[numRCurves];
|
||||
m_RotationCurves = new List<QuaternionCurve>();
|
||||
for (int i = 0; i < numRCurves; i++)
|
||||
{
|
||||
m_RotationCurves[i] = new QuaternionCurve(reader);
|
||||
m_RotationCurves.Add(new QuaternionCurve(reader));
|
||||
}
|
||||
|
||||
int numCRCurves = reader.ReadInt32();
|
||||
m_CompressedRotationCurves = new CompressedAnimationCurve[numCRCurves];
|
||||
m_CompressedRotationCurves = new List<CompressedAnimationCurve>();
|
||||
for (int i = 0; i < numCRCurves; i++)
|
||||
{
|
||||
m_CompressedRotationCurves[i] = new CompressedAnimationCurve(reader);
|
||||
m_CompressedRotationCurves.Add(new CompressedAnimationCurve(reader));
|
||||
}
|
||||
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 3))//5.3 and up
|
||||
{
|
||||
int numEulerCurves = reader.ReadInt32();
|
||||
m_EulerCurves = new Vector3Curve[numEulerCurves];
|
||||
m_EulerCurves = new List<Vector3Curve>();
|
||||
for (int i = 0; i < numEulerCurves; i++)
|
||||
{
|
||||
m_EulerCurves[i] = new Vector3Curve(reader);
|
||||
m_EulerCurves.Add(new Vector3Curve(reader));
|
||||
}
|
||||
}
|
||||
|
||||
int numPCurves = reader.ReadInt32();
|
||||
m_PositionCurves = new Vector3Curve[numPCurves];
|
||||
m_PositionCurves = new List<Vector3Curve>();
|
||||
for (int i = 0; i < numPCurves; i++)
|
||||
{
|
||||
m_PositionCurves[i] = new Vector3Curve(reader);
|
||||
m_PositionCurves.Add(new Vector3Curve(reader));
|
||||
}
|
||||
|
||||
int numSCurves = reader.ReadInt32();
|
||||
m_ScaleCurves = new Vector3Curve[numSCurves];
|
||||
m_ScaleCurves = new List<Vector3Curve>();
|
||||
for (int i = 0; i < numSCurves; i++)
|
||||
{
|
||||
m_ScaleCurves[i] = new Vector3Curve(reader);
|
||||
m_ScaleCurves.Add(new Vector3Curve(reader));
|
||||
}
|
||||
|
||||
int numFCurves = reader.ReadInt32();
|
||||
m_FloatCurves = new FloatCurve[numFCurves];
|
||||
m_FloatCurves = new List<FloatCurve>();
|
||||
for (int i = 0; i < numFCurves; i++)
|
||||
{
|
||||
m_FloatCurves[i] = new FloatCurve(reader);
|
||||
m_FloatCurves.Add(new FloatCurve(reader));
|
||||
}
|
||||
|
||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
||||
{
|
||||
int numPtrCurves = reader.ReadInt32();
|
||||
m_PPtrCurves = new PPtrCurve[numPtrCurves];
|
||||
m_PPtrCurves = new List<PPtrCurve>();
|
||||
for (int i = 0; i < numPtrCurves; i++)
|
||||
{
|
||||
m_PPtrCurves[i] = new PPtrCurve(reader);
|
||||
m_PPtrCurves.Add(new PPtrCurve(reader));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1864,10 +1855,10 @@ namespace AssetStudio
|
||||
{
|
||||
var m_AclClipData = reader.ReadUInt8Array();
|
||||
var aclBindingsCount = reader.ReadInt32();
|
||||
var m_AclBindings = new GenericBinding[aclBindingsCount];
|
||||
var m_AclBindings = new List<GenericBinding>();
|
||||
for (int i = 0; i < aclBindingsCount; i++)
|
||||
{
|
||||
m_AclBindings[i] = new GenericBinding(reader);
|
||||
m_AclBindings.Add(new GenericBinding(reader));
|
||||
}
|
||||
var m_AclRange = new KeyValuePair<float, float>(reader.ReadSingle(), reader.ReadSingle());
|
||||
}
|
||||
@@ -1882,10 +1873,10 @@ namespace AssetStudio
|
||||
reader.AlignStream();
|
||||
}
|
||||
int numEvents = reader.ReadInt32();
|
||||
m_Events = new AnimationEvent[numEvents];
|
||||
m_Events = new List<AnimationEvent>();
|
||||
for (int i = 0; i < numEvents; i++)
|
||||
{
|
||||
m_Events[i] = new AnimationEvent(reader);
|
||||
m_Events.Add(new AnimationEvent(reader));
|
||||
}
|
||||
if (version[0] >= 2017) //2017 and up
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user