/// <summary> /// Read all enemy objects present in the level. /// </summary> /// <returns></returns> public static LinkedList<Enemy> readEnemies() { int EnemyCount; LinkedList<Enemy> enemies = new LinkedList<Enemy>(); string content; if (currentReadTarget == null) throw new Exception("File read target not set. LevelParser.readEnemies"); using (System.Xml.XmlReader r = System.Xml.XmlReader.Create(currentReadTarget)) { r.MoveToContent(); r.ReadToFollowing("objects"); r.ReadToDescendant("enemies"); content = r.ReadElementContentAsString(); r.Close(); } String[] EnemyString = CleanUp(content); EnemyCount = EnemyString.Length / 3; for (int i = 0; i < EnemyCount; ++i) { int[] rectangleValues = getNumbers(EnemyString[i * 3].Substring(4)); Rectangle r = new Rectangle(rectangleValues[0], rectangleValues[1], rectangleValues[2], rectangleValues[3]); //get the patrol values for this enemy int[] textureNums = getNumbers(EnemyString[(i * 3) + 2].Substring(4)); Enemy final = new Enemy(r, textureNums[0], ObjectShape.Rectangle); if (!EnemyString[(i * 3) + 1].Equals("nopatrol")) { int[] patrolValues = getNumbers(EnemyString[(i * 3) + 1].Substring(4)); PatrolModel p = new PatrolModel(); for (int j = 0; j < patrolValues.Length / 3; j++) { p.addVector(new Vector2((float)patrolValues[j * 3], (float)patrolValues[j * 3 + 1]), patrolValues[j * 3 + 2]); } final.setPatrolModel(p); } enemies.AddLast(final); } return enemies; }