コード例 #1
0
        void MakePrefabObjects()
        {
            foreach (Objects obj in objects)
            {
                foreach (Object_Type1 geomObj in obj.GetObject_Type1())
                {
                    PrefabObject prefabObj = new PrefabObject();

                    //////////////////////////
                    //Console.WriteLine(br.BaseStream.Position);
                    double     x     = geomObj.pos.x;
                    double     y     = geomObj.pos.y;
                    double     z     = geomObj.pos.z;
                    int        id    = geomObj.id;
                    Quaternion quat  = geomObj.quaternion;
                    Vector3    scale = geomObj.scale;
                    prefabObj.Transform34 = geomObj.rotMatrix34;
                    //quat = ValidateQuaternion(quat);
                    string objectname = Path.GetFileNameWithoutExtension(geomObj.path);
                    prefabObj.Name     = objectname;
                    prefabObj.Geometry = geomObj.path;
                    prefabObj.Pos      = (float)x + "," + (float)y + "," + (float)z;
                    prefabObj.Rotate   = quat.W + "," + quat.X + "," + quat.Y + "," + quat.Z;
                    prefabObj.Scale    = scale.X + "," + scale.Y + "," + scale.Z;
                    //Console.WriteLine(prefabObj.Geometry);
                    prefabObj.EntityClass = "GeomEntity";
                    byte[] asciiBytes = Encoding.ASCII.GetBytes(objectname);
                    prefabObj.Layer = objectname;
                    //prefabObj.LayerGUID = "3675a837-e15f-dfa0-db3a-"+ bytesToString(asciiBytes);
                    prefabObj.LayerGUID = GuidUtility.GenLayerID("sdf33" + objectname + prefabObj.Geometry + prefabObj.Pos);
                    prefabObj.Id        = GuidUtility.GenPrefabID("sdf34gffg" + objectname + prefabObj.Geometry + prefabObj.Pos);

                    //ignore %level% geoms
                    if (!prefabObj.Geometry.StartsWith("%level%", StringComparison.OrdinalIgnoreCase))
                    {
                        prefabObjects.Add(prefabObj);
                    }
                }
            }
            //foreach (AreaShapes areaShape in areaShapes)
            //{
            //    foreach (PrefabObject prefabObj in areaShape.GetPrefabObjects())
            //    {
            //        prefabObjects.Add(prefabObj);
            //    }
            //}
        }
コード例 #2
0
        XElement AddObjectsFromObjectContainers(XElement el, List <ObjectContainer> objCons, string parentid, string layerid)
        {
            XElement Object = el;

            layerid = GuidUtility.GenLayerID("Main");
            string layerName = "Main";
            List <ObjectContainer> objContainers = new List <ObjectContainer>();

            foreach (ObjectContainer oc in objCons)
            {
                objContainers.Add(oc);
                foreach (Child child in oc.childs)
                {
                    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.GetAsGeomEntity(parentid, layerid, entid, componentGuid, portName, layerName, lodRatio);

                        Object.Add(obj1);

                        foreach (PrefabObject childPo in po.attachments)
                        {
                            string childentid         = GuidUtility.GenID();
                            string childcomponentGuid = GuidUtility.GenID();

                            XElement childObj = childPo.GetAsGeomEntity(entid, layerid, childentid, childcomponentGuid, childPo.AttachmentTarget, layerName, lodRatio);

                            Object.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);

                        Object.Add(obj1);
                    }
                    if (po.EntityClass == "LightGroup")
                    {
                        layerid   = GuidUtility.GenLayerID("Main");
                        layerName = "Main";
                        XElement obj1 = po.GetAsFlowgraphEntity(parentid, layerid, layerName, oc.portName);

                        Object.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);

                                Object.Add(obj1);
                            }
                            if (lt.EntityClass == "EnvironmentLight")
                            {
                                obj1 = po.GetAsEnvironmentLight(i, layerid, layerName);

                                Object.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);

                        Object.Add(obj1);

                        layerid   = GuidUtility.GenLayerID("Main");
                        layerName = "Main";
                        string entid = GuidUtility.GenID();
                        obj1 = po.GetAsEnvironmentLight2(entid, layerid, layerName);

                        Object.Add(obj1);
                    }
                    if (po.EntityClass == "Light")
                    {
                        layerid   = GuidUtility.GenLayerID("Main");
                        layerName = "Main";
                        XElement obj1   = new XElement("Object");
                        string   entid  = GuidUtility.GenID();
                        string   prefid = GuidUtility.GenID();

                        obj1.Add(new XAttribute("Name", po.Name));
                        obj1.Add(new XAttribute("LinkedTo", parentid));
                        obj1.Add(new XAttribute("Id", entid));
                        obj1.Add(new XAttribute("LayerGUID", layerid));
                        obj1.Add(new XAttribute("Layer", layerName));
                        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);

                        Object.Add(obj1);
                    }
                }

                //foreach (Part part in ship.parts)
                //{
                //    if (part.attachmentPoints != null)
                //    {
                //        List<PrefabObject> prefObjects = oc.GetPrefabObjectsByAttachmentName(p);
                //    }
                //}
            }

            return(Object);
        }
