XElement AddObjectsFromObjectContainers(XElement el, ObjectContainer objCon, string parentid, string layerid) { XElement elObject = el; layerid = GuidUtility.GenLayerID("Main"); string layerName = "Main"; List <ObjectContainer> objContainers = new List <ObjectContainer>(); objContainers.Add(objCon); foreach (Child child in objCon.childs) { if (!child.IsExternal()) { objContainers.Add(child.Soc); } } foreach (ObjectContainer oc in objContainers) { string portName = oc.portName; foreach (PrefabObject po in oc.prefabObjects) { if (po.Geometry != null) { layerid = GuidUtility.GenLayerID("Main"); layerName = "Main"; //string layerName = oc.name; //string entid = GuidUtility.GenID("ent" + parentid +oc.name+po.Name+ po.Geometry); //string compGuid = GuidUtility.GenID("entcomp" + parentid + oc.name + po.Name + po.Geometry); string entid = GuidUtility.GenID(); string componentGuid = GuidUtility.GenID(); //string prefid = GuidUtility.GenID("entpref" + parentid + oc.name + po.Name+ po.Geometry); XElement obj1 = po.GetAsEntityWithComponent(parentid, layerid, entid, componentGuid, portName, layerName, lodRatio); elObject.Add(obj1); foreach (PrefabObject childPo in po.attachments) { string childentid = GuidUtility.GenID(); string childcomponentGuid = GuidUtility.GenID(); XElement childObj = childPo.GetAsEntityWithComponent(entid, layerid, childentid, childcomponentGuid, childPo.AttachmentTarget, layerName, lodRatio); elObject.Add(childObj); } } if (po.EntityClass == "AnimObject") { layerid = GuidUtility.GenLayerID("Main"); layerName = "Main"; string entid = GuidUtility.GenID(); string componentGuid = GuidUtility.GenID(); XElement obj1 = po.GetAsAnimObject(parentid, layerid, entid, componentGuid, portName, layerName, lodRatio); elObject.Add(obj1); } if (po.EntityClass == "LightGroup") { layerid = GuidUtility.GenLayerID("Main"); layerName = "Main"; XElement obj1 = po.GetAsFlowgraphEntity(parentid, layerid, layerName, oc.portName); elObject.Add(obj1); int i = 0; //lights and probes (enveroinmentlight) foreach (Light lt in po.lights) { if (lt.EntityClass == "Light") { obj1 = po.GetAsLight(i, layerid, layerName); elObject.Add(obj1); } if (lt.EntityClass == "EnvironmentLight") { obj1 = po.GetAsEnvironmentLight(i, layerid, layerName); elObject.Add(obj1); } i++; } } //if (po.Type == "VisArea") //{ // layerid = GuidUtility.GenLayerID("Main"); // layerName = "Main"; // string entid = GuidUtility.GenID(); // XElement obj1 = po.GetAsVisArea(entid, layerid, layerName); // Object.Add(obj1); //} //if (po.Type == "Portal") //{ // layerid = GuidUtility.GenLayerID("Main"); // layerName = "Main"; // string entid = GuidUtility.GenID(); // XElement obj1 = po.GetAsPortal(entid, layerid, layerName); // Object.Add(obj1); //} if (po.Type == "EnvironmentLight") { layerid = GuidUtility.GenLayerID("Main"); layerName = "Main"; XElement obj1 = po.GetAsFlowgraphEntity(parentid, layerid, layerName, oc.portName); elObject.Add(obj1); layerid = GuidUtility.GenLayerID("Main"); layerName = "Main"; string entid = GuidUtility.GenID(); obj1 = po.GetAsEnvironmentLight2(entid, layerid, layerName); elObject.Add(obj1); } if (po.EntityClass == "Light") { string layername = oc.name; XElement obj1 = new XElement("Object"); string entid = GuidUtility.GenID(); string prefid = GuidUtility.GenID(); obj1.Add(new XAttribute("Name", po.Name)); if (parentid != "") { obj1.Add(new XAttribute("LinkedTo", parentid)); } obj1.Add(new XAttribute("Id", entid)); obj1.Add(new XAttribute("LayerGUID", layerid)); obj1.Add(new XAttribute("Layer", "Main")); if (po.Pos != null) { obj1.Add(new XAttribute("Pos", po.Pos)); } else { obj1.Add(new XAttribute("Pos", "0,0,0")); } if (po.Rotate != null) { obj1.Add(new XAttribute("Rotate", po.Rotate)); } obj1.Add(new XAttribute("Type", "Entity")); obj1.Add(new XAttribute("EntityClass", "Light")); obj1.Add(new XAttribute("ColorRGB", "65535")); obj1.Add(po.Properties); elObject.Add(obj1); } } //foreach (Part part in ship.parts) //{ // if (part.attachmentPoints != null) // { // List<PrefabObject> prefObjects = oc.GetPrefabObjectsByAttachmentName(p); // } //} } foreach (Child child in objCon.childs) { if (child.IsExternal()) { layerid = GuidUtility.GenLayerID("Main"); layerName = "Main"; XElement obj1root = child.GetAsFlowgraphEntity(parentid, layerid, layerName, ""); elObject.Add(obj1root); elObject = AddObjectsFromObjectContainers(elObject, child.Soc, child.Guid, layerid); } } return(elObject); }
void MakePrefab() { XDocument doc = new XDocument(); string prefLibName = objectContainer.SocpakPath; prefLibName = prefLibName.TrimStart("./data/".ToCharArray()); prefLibName = prefLibName.Replace("\\", "/"); prefLibName = prefLibName.TrimEnd(".socpak".ToCharArray()); prefLibName = prefLibName.TrimEnd(".soc".ToCharArray()); //./data/ObjectContainers\AC\Area18\area18.socpak //prefLibName = ship.GetVehicleType() + "/" + ship.GetManufacturer() + "/" + prefLibName; XElement PrefabsLibrary = new XElement("PrefabsLibrary"); PrefabsLibrary.Add(new XAttribute("Name", prefLibName)); string prefabName = Path.GetFileNameWithoutExtension(objectContainer.SocpakPath); string prefabId = GuidUtility.GenPrefabID(prefLibName); XElement Prefab = new XElement("Prefab"); Prefab.Add(new XAttribute("Name", prefabName)); Prefab.Add(new XAttribute("Id", prefabId)); Prefab.Add(new XAttribute("Library", prefLibName)); XElement Objects = new XElement("Objects"); XElement Object = new XElement("Object"); string partid = GuidUtility.GenID(); string layerid = GuidUtility.GenID(); string parentid = ""; //parentid = partid; Object = AddObjectsFromObjectContainers(Object, objectContainer, parentid, layerid); Objects.Add(Object); XElement ObjectsNew = new XElement("Objects"); foreach (XElement obj in Objects.Descendants("Object")) { XElement ObjectNew = new XElement("Object"); //ObjectNew.Add(new XElement("Properties")); if (obj.Element("Properties") != null) { ObjectNew.Add(obj.Element("Properties")); } foreach (XAttribute atr in obj.Attributes()) { ObjectNew.Add(atr); } if (obj.Element("Components") != null) { ObjectNew.Add(obj.Element("Components")); } if (obj.Element("Points") != null) { ObjectNew.Add(obj.Element("Points")); } if (ObjectNew.Attribute("Name") != null) { ObjectsNew.Add(ObjectNew); } } Prefab.Add(ObjectsNew); PrefabsLibrary.Add(Prefab); doc.Add(PrefabsLibrary); xmlDoc = doc; xml = doc.ToString(); }
public PrefabObject GetGeomAsPrefabObject(List <Item> itemsList) { PrefabObject prefabObj = null; if (propertiesDataCore != null) { prefabObj = new PrefabObject(); prefabObj.Id = GuidUtility.GenID(); prefabObj.Name = Name; prefabObj.Layer = Layer; prefabObj.LayerGUID = LayerGUID; if (Pos != null) { prefabObj.Pos = Pos; } if (Rotate != null) { prefabObj.Rotate = Rotate; } if (Scale != null) { prefabObj.Scale = Scale; } if (Material != null) { prefabObj.Material = Material; } if (Entity.Attribute("Geometry") != null) { prefabObj.Geometry = Entity.Attribute("Geometry").Value; prefabObj.Type = "GeomEntity"; prefabObj.EntityClass = "GeomEntity"; } else if (propertiesDataCore.Geometry != "") { prefabObj.Geometry = propertiesDataCore.Geometry; prefabObj.Type = "GeomEntity"; prefabObj.EntityClass = "GeomEntity"; if (propertiesDataCore.Material != "") { prefabObj.Material = propertiesDataCore.Material; } if (Material != null) { prefabObj.Material = Material; } } else if (propertiesDataCore.Loadout != null) { Item entityItem = null; foreach (Item it in itemsList) { if (it.name == EntityClass) { entityItem = it; } } if (entityItem != null) { if (entityItem.geometry != "") { prefabObj.Geometry = entityItem.geometry; prefabObj.Type = "GeomEntity"; prefabObj.EntityClass = "GeomEntity"; foreach (ItemPort loadoutItemPort in propertiesDataCore.Loadout.itemPorts) { //Item childItem = exporter.GetItem(loadoutItemPort.itemName); Item childItem = null; foreach (Item it in itemsList) { if (it.name == loadoutItemPort.itemName) { childItem = it; } } if (childItem != null) { if (childItem.geometry != "") { PrefabObject childObj = new PrefabObject(); ItemPort targetItemPort = entityItem.GetItemPort(loadoutItemPort.portName); if (targetItemPort != null) { string targetJointName = targetItemPort.helperName; childObj.Geometry = childItem.geometry; childObj.Id = GuidUtility.GenID(); childObj.Name = loadoutItemPort.itemName; childObj.Layer = Layer; childObj.LayerGUID = LayerGUID; childObj.Pos = "0,0,0"; childObj.Rotate = "1,0,0,0"; childObj.Type = "GeomEntity"; childObj.EntityClass = "GeomEntity"; childObj.ParentId = prefabObj.Id; childObj.AttachmentType = "CharacterBone"; if (targetJointName != null) { childObj.AttachmentTarget = targetJointName; } else { childObj.AttachmentTarget = targetItemPort.portName; } prefabObj.attachments.Add(childObj); } } } } } } } else { Item entityItem = null; foreach (Item it in itemsList) { if (it.name == EntityClass) { entityItem = it; } } if (entityItem != null) { if (entityItem.geometry != "") { prefabObj.Geometry = entityItem.geometry; prefabObj.Type = "GeomEntity"; prefabObj.EntityClass = "GeomEntity"; prefabObj.Name = Name; prefabObj.Layer = Layer; prefabObj.LayerGUID = LayerGUID; if (Pos != null) { prefabObj.Pos = Pos; } if (Rotate != null) { prefabObj.Rotate = Rotate; } if (Scale != null) { prefabObj.Scale = Scale; } if (Material != null) { prefabObj.Material = Material; } } } } } else { if (EntityClass == "AnimObject") { prefabObj = new PrefabObject(); prefabObj.Id = GuidUtility.GenID(); prefabObj.Type = "AnimObject"; prefabObj.EntityClass = "AnimObject"; prefabObj.Name = Name; prefabObj.Layer = Layer; prefabObj.LayerGUID = LayerGUID; if (Pos != null) { prefabObj.Pos = Pos; } if (Rotate != null) { prefabObj.Rotate = Rotate; } if (Scale != null) { prefabObj.Scale = Scale; } if (Material != null) { prefabObj.Material = Material; } prefabObj.Properties = Properties; } if (EntityClass == "GeomEntity") { } } //delete %level% geoms if (prefabObj != null) { if (prefabObj.Geometry != null) { if (prefabObj.Geometry.StartsWith("%level%", StringComparison.OrdinalIgnoreCase)) { prefabObj.Geometry = null; } } } return(prefabObj); }