protected void FromXml(XmlReader r, bool loadall)
        {
            string colfilename = "";
            string baseName = WorldFilePath.Substring(0, WorldFilePath.LastIndexOf('\\'));
            do
            {
                r.Read();
            } while ((r.NodeType != XmlNodeType.Element) || !(String.Equals(r.Name, "WorldObjectCollection")));

            while (r.Read())
            {
                // look for the start of an element
                if (r.NodeType == XmlNodeType.Whitespace)
                {
                    continue;
                }
                if (r.NodeType == XmlNodeType.EndElement)
                {
                    break;
                }
                if (r.NodeType == XmlNodeType.Element)
                {
                    switch (r.Name)
                    {
                        case "Road":
                            RoadObject road = new RoadObject(r, this, app);
                            Add(road);
                            break;

                        case "StaticObject":
                            StaticObject obj = new StaticObject(this, app, r);
                            Add(obj);
                            break;
                        case "Waypoint":
                            Waypoint wp = new Waypoint(r, this, app);
                            Add(wp);
                            break;
                        case "Boundary":
                            Boundary b = new Boundary(r, this, app);
                            Add(b);
                            break;
                        case "PointLight":
                            PointLight pl = new PointLight(app, this, app.Scene, r);
                            Add(pl);
                            break;
                        case "TerrainDecal":
                            TerrainDecal d = new TerrainDecal(app, this, r);
                            Add(d);
                            break;
                        case "WorldCollection":
                            string collectionName = null;
                            colfilename = "";
                            for (int i = 0; i < r.AttributeCount; i++)
                            {
                                r.MoveToAttribute(i);
                                switch (r.Name)
                                {
                                    case "Name":
                                        collectionName = r.Value;
                                        break;
                                    case "Filename":
                                        colfilename = r.Value;
                                        break;
                                }
                            }
                            baseName = this.Path;
                            if (!loadall)
                            {
                                if (colfilename != "")
                                {
                                    if (colfilename.EndsWith("~.mwc"))
                                    {
                                        string autofilepath = String.Format("{0}\\{1}", baseName, colfilename);
                                        string normalfilepath = String.Format("{0}\\{1}", baseName, colfilename.Remove(colfilename.LastIndexOf("~"), 1));
                                        if ((File.Exists(autofilepath) && File.Exists(normalfilepath) &&
                                            (new FileInfo(autofilepath)).LastWriteTime < (new FileInfo(normalfilepath).LastWriteTime))
                                            || (!File.Exists(autofilepath) && File.Exists(normalfilepath)))
                                        {
                                            colfilename = colfilename.Remove(filename.LastIndexOf("~"), 1);
                                        }
                                    }
                                    XmlReader childReader = XmlReader.Create(String.Format("{0}\\{1}", baseName, colfilename), app.XMLReaderSettings);
                                    WorldObjectCollection coll = new WorldObjectCollection(childReader, collectionName, this, app, baseName, false);
                                    while (colfilename.Contains("~"))
                                    {
                                        colfilename = colfilename.Remove(colfilename.LastIndexOf("~"),1);
                                    }
                                    coll.Filename = colfilename;
                                    Add(coll);
                                    childReader.Close();
                                }
                                else
                                {
                                    XmlReader childReader = XmlReader.Create(String.Format("{0}\\{1}.mwc", baseName, collectionName), app.XMLReaderSettings);
                                    WorldObjectCollection coll = new WorldObjectCollection(childReader, collectionName, this, app, baseName, false);
                                    coll.Filename = collectionName + ".mwc";
                                    Add(coll);
                                    childReader.Close();
                                }
                            }
                            else
                            {
                                if (colfilename != "")
                                {
                                    if (colfilename.EndsWith("~.mwc"))
                                    {
                                        string autofilepath = String.Format("{0}\\{1}", baseName, colfilename);
                                        string normalfilepath = String.Format("{0}\\{1}", baseName, colfilename.Remove(filename.LastIndexOf("~"), 1));
                                        if ((File.Exists(autofilepath) && File.Exists(normalfilepath) &&
                                            (new FileInfo(autofilepath)).LastWriteTime < (new FileInfo(normalfilepath).LastWriteTime))
                                            || (!File.Exists(autofilepath) && File.Exists(normalfilepath)))
                                        {
                                            colfilename = colfilename.Remove(colfilename.LastIndexOf("~"), 1);
                                        }
                                    }
                                    XmlReader childReader = XmlReader.Create(String.Format("{0}\\{1}", baseName, colfilename), app.XMLReaderSettings);
                                    WorldObjectCollection coll = new WorldObjectCollection(childReader, collectionName, this, app, baseName);
                                    while (colfilename.Contains("~"))
                                    {
                                        colfilename = colfilename.Remove(colfilename.LastIndexOf("~"), 1);
                                    }
                                    coll.Filename = colfilename;
                                    Add(coll);
                                    childReader.Close();
                                }
                                else
                                {
                                    XmlReader childReader = XmlReader.Create(String.Format("{0}\\{1}.mwc", baseName, collectionName), app.XMLReaderSettings);
                                    WorldObjectCollection coll = new WorldObjectCollection(childReader, collectionName, this, app, baseName);
                                    coll.Filename = collectionName + ".mwc";
                                    Add(coll);
                                    childReader.Close();
                                }
                            }

                            r.MoveToElement();

                            break;
                    }
                }
            }

            while(filename.Contains("~"))
            {
                filename = filename.Remove(filename.IndexOf("~"), 1);
            }
        }
