public static SpawnPoint fromXML(XmlNode node)
 {
     SpawnPoint point = new SpawnPoint();
     point.fromNode = node;
     foreach (XmlNode itemChild in node)
         if (itemChild.Name.Equals("loc"))
         {
             string[] locStr = itemChild.FirstChild.Value.Split(',');
             point.loc = new Vector2(float.Parse(locStr[0]), float.Parse(locStr[1]));
         }
         else if (itemChild.Name.Equals("triggerLocation"))
         {
             string[] locStr = itemChild.FirstChild.Value.Split(',');
             point.triggerLocation = new Vector2(float.Parse(locStr[0]), float.Parse(locStr[1]));
         }
         else if (itemChild.Name.Equals("count"))
             point.count = uint.Parse(itemChild.FirstChild.Value);
         else if (itemChild.Name.Equals("bosses"))
             point.bosses = uint.Parse(itemChild.FirstChild.Value);
         else if (itemChild.Name.Equals("level"))
             point.level = uint.Parse(itemChild.FirstChild.Value);
         else if (itemChild.Name.Equals("width"))
             point.triggerWidth = uint.Parse(itemChild.FirstChild.Value);
         else if (itemChild.Name.Equals("type"))
             point.type = itemChild.FirstChild.Value;
     return point;
 }
 public void setGuiControls(SpawnPoint spawn)
 {
     enemyCountBox.Text = spawn.count.ToString();
     enemyTypeText.Text = spawn.type.ToString();
     enemyLevelTextfield.Text = spawn.level.ToString();
 }
 private void enemySpawnButton_Click(object sender, EventArgs e)
 {
     try
     {
         string[] locStr = enemyTriggerLocationTextbox.Text.Split(',');
         SpawnPoint spawn = new SpawnPoint();
         spawn.count = uint.Parse(enemyCountBox.Text);
         spawn.type = enemyTypeText.Text;
         spawn.level = uint.Parse(enemyLevelTextfield.Text);
         spawn.loc = gameref.currentLocation;
         spawn.triggerLocation = new Vector2(float.Parse(locStr[0]), float.Parse(locStr[1]));
         spawn.triggerWidth = uint.Parse(enemyTriggerWidthTextbox.Text);
         gameref.CurrentLevel.spawns.Add(spawn);
     }
     catch (Exception ex)
     {
         MessageBox.Show("Exception from spawn point:\n" + ex.StackTrace);
     }
 }
 /// <summary>
 /// Allows the game to run logic such as updating the world,
 /// checking for collisions, gathering input, and playing audio.
 /// </summary>
 /// <param name="gameTime">Provides a snapshot of timing values.</param>
 protected override void Update(GameTime gameTime)
 {
     if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
         this.Exit();
     switch (currentState)
     {
         #region Leveleditor
         case Enums.State.Leveleditor:
             Vector2 currentLocation = new Vector2(Mouse.GetState().X + offset.X, resolution.ScreenHeight - (Mouse.GetState().Y + offset.Y));
             #region Moving gameitem
             if (ButtonState.Pressed == Mouse.GetState().LeftButton &&
                 ButtonState.Pressed != previousMouseState.LeftButton &&
                 Mouse.GetState().X > 0 && Mouse.GetState().Y > 0)
             {
                 this.currentLocation = currentLocation;
                 control.updateCurrentPositionLabel();
                 if (Keyboard.GetState().IsKeyDown(Keys.LeftControl))
                     movingItem = CurrentLevel.getGameItemAtLocation(currentLocation.X, currentLocation.Y);
                 else if (Keyboard.GetState().IsKeyDown(Keys.LeftAlt))
                     movingSpawn = CurrentLevel.getSpawnAtLocation(currentLocation.X, currentLocation.Y, this);
                 else if (Keyboard.GetState().IsKeyDown(Keys.LeftShift))
                 {
                     BackgroundItemStruct? str = CurrentLevel.getBackgroundItemAtLocation(currentLocation.X, currentLocation.Y, this);
                     if(str.HasValue)
                         movingBackgroundItem = str.Value;
                 }
             }
             if (ButtonState.Pressed == Mouse.GetState().LeftButton &&
                 Mouse.GetState().X > 0 && Mouse.GetState().Y > 0)
             {
                 if (movingItem != null)             movingItem.loc = currentLocation;
                 if (movingSpawn != null)            movingSpawn.loc = currentLocation;
                 movingBackgroundItem.location = currentLocation;
             }
             if (ButtonState.Pressed != Mouse.GetState().LeftButton &&
                 ButtonState.Pressed == previousMouseState.LeftButton &&
                 Mouse.GetState().X > 0 && Mouse.GetState().Y > 0)
             {
                 movingItem = null;
                 movingSpawn = null;
             }
             #endregion
             #region Remove level item
             if (ButtonState.Pressed == Mouse.GetState().RightButton &&
                 ButtonState.Pressed != previousMouseState.RightButton &&
                 Mouse.GetState().X > 0 && Mouse.GetState().Y > 0)
             {
                 if (Keyboard.GetState().IsKeyDown(Keys.LeftControl))
                 {
                     GameItem item = CurrentLevel.getGameItemAtLocation(currentLocation.X, currentLocation.Y);
                     if (item != null)
                     {
                         CurrentLevel.items.Remove(item);
                         control.setGuiControls(item);
                     }
                 }
                 if (Keyboard.GetState().IsKeyDown(Keys.LeftAlt))
                 {
                     SpawnPoint spawn = CurrentLevel.getSpawnAtLocation(currentLocation.X, currentLocation.Y, this);
                     if (spawn != null)
                     {
                         CurrentLevel.spawns.Remove(spawn);
                         control.setGuiControls(spawn);
                     }
                 }
                 if (Keyboard.GetState().IsKeyDown(Keys.LeftShift))
                 {
                     BackgroundItemStruct? str = CurrentLevel.getBackgroundItemAtLocation(currentLocation.X, currentLocation.Y, this);
                     if (str.HasValue)
                     {
                         CurrentLevel.backgroundItems.Remove(str.Value);
                         control.setGuiControls(str.Value);
                     }
                 }
             }
             #endregion
             break;
         #endregion
         #region Worldeditor
         case Enums.State.Worldeditor:
             //if clicked on a level, choose that, otherwise make a new one
             Vector2 point = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
             int indexOfClosestLevel = -1;
             float distance = float.MaxValue;
             foreach (Level level in levels)
             {
                 float newdistance = Vector2.Distance(level.loc, point);
                 if (newdistance < distance)
                 {
                     distance = newdistance;
                     indexOfClosestLevel = level.number;
                 }
             }
             if (ButtonState.Pressed == Mouse.GetState().LeftButton &&
                 ButtonState.Pressed != previousMouseState.LeftButton &&
                 Mouse.GetState().X > 0 && Mouse.GetState().Y > 0)
             {
                 if (distance < DISTANCE_FOR_SELECTION)
                 {
                     control.setLevelInfo(levels[indexOfClosestLevel].loc.X, levels[indexOfClosestLevel].loc.Y,
                         levels[indexOfClosestLevel].adjacent, levels[indexOfClosestLevel].prereq,
                         levels[indexOfClosestLevel].name, levels[indexOfClosestLevel].number,
                         levels[indexOfClosestLevel].autoProgress);
                     if (Keyboard.GetState().IsKeyDown(Keys.LeftControl))
                     {
                         levels.RemoveAt(indexOfClosestLevel);
                         foreach (Level level in levels)
                         {
                             if (level.number >= indexOfClosestLevel)
                                 --level.number;
                             for (int i = 0; i < level.adjacent.Count; i++)
                                 if (level.adjacent[i] == indexOfClosestLevel)
                                     level.adjacent.RemoveAt(i);
                         }
                         selectedLevelIndex = 0;
                     }
                     else if (selectedLevelIndex == indexOfClosestLevel)
                         switchState();
                     else
                         selectedLevelIndex = indexOfClosestLevel;
                 }
                 else
                     addLevel();
             }
             break;
         #endregion
     }
     previousMouseState = Mouse.GetState();
     base.Update(gameTime);
 }
 public SpawnPoint Clone()
 {
     return(SpawnPoint.fromXML(fromNode));
 }