//long method i know i will shorten it soon
        public static void SaveLevel(EditableLevel level)
        {
            XmlWriterSettings settings = new XmlWriterSettings();
              settings.Indent = true;
              String name = Configuration.UserDataPath + Path.DirectorySeparatorChar + "Level" + Path.DirectorySeparatorChar + "Custom.xml";

              XmlWriter writer = XmlWriter.Create(name, settings);
              writer.WriteStartDocument();
              writer.WriteStartElement("level");
              writer.WriteAttributeString("name", "Custom Level");
              writer.WriteAttributeString("balls", level.Attempts.ToString());
              writer.WriteAttributeString("par-seconds", level.ParTime.ToString());
              writer.WriteAttributeString("toolbox-types", "RBHV");
              foreach (Platform platform in level.MoveablePlatforms) {
            writer.WriteStartElement("platform");
            writer.WriteAttributeString("breakable", platform.Breakable.ToString());
            writer.WriteAttributeString("x", platform.Origin.X.ToString());
            writer.WriteAttributeString("y", platform.Origin.Y.ToString());
            writer.WriteAttributeString("width", platform.Width.ToString());
            writer.WriteAttributeString("height", platform.Height.ToString());
            writer.WriteEndElement();
              }
              foreach (Platform platform in level.Platforms) {
            writer.WriteStartElement("platform");
            writer.WriteAttributeString("breakable", platform.Breakable.ToString());
            writer.WriteAttributeString("x", platform.Origin.X.ToString());
            writer.WriteAttributeString("y", platform.Origin.Y.ToString());
            writer.WriteAttributeString("width", platform.Width.ToString());
            writer.WriteAttributeString("height", platform.Height.ToString());
            writer.WriteEndElement();
              }
              writer.WriteStartElement("goal");
              writer.WriteAttributeString("x", level.Goal.Origin.X.ToString());
              writer.WriteAttributeString("y", level.Goal.Origin.Y.ToString());
              writer.WriteEndElement();

              writer.WriteStartElement("launcher");
              writer.WriteAttributeString("x", level.Launcher.Position.X.ToString());
              writer.WriteAttributeString("y", level.Launcher.Position.Y.ToString());
              writer.WriteEndElement();

              foreach(DeathTrap deathTrap in level.DeathTraps){
            writer.WriteStartElement("deathtrap");
            writer.WriteAttributeString("x", deathTrap.Origin.X.ToString());
            writer.WriteAttributeString("y", deathTrap.Origin.Y.ToString());
            writer.WriteEndElement();
              }

              foreach (Treasure treasure in level.Treasures) {
            writer.WriteStartElement("treasure");
            writer.WriteAttributeString("x", treasure.Origin.X.ToString());
            writer.WriteAttributeString("y", treasure.Origin.Y.ToString());
            writer.WriteEndElement();
              }

              writer.WriteEndDocument();
              writer.Flush();
              writer.Close();
        }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="topLevel"></param>
 /// <param name="editableLevel"></param>
 /// <param name="levelName"></param>
 public PauseMenuScreen(TopLevelModel topLevel, EditableLevel editableLevel, string levelName)
     : base(topLevel)
 {
     base.TransitionOnTime = TimeSpan.FromSeconds(0.5);
       base.TransitionOffTime = TimeSpan.FromSeconds(0.5);
       EditorMode = true;
       custom = editableLevel.Custom;
       this.restartable = editableLevel;
       LevelName = levelName;
 }
        /// <summary>
        /// Sets up a hard-coded level. This is for testing purposes.
        /// </summary>
        internal EditableLevel LoadLevel(string level)
        {
            EditableLevel simulation = new EditableLevel(LevelLoader.Load(LevelName, content), content);
              simulation.Background = content.Load<Texture2D>("Texture/GameScreen");

              return simulation;
        }
        /// <summary>
        /// Load graphics content for the game.
        /// </summary>
        public override void LoadContent(ContentManager shared)
        {
            base.LoadContent(shared);

              // Create a new ContentManager so that all level data is flushed
              // from the cache after the level ends.
              if (content == null)
            content = new ContentManager(shared.ServiceProvider, "Content");

              font = shared.Load<SpriteFont>("Font/textfont");
              launchToolbox = toolboxLaunched = false;
              // Create the hard-coded level.
              editableLevel = LoadLevel(LevelName);

              foundCollision = false;
        }
        /// <summary>
        /// Load graphics content for the game.
        /// </summary>
        public override void LoadContent(ContentManager shared)
        {
            base.LoadContent(shared);

              // Create a new ContentManager so that all level data is flushed
              // from the cache after the level ends.
              if (content == null)
            content = new ContentManager(shared.ServiceProvider, "Content");

              font = shared.Load<SpriteFont>("Font/textfont");
              launchToolbox = toolboxLaunched = false;
              String name = Configuration.UserDataPath + Path.DirectorySeparatorChar + "Level" + Path.DirectorySeparatorChar + "Custom.xml";

              // Create the hard-coded level.
              editableLevel = new EditableLevel(LevelLoader.Load(name, shared), shared);
              editableLevel.AdditionsLeft = 30;
              editableLevel.ParTime = 60;
              editableLevel.Custom = true;
              foundCollision = false;
        }
        /// <summary>
        /// Constructor that includes a message to be displayed and Boolean to determine if more platforms can be added
        /// </summary>
        public ToolboxScreen(TopLevelModel topLevel, EditableLevel level, string message, bool limitReached)
            : base(topLevel)
        {
            this._message = message;
              _cantAdd = limitReached;
              //initializa the position of regular platforms
              _platforms = new List<Rectangle>();
              editableLevel = level;

              if (level.TypesAllowed.Contains("R")) {
            if (level.TypesAllowed.Contains("H")) {
              _platforms.Add(new Rectangle(100, 130, 100, 25));
              _platforms.Add(new Rectangle(300, 130, 150, 25));
              _platforms.Add(new Rectangle(500, 130, 200, 25));
            }
            if (level.TypesAllowed.Contains("V")) {
              _platforms.Add(new Rectangle(100, 210, 25, 100));
              _platforms.Add(new Rectangle(300, 210, 25, 150));
              _platforms.Add(new Rectangle(500, 210, 25, 200));
            }
              }
              //Initializes the position of breakable platforms.
              _breakablePlatforms = new List<Rectangle>();
              if (level.TypesAllowed.Contains("B")) {
            if (level.TypesAllowed.Contains("H")) {
              _breakablePlatforms.Add(new Rectangle(100, 160, 100, 25));
              _breakablePlatforms.Add(new Rectangle(300, 160, 150, 25));
              _breakablePlatforms.Add(new Rectangle(500, 160, 200, 25));
            }
            if (level.TypesAllowed.Contains("V")) {
              _breakablePlatforms.Add(new Rectangle(175, 210, 25, 100));
              _breakablePlatforms.Add(new Rectangle(425, 210, 25, 150));
              _breakablePlatforms.Add(new Rectangle(675, 210, 25, 200));
            }
              }

              base.IsPopup = true;
              base.TransitionOnTime = TimeSpan.FromSeconds(0.2);
              base.TransitionOffTime = TimeSpan.FromSeconds(0.2);
        }