private static void WriteSkinWeights(XSkinWeights skin, XofFileSaveData saveData) { byte[] data; using (var ms = new MemoryStream()) using (var writer = new BinaryWriter(ms)) { WriteString(skin.TransformNodeName, writer); writer.Write(skin.VertexIndices.Count); for (int i = 0; i < skin.VertexIndices.Count; i++) { writer.Write(skin.VertexIndices[i]); } for (int i = 0; i < skin.Weights.Count; i++) { writer.Write(skin.Weights[i]); } WriteMatrix4x4(skin.MatrixOffset, writer); data = ms.ToArray(); } using (saveData.AddData(XofFileDefaultTemplates.SkinWeightsId, skin.Name, null, data)) { } }
private static XSkinWeights ReadSkinWeights(XofFileEnumData enumData) { var skin = new XSkinWeights { Name = enumData.GetName() }; byte[] data = enumData.GetData(); using (var ms = new MemoryStream(data, false)) using (var reader = new BinaryReader(ms)) { skin.TransformNodeName = ReadString(reader); int nWeights = reader.ReadInt32(); skin.VertexIndices.Capacity = nWeights; skin.Weights.Capacity = nWeights; for (int i = 0; i < nWeights; i++) { skin.VertexIndices.Add(reader.ReadInt32()); } for (int i = 0; i < nWeights; i++) { skin.Weights.Add(reader.ReadSingle()); } skin.MatrixOffset = ReadMatrix4x4(reader); if (ms.Position != ms.Length) { throw new InvalidDataException(); } } if (enumData.GetChildrenCount() != 0) { throw new InvalidDataException(); } return(skin); }