private void WriteHeader(GrnBinaryWriter writer) { writer.Write(7380350958317416490); writer.Write(8845441965100526989); writer.Write(3613614802009591920); writer.Write(2261131331893869605); writer.Write(2261131331893869605); writer.Write(7053895580311513156); writer.Write(2138146631217928280); writer.Write(4032492294667058554); }
public void Write(Stream stream) { using (GrnBinaryWriter writer = new GrnBinaryWriter(stream)) { this.WriteHeader(writer); GrnMainNode mainNode = new GrnMainNode(); mainNode.NumTotalChildNodes = 3; this.CreateVerFrameDir(mainNode); GrnSectionNode staFrameDir = new GrnSectionNode(mainNode, GrnNodeType.StandardFrameDirectory); staFrameDir.Offset = 440; mainNode.AppendChild(staFrameDir); // 0StringTable OrderedDictionary stringMap = this.CreateStringMap(); GrnStringTableNode strTableNode = new GrnStringTableNode(staFrameDir); strTableNode.Strings = stringMap.Keys.Cast <string>().ToList(); staFrameDir.AppendChild(strTableNode); // 1DataExtension GrnNode dataExtSecNode = new GrnNode(staFrameDir, GrnNodeType.DataExtensionSection); staFrameDir.AppendChild(dataExtSecNode); this.WriteDataExtensions(dataExtSecNode, stringMap); // 2VectorChannel GrnNode vecChanSecNode = new GrnNode(staFrameDir, GrnNodeType.VectorChannelSection); staFrameDir.AppendChild(vecChanSecNode); // 3TransformChannel GrnNode traChanSecNode = new GrnNode(staFrameDir, GrnNodeType.TransformChannelSection); staFrameDir.AppendChild(traChanSecNode); foreach (GrnBone bone in this.Bones) { GrnNode traChanNode = new GrnNode(traChanSecNode, GrnNodeType.TransformChannel); traChanSecNode.AppendChild(traChanNode); GrnDataExtensionReferenceNode refNode = new GrnDataExtensionReferenceNode(traChanNode); refNode.DataExtensionIndex = bone.DataExtensionIndex + 1; traChanNode.AppendChild(refNode); } // 4Mesh GrnNode meshSecNode = new GrnNode(staFrameDir, GrnNodeType.MeshSection); staFrameDir.AppendChild(meshSecNode); foreach (GrnMesh mesh in this.Meshes) { mesh.Write(meshSecNode); } // 5Skeleton GrnNode skelSecNode = new GrnNode(staFrameDir, GrnNodeType.SkeletonSection); staFrameDir.AppendChild(skelSecNode); GrnNode skelNode = new GrnNode(skelSecNode, GrnNodeType.Skeleton); skelSecNode.AppendChild(skelNode); GrnNode boneSecNode = new GrnNode(skelNode, GrnNodeType.BoneSection); skelNode.AppendChild(boneSecNode); foreach (GrnBone bone in this.Bones) { bone.Write(boneSecNode); } // 6Texture GrnNode texSecNode = new GrnNode(staFrameDir, GrnNodeType.TextureSection); staFrameDir.AppendChild(texSecNode); foreach (GrnTexture tex in this.Textures) { tex.Write(texSecNode); } // 7Material GrnNode matSecNode = new GrnNode(staFrameDir, GrnNodeType.MaterialSection); staFrameDir.AppendChild(matSecNode); foreach (GrnMaterial mat in this.Materials) { mat.Write(matSecNode); } // 8Form GrnNode formSecNode = new GrnNode(staFrameDir, GrnNodeType.FormSection); staFrameDir.AppendChild(formSecNode); this.WriteForm(formSecNode); // 9Model GrnNode modelSecNode = new GrnNode(staFrameDir, GrnNodeType.ModelSection); staFrameDir.AppendChild(modelSecNode); GrnNode modelNode = new GrnNode(modelSecNode, GrnNodeType.Model); modelNode.Data = new byte[] { 0x01, 0x00, 0x00, 0x00 }; modelSecNode.AppendChild(modelNode); GrnNode rendPassSecNode = new GrnNode(modelNode, GrnNodeType.RenderPassSection); modelNode.AppendChild(rendPassSecNode); for (int i = 0; i < this.Meshes.Count; ++i) { this.Meshes[i].WriteRenderPass(rendPassSecNode, i); } // 10Animation GrnNode animSecNode = new GrnNode(staFrameDir, GrnNodeType.AnimationSection); staFrameDir.AppendChild(animSecNode); GrnNode animNode = new GrnNode(animSecNode, GrnNodeType.Animation); animSecNode.AppendChild(animNode); GrnNode animVecTraSecNode = new GrnNode(animNode, GrnNodeType.AnimationVectorTrackSection); animNode.AppendChild(animVecTraSecNode); GrnNode animTraTraSecNode = new GrnNode(animNode, GrnNodeType.AnimationTransformTrackSection); animNode.AppendChild(animTraTraSecNode); for (int i = 0; i < this.Animation.BoneTracks.Count; ++i) { this.Animation.BoneTracks[i].Write(animTraTraSecNode, i); } // 11NullTerminator GrnNode nullTermNode = new GrnNode(staFrameDir, GrnNodeType.NullTerminator); staFrameDir.AppendChild(nullTermNode); GrnSectionNode nullFrameDir = new GrnSectionNode(mainNode, GrnNodeType.NullFrameDirectory); mainNode.AppendChild(nullFrameDir); nullTermNode = new GrnNode(nullFrameDir, GrnNodeType.NullTerminator); nullFrameDir.AppendChild(nullTermNode); mainNode.Write(writer); } }