public void Write(GrnNode matSecNode) { GrnNode matNode = new GrnNode(matSecNode, GrnNodeType.Material); matSecNode.AppendChild(matNode); GrnMaterialSimpleDiffuseTextureNode matDiffNode = new GrnMaterialSimpleDiffuseTextureNode(matNode); matDiffNode.TextureMapIndex = this.DiffuseTextureIndex + 1; matNode.AppendChild(matDiffNode); GrnDataExtensionReferenceNode refNode = new GrnDataExtensionReferenceNode(matNode); refNode.DataExtensionIndex = this.DataExtensionIndex + 1; matNode.AppendChild(refNode); }
public void Write(GrnNode texSecNode) { GrnNode texMapNode = new GrnNode(texSecNode, GrnNodeType.TextureMap); texSecNode.AppendChild(texMapNode); GrnNode texImSecNode = new GrnNode(texMapNode, GrnNodeType.TextureImageSection); texMapNode.AppendChild(texImSecNode); GrnTextureMapImageNode texMapImNode = new GrnTextureMapImageNode(texImSecNode); texMapImNode.Width = this.Width; texMapImNode.Height = this.Height; texImSecNode.AppendChild(texMapImNode); GrnDataExtensionReferenceNode refNode = new GrnDataExtensionReferenceNode(texMapNode); refNode.DataExtensionIndex = this.DataExtensionIndex + 1; texMapNode.AppendChild(refNode); }
public void Write(GrnNode meshSecNode) { GrnNode meshNode = new GrnNode(meshSecNode, GrnNodeType.Mesh); meshSecNode.AppendChild(meshNode); GrnNode meshVertSetSecNode = new GrnNode(meshNode, GrnNodeType.MeshVertexSetSection); meshNode.AppendChild(meshVertSetSecNode); GrnNode meshVertSetNode = new GrnNode(meshVertSetSecNode, GrnNodeType.MeshVertexSet); meshVertSetSecNode.AppendChild(meshVertSetNode); GrnMeshVerticesNode mVertNode = new GrnMeshVerticesNode(meshVertSetNode); mVertNode.Vertices = this.Vertices; meshVertSetNode.AppendChild(mVertNode); GrnMeshNormalsNode mNormNode = new GrnMeshNormalsNode(meshVertSetNode); mNormNode.Normals = this.Normals; meshVertSetNode.AppendChild(mNormNode); GrnNode meshFieldSecNode = new GrnNode(meshVertSetNode, GrnNodeType.MeshFieldSection); meshVertSetNode.AppendChild(meshFieldSecNode); GrnMeshFieldNode mFieldNode = new GrnMeshFieldNode(meshFieldSecNode); mFieldNode.TextureCoordinates = this.TextureCoordinates; meshFieldSecNode.AppendChild(mFieldNode); GrnMeshWeightsNode mWeightNode = new GrnMeshWeightsNode(meshNode); mWeightNode.VertexWeights = this.VertexWeights; meshNode.AppendChild(mWeightNode); GrnMeshTrianglesNode mTriNode = new GrnMeshTrianglesNode(meshNode); mTriNode.Faces = this.Faces; meshNode.AppendChild(mTriNode); GrnDataExtensionReferenceNode mDERefNode = new GrnDataExtensionReferenceNode(meshNode); mDERefNode.DataExtensionIndex = this.DataExtensionIndex + 1; meshNode.AppendChild(mDERefNode); }
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); } }