void IData <Circuit> .Save(DataSaver <Circuit> saver, object parameter) { MeshFaceParameters parameters = (MeshFaceParameters)parameter; saver.WriteInt32(Positions.Count); saver.WriteMany(Positions, x => saver.WriteVector3U(x)); saver.WriteInt32(Faces.Count); saver.WriteInt32(Faces.Where(x => x.FaceVertexCount == 3).Count()); saver.WriteInt32(Faces.Where(x => x.FaceVertexCount == 4).Count()); saver.SaveMany(Faces, parameters); saver.WriteMany(Normals, x => saver.WriteVector3F16x16(x)); saver.WriteSingle16x16(Volume); }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IData <Circuit> .Load(DataLoader <Circuit> loader, object parameter) { MeshFaceParameters parameters = (MeshFaceParameters)parameter; int vertexCount = loader.ReadInt32(); Positions = loader.ReadMany(vertexCount, () => loader.ReadVector3U()); int faceCount = loader.ReadInt32(); int triCount = loader.ReadInt32(); int quadCount = loader.ReadInt32(); Faces = loader.LoadMany <MeshFace>(faceCount, parameters).ToList(); Normals = loader.ReadMany(vertexCount, () => loader.ReadVector3F16x16()); Volume = loader.ReadSingle16x16(); }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IData <Circuit> .Load(DataLoader <Circuit> loader, object parameter) { MeshFaceParameters parameters = (MeshFaceParameters)parameter; if (parameters.HasNamedFaces) { Name = loader.ReadPodString(); } if (loader.Instance.Key == 0x00005CA8) { Indices[3] = loader.ReadInt32(); Indices[0] = loader.ReadInt32(); FaceVertexCount = loader.ReadInt32(); Indices[2] = loader.ReadInt32(); Indices[1] = loader.ReadInt32(); } else { FaceVertexCount = loader.ReadInt32(); Indices = loader.ReadInt32s(4); } Normal = loader.ReadVector3F16x16(); MaterialType = loader.ReadPodString(); ColorOrTexIndex = loader.ReadUInt32(); TexCoords = loader.ReadMany(4, () => loader.ReadVector2U()); Reserved1 = loader.ReadUInt32(); if (FaceVertexCount == 4) { QuadReserved = loader.ReadVector3F16x16(); } if (Normal == Vector3U.Zero) { Reserved2 = loader.ReadUInt32(); } else { if (parameters.HasUnkProperty) { Unknown = loader.ReadUInt32(); } Properties = loader.ReadUInt32(); } }
void IData <Circuit> .Save(DataSaver <Circuit> saver, object parameter) { MeshFaceParameters parameters = (MeshFaceParameters)parameter; if (parameters.HasNamedFaces) { saver.WritePodString(Name); } if (saver.Instance.Key == 0x00005CA8) { saver.WriteInt32(Indices[3]); saver.WriteInt32(Indices[0]); saver.WriteInt32(FaceVertexCount); saver.WriteInt32(Indices[2]); saver.WriteInt32(Indices[1]); } else { saver.WriteInt32(FaceVertexCount); saver.WriteInt32s(Indices); } saver.WriteVector3F16x16(Normal); saver.WritePodString(MaterialType); saver.WriteUInt32(ColorOrTexIndex); saver.WriteMany(TexCoords, x => saver.WriteVector2U(x)); saver.Write(Reserved1); if (FaceVertexCount == 4) { saver.WriteVector3F16x16(QuadReserved); } if (Normal == Vector3U.Zero) { saver.WriteUInt32(Reserved2); } else { if (parameters.HasUnkProperty) { saver.WriteUInt32(Unknown); } saver.WriteUInt32(Properties); } }