public void Read(Stream stream)
{
using (var io = IoBuffer.FromStream(stream))
{
var version = io.ReadUInt32();
Name = io.ReadLongPascalString();
Duration = io.ReadFloat();
Distance = io.ReadFloat();
IsMoving = io.ReadByte();
var translationCount = io.ReadUInt32();
Translations = new Vector3[translationCount];
for (var i = 0; i < translationCount; i++){
Translations[i] = new Vector3 {
X = -io.ReadFloat(),
Y = io.ReadFloat(),
Z = io.ReadFloat()
};
}
var rotationCount = io.ReadUInt32();
Rotations = new Quaternion[rotationCount];
for (var i = 0; i < rotationCount; i++){
Rotations[i] = new Quaternion {
X = io.ReadFloat(),
Y = -io.ReadFloat(),
Z = -io.ReadFloat(),
W = -io.ReadFloat()
};
}
var motionCount = io.ReadUInt32();
Motions = new AnimationMotion[motionCount];
for (var i = 0; i < motionCount; i++){
var motion = new AnimationMotion();
var unknown = io.ReadUInt32();
motion.BoneName = io.ReadPascalString();
motion.FrameCount = io.ReadUInt32();
motion.Duration = io.ReadFloat();
motion.HasTranslation = (io.ReadByte() == 1);
motion.HasRotation = (io.ReadByte() == 1);
motion.FirstTranslationIndex = io.ReadUInt32();
motion.FirstRotationIndex = io.ReadUInt32();
var hasPropsList = io.ReadByte() == 1;
if (hasPropsList)
{
var propListCount = io.ReadUInt32();
var props = new PropertyList[propListCount];
for (var x = 0; x < propListCount; x++){
props[x] = ReadPropertyList(io);
}
motion.Properties = props;
}
var hasTimeProps = io.ReadByte() == 1;
if (hasTimeProps)
{
var timePropsListCount = io.ReadUInt32();
var timePropsList = new TimePropertyList[timePropsListCount];
for (var x = 0; x < timePropsListCount; x++)
{
var list = new TimePropertyList();
var timePropsCount = io.ReadUInt32();
list.Items = new TimePropertyListItem[timePropsCount];
for (var y = 0; y < timePropsCount; y++)
{
var id = io.ReadUInt32();
list.Items[y] = new TimePropertyListItem {
ID = id,
Properties = ReadPropertyList(io)
};
}
timePropsList[x] = list;
}
motion.TimeProperties = timePropsList;
}
Motions[i] = motion;
}
}
}