public void Load(string path) { if (!File.Exists(path)) { Debug.WriteLine($"Spielstand \" {path}\" konnte nicht geladen werden. Bitte überprüfen.\n"); } string c = ""; try { ObjectManager.Instance.UnloadAll(); var doc = new XmlDocument(); doc.Load(path); Debug.WriteLine("-----------------------------------------------"); if (doc.DocumentElement != null) { foreach (XmlNode node in doc.DocumentElement.ChildNodes) { c = node.Name; if (node.Attributes == null) { continue; } if (node.Name == "Farmer") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); var health = float.Parse(node.Attributes.Item(2).Value, System.Globalization.CultureInfo.InvariantCulture); var money = float.Parse(node.Attributes.Item(3).Value, System.Globalization.CultureInfo.InvariantCulture); var seed1 = int.Parse(node.Attributes.Item(4).Value, System.Globalization.CultureInfo.InvariantCulture); var seed2 = int.Parse(node.Attributes.Item(5).Value, System.Globalization.CultureInfo.InvariantCulture); var seed3 = int.Parse(node.Attributes.Item(6).Value, System.Globalization.CultureInfo.InvariantCulture); var points = int.Parse(node.Attributes.Item(7).Value, System.Globalization.CultureInfo.InvariantCulture); var time = float.Parse(node.Attributes.Item(8).Value, System.Globalization.CultureInfo.InvariantCulture); ObjectManager.Instance.Add(new Farmer(x, y)); ObjectManager.Instance.GetFarmer().Health = (int)health; EconomyManager.Instance.GoldAmount = (int)money; EconomyManager.Instance.SeedAmount1 = seed1; EconomyManager.Instance.SeedAmount2 = seed2; EconomyManager.Instance.SeedAmount3 = seed3; Game1.sStatistics.Points = points; Game1.mTime = time; Debug.WriteLine("Farmer Loaded" + points); } else if (node.Name == "Fence") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); var health = float.Parse(node.Attributes.Item(2).Value.PadLeft(2), System.Globalization.CultureInfo.InvariantCulture); var level = int.Parse(node.Attributes.Item(3).Value, System.Globalization.CultureInfo.InvariantCulture); ObjectManager.Instance.Add(new Fence((int)x, (int)y, level: level, loadhealth: (int)health)); Debug.WriteLine("Fence Loaded"); } else if (node.Name == "FogOfWar") { Game1.sFog.Reset(); for (var i = 0; i < node.Attributes.Count; i++) { var visiblePoint = node.Attributes.Item(i).Value.Split(','); var end = visiblePoint[1].Length - 1; var x = int.Parse(visiblePoint[0].Remove(0, 1)); var y = int.Parse(visiblePoint[1].Remove(end)); Game1.sFog.SetField(x, y); } } else if (node.Name == "Tower") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); var health = float.Parse(node.Attributes.Item(2).Value, System.Globalization.CultureInfo.InvariantCulture); var level = int.Parse(node.Attributes.Item(3).Value, System.Globalization.CultureInfo.InvariantCulture); ObjectManager.Instance.Add(new Tower((int)x, (int)y, loadhealth: (int)health, level: level)); Debug.WriteLine("Tower Loaded"); } else if (node.Name == "Chicken") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); var health = float.Parse(node.Attributes.Item(2).Value, System.Globalization.CultureInfo.InvariantCulture); var level = int.Parse(node.Attributes.Item(3).Value, System.Globalization.CultureInfo.InvariantCulture); ObjectManager.Instance.Add(new Chicken((int)x, (int)y, loadhealth: (int)health, level: level)); Debug.WriteLine("Chicken Loaded"); } else if (node.Name == "Cow") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); var health = float.Parse(node.Attributes.Item(2).Value, System.Globalization.CultureInfo.InvariantCulture); var level = int.Parse(node.Attributes.Item(3).Value, System.Globalization.CultureInfo.InvariantCulture); ObjectManager.Instance.Add(new Cow((int)x, (int)y, loadhealth: (int)health, level: level)); Debug.WriteLine("Cow Loaded"); } else if (node.Name == "AttackCow") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); var health = float.Parse(node.Attributes.Item(2).Value, System.Globalization.CultureInfo.InvariantCulture); ObjectManager.Instance.Add(new AttackCow((int)x, (int)y, loadhealth: (int)health)); Debug.WriteLine("Attackcow Loaded"); } else if (node.Name == "AttackChicken") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); var health = float.Parse(node.Attributes.Item(2).Value, System.Globalization.CultureInfo.InvariantCulture); ObjectManager.Instance.Add(new AttackChicken((int)x, (int)y, loadhealth: (int)health)); Debug.WriteLine("Attackchicken Loaded"); } else if (node.Name == "AttackPig") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); var health = float.Parse(node.Attributes.Item(2).Value, System.Globalization.CultureInfo.InvariantCulture); ObjectManager.Instance.Add(new AttackPig((int)x, (int)y, loadhealth: (int)health)); Debug.WriteLine("Attackpig Loaded"); } else if (node.Name == "Trap") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); ObjectManager.Instance.Add(new Trap((int)x, (int)y)); Debug.WriteLine("Trap Loaded"); } else if (node.Name == "FarmerHouse") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); var health = float.Parse(node.Attributes.Item(2).Value, System.Globalization.CultureInfo.InvariantCulture); ObjectManager.Instance.Add(new Farmhouse((int)x, (int)y, loadhealth: (int)health)); } else if (node.Name == "Necromancer") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); var health = float.Parse(node.Attributes.Item(2).Value, System.Globalization.CultureInfo.InvariantCulture); ObjectManager.Instance.Add(new Necromancer((int)x, (int)y, loadhealth: (int)health)); } else if (node.Name == "Pig") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); var health = float.Parse(node.Attributes.Item(2).Value, System.Globalization.CultureInfo.InvariantCulture); var level = int.Parse(node.Attributes.Item(3).Value, System.Globalization.CultureInfo.InvariantCulture); ObjectManager.Instance.Add(new Pig((int)x, (int)y, loadhealth: (int)health, level)); Debug.WriteLine("pig Loaded"); } else if (node.Name == "Tree") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); var health = float.Parse(node.Attributes.Item(2).Value, System.Globalization.CultureInfo.InvariantCulture); ObjectManager.Instance.Add(new Tree((int)x, (int)y, loadhealh: (int)health)); Debug.WriteLine("Tree Loaded"); } else if (node.Name == "Boulder") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); ObjectManager.Instance.Add(new Boulder((int)x, (int)y)); Debug.WriteLine("Boulder Loaded"); } else if (node.Name == "Zombie") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); var health = float.Parse(node.Attributes.Item(2).Value, System.Globalization.CultureInfo.InvariantCulture); if (health > 0) { ObjectManager.Instance.Add(new Zombie((int)x, (int)y, loadhealth: (int)health)); Debug.WriteLine("Zombie Loaded"); } } else if (node.Name == "Graveyard") { var x = float.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = float.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); //var health = float.Parse(node.Attributes.Item(2).Value, // System.Globalization.CultureInfo.InvariantCulture); Ai.BuildGraveyard(new Vector2(x, y)); // ObjectManager.Instance.Add(new Graveyard((int)x, (int)y, (int)health)); Debug.WriteLine("graveyard Loaded"); } else if (node.Name == "Wheat") { var x = int.Parse(node.Attributes.Item(0).Value, System.Globalization.CultureInfo.InvariantCulture); var y = int.Parse(node.Attributes.Item(1).Value, System.Globalization.CultureInfo.InvariantCulture); var type = node.Attributes.Item(2).Value; Wheat.WheatType tmp; if (type == "Corn") { tmp = Wheat.WheatType.Corn; } else if (type == "Wheat1") { tmp = Wheat.WheatType.Wheat1; } else { tmp = Wheat.WheatType.Wheat2; } var stage = int.Parse(node.Attributes.Item(3).Value, System.Globalization.CultureInfo.InvariantCulture); var time = float.Parse(node.Attributes.Item(4).Value, System.Globalization.CultureInfo.InvariantCulture); var health = float.Parse(node.Attributes.Item(5).Value, System.Globalization.CultureInfo.InvariantCulture); Game1.sTileMap.mPlowedTiles.Remove(new Vector2(x, y)); ObjectManager.Instance.Add(new Wheat(x, y, tmp, stage: stage, loadinghealth: (int)health, time: time)); Game1.sTileMap.SetTile(x, y, Tile.Dirt); Debug.WriteLine("wheat Loaded"); } else if (node.Name == "Map") { // first planting grass everywhere for (var i = 0; i < Game1.MapWidth; i++) { for (var j = 0; j < Game1.MapHeight; j++) { Game1.sTileMap.PlantGrass(i, j, true); } } // then loading all fields which are not grass for (var i = 0; i < node.Attributes.Count; i++) { var visiblePoint = node.Attributes.Item(i).Value.Split(','); var x = int.Parse(visiblePoint[0]); var y = int.Parse(visiblePoint[1]); if (int.Parse(node.Attributes.Item(i).Name.Split('X')[1]) == 1) { Game1.sTileMap.PlowTile(x, y); } if (int.Parse(node.Attributes.Item(i).Name.Split('X')[1]) == 2) { Game1.sTileMap.PlantWater(x, y); } if (int.Parse(node.Attributes.Item(i).Name.Split('X')[1]) == 3) { Game1.sTileMap.PlantWasteland(x, y); } } } } } Ai.AddWave(ObjectManager.Instance.GetZombies().ToList()); } catch (Exception e) { Console.WriteLine(e); if (c != null) { Debug.WriteLine(c + "error"); } throw; } }