示例#2
0
        protected void FromXml(XmlReader r, bool loadall)
        {
            string colfilename = "";
            string baseName    = WorldFilePath.Substring(0, WorldFilePath.LastIndexOf('\\'));

            do
            {
                r.Read();
            } while ((r.NodeType != XmlNodeType.Element) || !(String.Equals(r.Name, "WorldObjectCollection")));

            while (r.Read())
            {
                // look for the start of an element
                if (r.NodeType == XmlNodeType.Whitespace)
                {
                    continue;
                }
                if (r.NodeType == XmlNodeType.EndElement)
                {
                    break;
                }
                if (r.NodeType == XmlNodeType.Element)
                {
                    switch (r.Name)
                    {
                    case "Road":
                        RoadObject road = new RoadObject(r, this, app);
                        Add(road);
                        break;

                    case "StaticObject":
                        StaticObject obj = new StaticObject(this, app, r);
                        Add(obj);
                        break;

                    case "Waypoint":
                        Waypoint wp = new Waypoint(r, this, app);
                        Add(wp);
                        break;

                    case "Boundary":
                        Boundary b = new Boundary(r, this, app);
                        Add(b);
                        break;

                    case "PointLight":
                        PointLight pl = new PointLight(app, this, app.Scene, r);
                        Add(pl);
                        break;

                    case "TerrainDecal":
                        TerrainDecal d = new TerrainDecal(app, this, r);
                        Add(d);
                        break;

                    case "WorldCollection":
                        string collectionName = null;
                        colfilename = "";
                        for (int i = 0; i < r.AttributeCount; i++)
                        {
                            r.MoveToAttribute(i);
                            switch (r.Name)
                            {
                            case "Name":
                                collectionName = r.Value;
                                break;

                            case "Filename":
                                colfilename = r.Value;
                                break;
                            }
                        }
                        baseName = this.Path;
                        if (!loadall)
                        {
                            if (colfilename != "")
                            {
                                if (colfilename.EndsWith("~.mwc"))
                                {
                                    string autofilepath   = String.Format("{0}\\{1}", baseName, colfilename);
                                    string normalfilepath = String.Format("{0}\\{1}", baseName, colfilename.Remove(colfilename.LastIndexOf("~"), 1));
                                    if ((File.Exists(autofilepath) && File.Exists(normalfilepath) &&
                                         (new FileInfo(autofilepath)).LastWriteTime < (new FileInfo(normalfilepath).LastWriteTime)) ||
                                        (!File.Exists(autofilepath) && File.Exists(normalfilepath)))
                                    {
                                        colfilename = colfilename.Remove(filename.LastIndexOf("~"), 1);
                                    }
                                }
                                XmlReader             childReader = XmlReader.Create(String.Format("{0}\\{1}", baseName, colfilename), app.XMLReaderSettings);
                                WorldObjectCollection coll        = new WorldObjectCollection(childReader, collectionName, this, app, baseName, false);
                                while (colfilename.Contains("~"))
                                {
                                    colfilename = colfilename.Remove(colfilename.LastIndexOf("~"), 1);
                                }
                                coll.Filename = colfilename;
                                Add(coll);
                                childReader.Close();
                            }
                            else
                            {
                                XmlReader             childReader = XmlReader.Create(String.Format("{0}\\{1}.mwc", baseName, collectionName), app.XMLReaderSettings);
                                WorldObjectCollection coll        = new WorldObjectCollection(childReader, collectionName, this, app, baseName, false);
                                coll.Filename = collectionName + ".mwc";
                                Add(coll);
                                childReader.Close();
                            }
                        }
                        else
                        {
                            if (colfilename != "")
                            {
                                if (colfilename.EndsWith("~.mwc"))
                                {
                                    string autofilepath   = String.Format("{0}\\{1}", baseName, colfilename);
                                    string normalfilepath = String.Format("{0}\\{1}", baseName, colfilename.Remove(filename.LastIndexOf("~"), 1));
                                    if ((File.Exists(autofilepath) && File.Exists(normalfilepath) &&
                                         (new FileInfo(autofilepath)).LastWriteTime < (new FileInfo(normalfilepath).LastWriteTime)) ||
                                        (!File.Exists(autofilepath) && File.Exists(normalfilepath)))
                                    {
                                        colfilename = colfilename.Remove(colfilename.LastIndexOf("~"), 1);
                                    }
                                }
                                XmlReader             childReader = XmlReader.Create(String.Format("{0}\\{1}", baseName, colfilename), app.XMLReaderSettings);
                                WorldObjectCollection coll        = new WorldObjectCollection(childReader, collectionName, this, app, baseName);
                                while (colfilename.Contains("~"))
                                {
                                    colfilename = colfilename.Remove(colfilename.LastIndexOf("~"), 1);
                                }
                                coll.Filename = colfilename;
                                Add(coll);
                                childReader.Close();
                            }
                            else
                            {
                                XmlReader             childReader = XmlReader.Create(String.Format("{0}\\{1}.mwc", baseName, collectionName), app.XMLReaderSettings);
                                WorldObjectCollection coll        = new WorldObjectCollection(childReader, collectionName, this, app, baseName);
                                coll.Filename = collectionName + ".mwc";
                                Add(coll);
                                childReader.Close();
                            }
                        }

                        r.MoveToElement();

                        break;
                    }
                }
            }

            while (filename.Contains("~"))
            {
                filename = filename.Remove(filename.IndexOf("~"), 1);
            }
        }
        private bool DragCallback(bool accept, Vector3 loc)
        {
            placing = false;

            dragObject.Dispose();

            if (accept)
            {
                location = loc;
                Vector3 scaleVec = new Vector3(scale, scale, scale);
                Vector3 rotVec = new Vector3(0, rotation, 0);
                pointLight = new PointLight(app, parent, scene, name, specular, diffuse, new Vector3(location.x, location.y, location.z));
                parent.Add(pointLight);
                for (int i = app.SelectedObject.Count - 1; i >= 0; i--)
                {
                    app.SelectedObject[i].Node.UnSelect();
                }
                if (pointLight.Node != null)
                {
                    pointLight.Node.Select();
                }
            }
            else
            {
                cancelled = true;
            }

            return true;
        }
        public void Execute()
        {
            if (!cancelled)
            {
                if (placing)
                {
                    // we need to place the object (which is handled asynchronously) before we can create it
                    dragObject = new DisplayObject(name, app, "Drag", app.Scene, app.Assets.assetFromName(app.Config.PointLightMeshName).AssetName, location, new Vector3(1,1,1), new Vector3(0,0,0), null);
                    dragObject.TerrainOffset = app.Config.DefaultPointLightHeight;

                    new DragHelper(app, new DragComplete(DragCallback), dragObject);
                }
                else
                {
                    // object has already been placed, so create it now
                    // only create it if it doesn't exist already
                    if (pointLight == null)
                    {
                        pointLight = new PointLight(app, parent, scene, name, specular, diffuse, location);
                    }
                    parent.Add(pointLight);
                    for (int i = app.SelectedObject.Count - 1; i >= 0; i--)
                    {
                        app.SelectedObject[i].Node.UnSelect();
                    }
                    if (pointLight.Node != null)
                    {
                        pointLight.Node.Select();
                    }
                }
            }
        }
 public void Clone(IWorldContainer copyParent)
 {
     PointLight clone = new PointLight(app, copyParent, scene, name, specular, diffuse, position);
     clone.AttenuationConstant = attenuationConstant;
     clone.AttenuationLinear = attenuationLinear;
     clone.AttenuationQuadratic = attenuationQuadratic;
     clone.AttenuationRange = attenuationRange;
     clone.TerrainOffset = terrainOffset;
     clone.AllowAdjustHeightOffTerrain = allowAdjustHeightOffTerrain;
     copyParent.Add(clone);
 }