예제 #1
0
        public ItemPort GetItemPort(string portName)
        {
            ItemPort itemPort = null;

            foreach (ItemPort ip in itemPorts)
            {
                if (ip.portName == portName)
                {
                    itemPort = ip;
                }
            }
            return(itemPort);
        }
예제 #2
0
 /// <summary>
 /// Load item itemports form dataforge entityclassdefinition
 /// </summary>
 /// <param name="elItemPorts"></param>
 public void LoadItemPorts(XElement elItemPorts)
 {
     foreach (XElement elSItemPortDef in elItemPorts.XPathSelectElements("SItemPortCoreParams/Ports/SItemPortDef"))
     {
         ItemPort itemPort = new ItemPort();
         itemPort.itemName = name;
         if (elSItemPortDef.Attribute("Name") != null)
         {
             itemPort.portName = elSItemPortDef.Attribute("Name").Value;
             XElement elHelper = elSItemPortDef.XPathSelectElement("AttachmentImplementation/SItemPortDefAttachmentImplementationBone/Helper/Helper");
             if (elHelper != null)
             {
                 itemPort.helperName = elHelper.Attribute("Name").Value;
             }
             itemPorts.Add(itemPort);
         }
     }
 }
예제 #3
0
        List <ItemPort> LoadItemPorts(XElement itemsEl)
        {
            List <ItemPort> itemPorts = new List <ItemPort>();

            foreach (XElement el in itemsEl.Elements("Item"))
            {
                ItemPort itemport = new ItemPort();
                if (el.Attribute("portName") != null)
                {
                    itemport.portName = el.Attribute("portName").Value;
                }
                if (el.Attribute("itemName") != null)
                {
                    itemport.itemName = el.Attribute("itemName").Value;
                }
                if (el.Attribute("tag") != null)
                {
                    itemport.tag = el.Attribute("tag").Value;
                }
                if (el.Attribute("wear") != null)
                {
                    itemport.wear = el.Attribute("wear").Value;
                }
                if (el.Attribute("dirt") != null)
                {
                    itemport.dirt = el.Attribute("dirt").Value;
                }

                if (el.Element("Items") != null)
                {
                    itemport.itemPorts.AddRange(LoadItemPorts(el.Element("Items")));
                }

                itemPorts.Add(itemport);
            }

            return(itemPorts);
        }
        public XElement addObjects(XElement el, Part part, Loadout loadout, string parentid, string partid, string layerid)
        {
            XElement Object = el;

            if (part.partClass == "AnimatedJoint")
            {
                partid      = parentid;
                Object.Name = "Node";
                Object.Add(new XAttribute("Name", part.name));
                Object.Add(new XAttribute("LinkedTo", parentid));
                Object.Add(new XAttribute("Id", partid));
            }

            if (part.partClass == "Animated")
            {
                if (i != 0)
                {
                    Object.Add(new XAttribute("LinkedTo", parentid));
                }
                Object.Add(new XAttribute("Name", part.name));
                Object.Add(new XAttribute("Id", partid));
                Object.Add(new XAttribute("LayerGUID", layerid));
                Object.Add(new XAttribute("Geometry", part.animatedFilename));
                Object.Add(new XAttribute("Layer", "Main"));
                Object.Add(new XAttribute("Type", "GeomEntity"));
                Object.Add(new XAttribute("EntityClass", "GeomEntity"));
                Object.Add(new XAttribute("LodRatio", "10"));
                if (part.helper != "")
                {
                    Object.Add(new XAttribute("AttachmentType", "CharacterBone"));
                }
                if (part.helper != "")
                {
                    Object.Add(new XAttribute("AttachmentTarget", part.helper));
                }

                XElement Components = new XElement("Components");
                XElement Component  = new XElement("Component");
                Component.Add(new XAttribute("typeId", "ec0cd266-a6d1-4774-b499-690bd6fb61ee"));
                Component.Add(new XAttribute("guid", genID()));
                Component.Add(new XAttribute("CryXmlVersion", "2"));
                Component.Add(new XAttribute("Geometry", part.animatedFilename));
                Component.Add(new XAttribute("Physicalize", "ePhysicalizationType_Static"));
                Component.Add(new XAttribute("ReceiveCollisionEvents", "false"));
                Component.Add(new XAttribute("Mass", "1"));
                Component.Add(new XAttribute("Animation", ""));
                Component.Add(new XAttribute("Speed", "1"));
                Component.Add(new XAttribute("Loop", "true"));
                Components.Add(Component);
                Object.Add(Components);
                i++;
            }
            if (part.partClass == "ItemPort")
            {
                ItemPort itemport = loadout.GetItemPort(part.name);
                Item     item     = exporter.GetItem(itemport.itemName);
                if (item.geometry != "" && item.itemclass != "VehicleItemMultiLight" && allowedItemClasses.Any(item.itemclass.Contains))
                {
                    Object.Add(new XAttribute("Name", part.name));
                    Object.Add(new XAttribute("LinkedTo", parentid));
                    Object.Add(new XAttribute("Id", partid));
                    Object.Add(new XAttribute("LayerGUID", layerid));
                    Object.Add(new XAttribute("Geometry", item.geometry));
                    Object.Add(new XAttribute("AttachmentType", "CharacterBone"));
                    Object.Add(new XAttribute("AttachmentTarget", itemport.portName));
                    Object.Add(new XAttribute("Layer", "Main"));
                    Object.Add(new XAttribute("Type", "GeomEntity"));
                    Object.Add(new XAttribute("EntityClass", "GeomEntity"));
                    Object.Add(new XAttribute("LodRatio", "10"));

                    XElement Components = new XElement("Components");
                    XElement Component  = new XElement("Component");
                    Component.Add(new XAttribute("typeId", "ec0cd266-a6d1-4774-b499-690bd6fb61ee"));
                    Component.Add(new XAttribute("guid", genID()));
                    Component.Add(new XAttribute("CryXmlVersion", "2"));
                    Component.Add(new XAttribute("Geometry", item.geometry));
                    Component.Add(new XAttribute("Physicalize", "ePhysicalizationType_Static"));
                    Component.Add(new XAttribute("ReceiveCollisionEvents", "false"));
                    Component.Add(new XAttribute("Mass", "1"));
                    Component.Add(new XAttribute("Animation", ""));
                    Component.Add(new XAttribute("Speed", "1"));
                    Component.Add(new XAttribute("Loop", "true"));
                    Components.Add(Component);
                    Object.Add(Components);

                    foreach (ItemPort ip in itemport.itemPorts)
                    {
                        Item     item2 = exporter.GetItem(ip.itemName);
                        XElement obj2  = new XElement("Object");
                        obj2.Add(new XAttribute("Name", ip.portName));
                        obj2.Add(new XAttribute("LinkedTo", partid));
                        obj2.Add(new XAttribute("Id", genID()));
                        obj2.Add(new XAttribute("LayerGUID", layerid));
                        obj2.Add(new XAttribute("Geometry", item2.geometry));
                        obj2.Add(new XAttribute("AttachmentType", "CharacterBone"));
                        obj2.Add(new XAttribute("AttachmentTarget", ip.portName));
                        obj2.Add(new XAttribute("Layer", "Main"));
                        obj2.Add(new XAttribute("Type", "GeomEntity"));
                        obj2.Add(new XAttribute("EntityClass", "GeomEntity"));
                        obj2.Add(new XAttribute("LodRatio", "10"));

                        XElement Components2 = new XElement("Components");
                        XElement Component2  = new XElement("Component");
                        Component2.Add(new XAttribute("typeId", "ec0cd266-a6d1-4774-b499-690bd6fb61ee"));
                        Component2.Add(new XAttribute("guid", genID()));
                        Component2.Add(new XAttribute("CryXmlVersion", "2"));
                        Component2.Add(new XAttribute("Geometry", item2.geometry));
                        Component2.Add(new XAttribute("Physicalize", "ePhysicalizationType_Static"));
                        Component2.Add(new XAttribute("ReceiveCollisionEvents", "false"));
                        Component2.Add(new XAttribute("Mass", "1"));
                        Component2.Add(new XAttribute("Animation", ""));
                        Component2.Add(new XAttribute("Speed", "1"));
                        Component2.Add(new XAttribute("Loop", "true"));
                        Components2.Add(Component2);
                        obj2.Add(Components2);

                        Object.Add(obj2);
                    }
                }
                if (item.itemclass == "VehicleItemMultiLight")
                {
                    foreach (AttachmentPoint at in part.attachmentPoints)
                    {
                        //Console.WriteLine(at.name);
                        XElement obj1  = new XElement("Object");
                        string   entid = genID();
                        obj1.Add(new XAttribute("Type", "GeomEntity"));
                        obj1.Add(new XAttribute("Name", at.bone));
                        obj1.Add(new XAttribute("LinkedTo", parentid));
                        obj1.Add(new XAttribute("Id", entid));
                        obj1.Add(new XAttribute("LayerGUID", layerid));
                        obj1.Add(new XAttribute("AttachmentType", "CharacterBone"));
                        obj1.Add(new XAttribute("AttachmentTarget", at.bone));
                        obj1.Add(new XAttribute("Layer", "Main"));
                        obj1.Add(new XAttribute("EntityClass", "GeomEntity"));
                        Object.Add(obj1);

                        //PrefabAttachment prefabAtt = item.getAttachment(at.name);
                        //XElement obj2 = getPrefab(prefabAtt.prefabLibrary, prefabAtt.prefabName);
                        XElement         obj2       = new XElement("Object");
                        PrefabAttachment prefabAtt  = item.getAttachment(at.name);
                        string           PrefabGUID = "";
                        try
                        {
                            PrefabGUID = getPrefabGUID(prefabAtt.prefabLibrary, prefabAtt.prefabName);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("Error:");
                            Console.WriteLine("prefabLibrary: {0} prefabName: {1} attachmentPoint: {2}", prefabAtt.prefabLibrary, prefabAtt.prefabName, prefabAtt.attachmentPoint);
                            Console.WriteLine("at.name: {0}", at.name);
                            Console.WriteLine("item.name: {0}", item.name);
                            //throw e;
                        }
                        string prefid        = genID();
                        string prefablibname = Path.GetFileNameWithoutExtension(prefabAtt.prefabLibrary);
                        obj2.Add(new XAttribute("Type", "Prefab"));
                        obj2.Add(new XAttribute("Name", at.name));
                        obj2.Add(new XAttribute("LinkedTo", entid));
                        obj2.Add(new XAttribute("Id", prefid));
                        obj2.Add(new XAttribute("LayerGUID", layerid));
                        obj2.Add(new XAttribute("Layer", "Main"));
                        obj2.Add(new XAttribute("PrefabGUID", PrefabGUID));
                        obj2.Add(new XAttribute("PrefabLibrary", prefablibname));
                        obj2.Add(new XAttribute("PrefabName", prefabAtt.prefabName));
                        prefablib = prefabAtt.prefabLibrary;
                        prefabs.Add(getPrefab(prefabAtt.prefabLibrary, prefabAtt.prefabName));
                        Object.Add(obj2);
                    }
                }
            }

            foreach (Part pr in part.parts)
            {
                XElement obj = new XElement("Object");
                obj = addObjects(obj, pr, loadout, partid, genID(), layerid);
                //if (obj.Attribute("Name") != null)
                Object.Add(obj);
            }

            return(Object);
        }