public Model Deserialize(string name, byte[] data)
{
using (var memory = new MemoryStream(data))
{
using (var reader = new BinaryReader(memory))
{
// The first version of the model format didn't have a version number; instead
// the first read value in that format is the number of animations. So we use a
// very large number that would never be a real number of animations to indicate
// that the format is now versioned.
if (reader.ReadInt32() == Int32.MaxValue)
{
var version = reader.ReadInt32();
switch (version)
{
case 2:
return _modelSerializerVersion2.Deserialize(name, data);
case 3:
return _modelSerializerVersion3.Deserialize(name, data);
case 4:
return _modelSerializerVersion4.Deserialize(name, data);
default:
throw new InvalidOperationException("Unknown version for model format.");
}
}
// No version signature, so it must be version 1.
return _modelSerializerVersion1.Deserialize(name, data);
}
}
}