private void SaveFrame(FrameObjectBase frame, BinaryWriter writer) { //is this even needed? hmm. Debug.WriteLine(frame.ToString()); if (frame.GetType() == typeof(FrameObjectArea)) { writer.Write((ushort)ObjectType.Area); (frame as FrameObjectArea).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectCamera)) { writer.Write((ushort)ObjectType.Camera); (frame as FrameObjectCamera).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectCollision)) { writer.Write((ushort)ObjectType.Collision); (frame as FrameObjectCollision).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectComponent_U005)) { writer.Write((ushort)ObjectType.Component_U00000005); (frame as FrameObjectComponent_U005).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectDummy)) { writer.Write((ushort)ObjectType.Dummy); (frame as FrameObjectDummy).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectDeflector)) { writer.Write((ushort)ObjectType.ParticleDeflector); (frame as FrameObjectDeflector).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectFrame)) { writer.Write((ushort)ObjectType.Frame); (frame as FrameObjectFrame).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectJoint)) { writer.Write((ushort)ObjectType.Joint); (frame as FrameObjectJoint).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectLight)) { writer.Write((ushort)ObjectType.Light); (frame as FrameObjectLight).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectModel)) { var mesh = (frame as FrameObjectModel); writer.Write((ushort)ObjectType.Model); mesh.WriteToFile(writer); mesh.Geometry.WriteToFile(writer); mesh.Material.WriteToFile(writer); mesh.BlendInfo.WriteToFile(writer); mesh.Skeleton.WriteToFile(writer); mesh.SkeletonHierarchy.WriteToFile(writer); foreach (var lod in mesh.Geometry.LOD) { using (var stream = new MemoryStream()) { SceneData.IndexBufferPool.GetBuffer(lod.IndexBufferRef.Hash).WriteToFile(stream, false); SceneData.VertexBufferPool.GetBuffer(lod.VertexBufferRef.Hash).WriteToFile(stream, false); writer.Write(stream.ToArray()); } } } else if (frame.GetType() == typeof(FrameObjectSector)) { writer.Write((ushort)ObjectType.Sector); (frame as FrameObjectSector).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectSingleMesh)) { var mesh = (frame as FrameObjectSingleMesh); writer.Write((ushort)ObjectType.SingleMesh); mesh.WriteToFile(writer); mesh.Geometry.WriteToFile(writer); mesh.Material.WriteToFile(writer); foreach (var lod in mesh.Geometry.LOD) { using (var stream = new MemoryStream()) { SceneData.IndexBufferPool.GetBuffer(lod.IndexBufferRef.Hash).WriteToFile(stream, false); SceneData.VertexBufferPool.GetBuffer(lod.VertexBufferRef.Hash).WriteToFile(stream, false); writer.Write(stream.ToArray()); } } } else if (frame.GetType() == typeof(FrameObjectTarget)) { writer.Write((ushort)ObjectType.Target); (frame as FrameObjectTarget).WriteToFile(writer); } else { writer.Write(frame.Type); frame.WriteToFile(writer); } writer.Write(frame.Children.Count); for (int i = 0; i < frame.Children.Count; i++) { SaveFrame(frame.Children[i], writer); } }
private void SaveFrame(FrameObjectBase frame, BinaryWriter writer) { //is this even needed? hmm. writer.Write(frame.RefID); // Save old RefID Debug.WriteLine(frame.ToString()); if (frame.GetType() == typeof(FrameObjectArea)) { writer.Write((ushort)ObjectType.Area); (frame as FrameObjectArea).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectCamera)) { writer.Write((ushort)ObjectType.Camera); (frame as FrameObjectCamera).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectCollision)) { writer.Write((ushort)ObjectType.Collision); (frame as FrameObjectCollision).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectComponent_U005)) { writer.Write((ushort)ObjectType.Component_U00000005); (frame as FrameObjectComponent_U005).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectDummy)) { writer.Write((ushort)ObjectType.Dummy); (frame as FrameObjectDummy).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectDeflector)) { writer.Write((ushort)ObjectType.ParticleDeflector); (frame as FrameObjectDeflector).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectFrame)) { writer.Write((ushort)ObjectType.Frame); (frame as FrameObjectFrame).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectJoint)) { writer.Write((ushort)ObjectType.Joint); (frame as FrameObjectJoint).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectLight)) { writer.Write((ushort)ObjectType.Light); (frame as FrameObjectLight).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectModel)) { var mesh = (frame as FrameObjectModel); writer.Write((ushort)ObjectType.Model); mesh.WriteToFilePart1(writer); mesh.Geometry.WriteToFile(writer); mesh.Material.WriteToFile(writer); mesh.BlendInfo.WriteToFile(writer); mesh.Skeleton.WriteToFile(writer); mesh.SkeletonHierarchy.WriteToFile(writer); mesh.WriteToFilePart2(writer); // Write Attachment hashes to the dictionary List <int> AttachmentHashes = new List <int>(); foreach (FrameObjectModel.AttachmentReference Attachment in mesh.AttachmentReferences) { AttachmentHashes.Add(Attachment.Attachment.RefID); } ModelAttachments.Add(mesh.Name.Hash, AttachmentHashes); foreach (var lod in mesh.Geometry.LOD) { using (var stream = new MemoryStream()) { SceneData.IndexBufferPool.GetBuffer(lod.IndexBufferRef.Hash).WriteToFile(stream, false); SceneData.VertexBufferPool.GetBuffer(lod.VertexBufferRef.Hash).WriteToFile(stream, false); writer.Write(stream.ToArray()); } } } else if (frame.GetType() == typeof(FrameObjectSector)) { writer.Write((ushort)ObjectType.Sector); (frame as FrameObjectSector).WriteToFile(writer); } else if (frame.GetType() == typeof(FrameObjectSingleMesh)) { var mesh = (frame as FrameObjectSingleMesh); writer.Write((ushort)ObjectType.SingleMesh); mesh.WriteToFile(writer); mesh.Geometry.WriteToFile(writer); mesh.Material.WriteToFile(writer); foreach (var lod in mesh.Geometry.LOD) { using (var stream = new MemoryStream()) { SceneData.IndexBufferPool.GetBuffer(lod.IndexBufferRef.Hash).WriteToFile(stream, false); SceneData.VertexBufferPool.GetBuffer(lod.VertexBufferRef.Hash).WriteToFile(stream, false); writer.Write(stream.ToArray()); } } } else if (frame.GetType() == typeof(FrameObjectTarget)) { writer.Write((ushort)ObjectType.Target); (frame as FrameObjectTarget).WriteToFile(writer); } else { writer.Write(frame.Type); frame.WriteToFile(writer); } // write FrameNameTable info writer.Write(frame.IsOnFrameTable); writer.Write((uint)frame.FrameNameTableFlags); // Write ParentIndex1 and ParentIndex2 info writer.Write(frame.ParentIndex1.RefID); writer.Write(frame.ParentIndex2.RefID); writer.Write(frame.Children.Count); for (int i = 0; i < frame.Children.Count; i++) { SaveFrame(frame.Children[i], writer); } }
public void WriteToFile(BinaryWriter writer) { //BEFORE WE WRITE, WE NEED TO COMPILE AND UPDATE THE FRAME. UpdateFrameData(); header.WriteToFile(writer); foreach (var pair in frameGeometries) { pair.Value.WriteToFile(writer); } foreach (var pair in frameMaterials) { pair.Value.WriteToFile(writer); } foreach (var pair in frameBlendInfos) { pair.Value.WriteToFile(writer); } foreach (var pair in frameSkeletons) { pair.Value.WriteToFile(writer); } foreach (var pair in frameSkeletonHierachies) { pair.Value.WriteToFile(writer); } foreach (var pair in frameObjects) { FrameObjectBase entry = (pair.Value as FrameObjectBase); if (entry.GetType() == typeof(FrameObjectJoint)) { writer.Write((int)ObjectType.Joint); } else if (entry.GetType() == typeof(FrameObjectSingleMesh)) { writer.Write((int)ObjectType.SingleMesh); } else if (entry.GetType() == typeof(FrameObjectFrame)) { writer.Write((int)ObjectType.Frame); } else if (entry.GetType() == typeof(FrameObjectLight)) { writer.Write((int)ObjectType.Light); } else if (entry.GetType() == typeof(FrameObjectCamera)) { writer.Write((int)ObjectType.Camera); } else if (entry.GetType() == typeof(FrameObjectComponent_U005)) { writer.Write((int)ObjectType.Component_U00000005); } else if (entry.GetType() == typeof(FrameObjectSector)) { writer.Write((int)ObjectType.Sector); } else if (entry.GetType() == typeof(FrameObjectDummy)) { writer.Write((int)ObjectType.Dummy); } else if (entry.GetType() == typeof(FrameObjectDeflector)) { writer.Write((int)ObjectType.ParticleDeflector); } else if (entry.GetType() == typeof(FrameObjectArea)) { writer.Write((int)ObjectType.Area); } else if (entry.GetType() == typeof(FrameObjectTarget)) { writer.Write((int)ObjectType.Target); } else if (entry.GetType() == typeof(FrameObjectModel)) { writer.Write((int)ObjectType.Model); } else if (entry.GetType() == typeof(FrameObjectCollision)) { writer.Write((int)ObjectType.Collision); } } foreach (var pair in frameObjects) { FrameObjectBase entry = (pair.Value as FrameObjectBase); entry.WriteToFile(writer); } }