コード例 #3
0
        XElement AddPrefabsFromObjectContainers(XElement el, ShipImplementation ship, string parentid, string layerid)
        {
            XElement Object = el;

            layerid = GuidUtility.GenLayerID("Main");
            foreach (ObjectContainer oc in ship.objectContainers)
            {
                string layername = oc.name;
                //layerid = stringToNumbers(layername);
                //Console.WriteLine(at.name);
                XElement obj1   = new XElement("Object");
                string   entid  = GuidUtility.GenID("ent" + ship.name + oc.name + parentid);
                string   prefid = GuidUtility.GenID("entpref" + ship.name + oc.name + parentid);
                obj1.Add(new XAttribute("Type", "Entity"));
                obj1.Add(new XAttribute("Name", oc.portName));
                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", oc.portName));
                obj1.Add(new XAttribute("Layer", layername));
                obj1.Add(new XAttribute("EntityClass", "FlowgraphEntity"));
                Object.Add(obj1);

                //PrefabAttachment prefabAtt = item.getAttachment(at.name);
                //XElement obj2 = getPrefab(prefabAtt.prefabLibrary, prefabAtt.prefabName);
                XElement obj2          = new XElement("Object");
                string   id            = GuidUtility.GenID("entid" + ship.name + oc.name + parentid);
                string   prefablibname = ship.name;
                obj2.Add(new XAttribute("Type", "Prefab"));
                obj2.Add(new XAttribute("Name", oc.name));
                obj2.Add(new XAttribute("LinkedTo", entid));
                obj2.Add(new XAttribute("Id", id));
                obj2.Add(new XAttribute("LayerGUID", layerid));
                obj2.Add(new XAttribute("Layer", layername));
                obj2.Add(new XAttribute("PrefabGUID", prefid));
                obj2.Add(new XAttribute("PrefabLibrary", prefablibname));
                obj2.Add(new XAttribute("PrefabName", "ObjectContainers." + oc.name));
                //prefablib = prefabAtt.prefabLibrary;
                prefabs.Add(oc.GetAsPrefab(prefablibname, layerid, prefid, layername));
                Object.Add(obj2);

                foreach (Child child in oc.childs)
                {
                    ObjectContainer ocChild = child.Soc;
                    // Console.WriteLine("ading child {0}", ocChild.name);
                    prefid = GuidUtility.GenID("entprefchild" + ship.name + ocChild.name + parentid);
                    XElement obj3           = new XElement("Object");
                    string   id2            = GuidUtility.GenID("entprefchild2sdfsd" + ship.name + ocChild.name + parentid);
                    string   prefablibname2 = ship.name;
                    obj3.Add(new XAttribute("Type", "Prefab"));
                    obj3.Add(new XAttribute("Name", ocChild.name));
                    obj3.Add(new XAttribute("LinkedTo", entid));
                    obj3.Add(new XAttribute("Id", id2));
                    obj3.Add(new XAttribute("LayerGUID", layerid));
                    obj3.Add(new XAttribute("Layer", layername));
                    obj3.Add(new XAttribute("PrefabGUID", prefid));
                    obj3.Add(new XAttribute("PrefabLibrary", prefablibname2));
                    obj3.Add(new XAttribute("PrefabName", "ObjectContainers." + ocChild.name));
                    //prefablib = prefabAtt.prefabLibrary;
                    prefabs.Add(ocChild.GetAsPrefab(prefablibname2, layerid, prefid, layername));
                    Object.Add(obj3);
                }
            }
            return(Object);
        }