コード例 #1
0
ファイル: Arrays.cs プロジェクト: STulling/BrawlCrateNext
        public override void WriteParams(System.Xml.XmlWriter writer, Dictionary <HavokClassNode, int> classNodes)
        {
            writer.WriteAttributeString("numelements",
                                        Children.Count.ToString(System.Globalization.CultureInfo.InvariantCulture));

            writer.WriteString(" ");
            foreach (HavokClassNode c in Children)
            {
                //Arrays embed parameters instead of pointing to an object containing them elsewhere

                HavokClassNode c2 = c;
                if (c is cmPointerNode && c.Children.Count > 0)
                {
                    c2 = c.Children[0] as HavokClassNode;
                }

                if (c2 is HavokMetaObjectNode || c2 is hkClassNode)
                {
                    ResourceNode[] nodes = c2.FindChildrenByClassType(null, typeof(HavokMetaObjectNode));
                    if (nodes == null && nodes.Length == 0)
                    {
                        writer.WriteStartElement("hkobject");
                        c2.WriteParams(writer, classNodes);
                        writer.WriteEndElement();
                    }
                    else
                    {
                        writer.WriteString(HavokXML.GetObjectName(classNodes, c2));
                    }
                }
                else if (c2 is cmStringNode)
                {
                    writer.WriteStartElement("hkstring");
                    c2.WriteParams(writer, classNodes);
                    writer.WriteEndElement();
                }
                else
                {
                    c2.WriteParams(writer, classNodes);
                }

                writer.WriteString(" ");
            }
        }
コード例 #2
0
 public override void WriteParams(System.Xml.XmlWriter writer, Dictionary <HavokClassNode, int> classNodes)
 {
     if (Children.Count > 0)
     {
         HavokClassNode n = Children[0] as HavokClassNode;
         if (n is HavokMetaObjectNode || n is hkClassNode)
         {
             writer.WriteString(HavokXML.GetObjectName(classNodes, n));
         }
         else
         {
             n.WriteParams(writer, classNodes);
         }
     }
 }
コード例 #3
0
        public static void Serialize(HavokNode node, string outFile)
        {
            using (FileStream stream = new FileStream(outFile, FileMode.Create, FileAccess.ReadWrite, FileShare.None,
                                                      0x1000, FileOptions.SequentialScan))
            {
                using (XmlWriter writer = XmlWriter.Create(stream, _writerSettings))
                {
                    writer.Flush();
                    stream.Position = 0;

                    node.Populate();

                    Dictionary <HavokClassNode, int> classIDs = new Dictionary <HavokClassNode, int>();
                    int i = 1;
                    foreach (HavokSectionNode s in node.Children)
                    {
                        foreach (HavokClassNode c in s._classCache)
                        {
                            if (!classIDs.ContainsKey(c))
                            {
                                classIDs.Add(c, i++);
                            }
                        }
                    }

                    //RecursiveGetClassIDsData(ref classIDs, node, node._dataSection);

                    HavokClassNode          rootClass = node._dataSection.Children[0] as HavokClassNode;
                    List <HavokSectionNode> sections  =
                        node.Children.Select(x => x as HavokSectionNode)
                        .Where(x => x != node._dataSection).ToList();
                    sections.Add(node._dataSection);

                    writer.WriteStartDocument();
                    {
                        writer.WriteStartElement("hkpackfile");
                        writer.WriteAttributeString("classversion", "11");
                        writer.WriteAttributeString("contentsversion", "hk_2014.1.0-r1");
                        writer.WriteAttributeString("toplevelobject", GetObjectName(classIDs, rootClass));
                        writer.WriteAttributeString("maxpredicate", "21");
                        writer.WriteAttributeString("predicates", "");
                        {
                            foreach (HavokSectionNode s in sections)
                            {
                                writer.WriteStartElement("hksection");
                                writer.WriteAttributeString("name", s.Name == "Classes" ? "__types__" : "__data__");
                                {
                                    for (int x = s._classCache.Count - 1; x >= 0; x--)
                                    {
                                        HavokClassNode c = s._classCache[x];

                                        //HavokCommonArrayNode array = null;
                                        //if (c.Parent is cmPointerNode && c.Parent.Parent is HavokCommonArrayNode)
                                        //    array = c.Parent.Parent as HavokCommonArrayNode;
                                        //else if  (c.Parent is HavokCommonArrayNode)
                                        //    array = c.Parent as HavokCommonArrayNode;
                                        //if (array != null)
                                        //{
                                        //    //ResourceNode[] nodes = array.FindChildrenByClassType(null, typeof(HavokMetaObjectNode));
                                        //    //if (nodes != null && nodes.Length > 0)
                                        //        continue;
                                        //}

                                        writer.WriteStartElement("hkobject");
                                        writer.WriteAttributeString("name", GetObjectName(classIDs, c));
                                        writer.WriteAttributeString("class", SwapName(c._className));
                                        writer.WriteAttributeString("signature", GetSignature(c._className));
                                        {
                                            c.WriteParams(writer, classIDs);
                                        }
                                        writer.WriteEndElement();
                                    }
                                }
                                writer.WriteEndElement();
                            }
                        }
                        writer.WriteEndElement();
                    }
                    writer.WriteEndDocument();
                }
            }
        }