/// <summary> /// Loads the given world /// </summary> /// <param name="fileName">"World to load".xml</param> public Vector2 LoadWorld(string fileName, ContentManager contentManager) { cultureInfo.NumberFormat.CurrencyDecimalSeparator = "."; cultureInfo.NumberFormat.NumberDecimalSeparator = "."; XmlDocument file = new XmlDocument(); file.Load("Content\\" + fileName); //Select all planet-nodes XmlNodeList planets = file.SelectNodes("//planet"); //Get player spawn and set value to return XmlNode node = file.SelectSingleNode("//playerSpawn"); Vector2 playerPos = new Vector2(float.Parse(node.ChildNodes.Item(0).InnerText), float.Parse(node.ChildNodes.Item(1).InnerText)); //Loop through and create all planets foreach (XmlNode currentPlanet in planets) { Planet newPlanet = new Planet(); newPlanet.Init(contentManager, currentPlanet["texture"].InnerText, "", new Collectible[] { }, ParseVectorFromXML(currentPlanet["position"]), ParseVectorFromXML(currentPlanet["textureSize"]), ParseFloatFromXML(currentPlanet["radius"]), ParseFloatFromXML(currentPlanet["radius"]) + ParseFloatFromXML(currentPlanet["gravitationField"])); planetList.Add(newPlanet); XmlNodeList emitters = currentPlanet.SelectNodes("//emitter"); <<<<<<< HEAD Dictionary<string, XmlNode> idNodes = new Dictionary<string, XmlNode>(); ======= >>>>>>> origin/David //Loops through all emitters and creates a new one foreach (XmlNode emitter in emitters) { Particle particle; <<<<<<< HEAD ParticleEmitter newEmitter; if (emitter.Attributes["id"] != null) idNodes.Add(emitter.Attributes["id"].Value, emitter); if (emitter.Attributes["copyFrom"] == null) { switch (emitter["type"].InnerText) { case "lightbug": particle = new Lightbug(contentManager.Load<Texture2D>("particles\\lightbug"), random, ParseFloatFromXML(emitter["lifeTime"]), ParseFloatFromXML(emitter["fadeTime"]), newPlanet.Pos, ParseFloatFromXML(emitter["strayDistance"])); break; case "leafbrown": particle = new Leaf(contentManager.Load<Texture2D>("particles\\leafbrown"), random, ParseFloatFromXML(emitter["lifeTime"]), ParseFloatFromXML(emitter["fadeTime"]), newPlanet.Pos, newPlanet.Radius, ParseVectorFromXML(emitter["stray"]), ParseVectorFromXML(emitter["windMin"]), ParseVectorFromXML(emitter["windMax"]), ParseVectorFromXML(emitter["sinRange"])); break; case "leafgreen": particle = new Leaf(contentManager.Load<Texture2D>("particles\\leafgreen"), random, ParseFloatFromXML(emitter["lifeTime"]), ParseFloatFromXML(emitter["fadeTime"]), newPlanet.Pos, newPlanet.Radius, ParseVectorFromXML(emitter["stray"]), ParseVectorFromXML(emitter["windMin"]), ParseVectorFromXML(emitter["windMax"]), ParseVectorFromXML(emitter["sinRange"])); break; case "leafred": particle = new Leaf(contentManager.Load<Texture2D>("particles\\leafred"), random, ParseFloatFromXML(emitter["lifeTime"]), ParseFloatFromXML(emitter["fadeTime"]), newPlanet.Pos, newPlanet.Radius, ParseVectorFromXML(emitter["stray"]), ParseVectorFromXML(emitter["windMin"]), ParseVectorFromXML(emitter["windMax"]), ParseVectorFromXML(emitter["sinRange"])); break; default: throw new Exception("Could not find emitter type! Check spelling and/or implementation"); } //Create new emitter newEmitter = new ParticleEmitter(ParseVectorFromXML(emitter["position"]), particleManager, particle, ParseFloatFromXML(emitter["cooldownTime"]), ParseFloatFromXML(emitter["spawnChance"]), ParseIntFromXML(emitter["maxParticleAmount"]), random); } else { XmlNode copyNode = idNodes[emitter.Attributes["copyFrom"].Value]; switch (emitter["type"].InnerText) { case "lightbug": particle = new Lightbug(contentManager.Load<Texture2D>("particles\\lightbug"), random, ParseFloatFromXML(copyNode["lifeTime"]), ParseFloatFromXML(copyNode["fadeTime"]), newPlanet.Pos, ParseFloatFromXML(copyNode["strayDistance"])); break; case "leafbrown": particle = new Leaf(contentManager.Load<Texture2D>("particles\\leafbrown"), random, ParseFloatFromXML(copyNode["lifeTime"]), ParseFloatFromXML(copyNode["fadeTime"]), newPlanet.Pos, newPlanet.Radius, ParseVectorFromXML(copyNode["stray"]), ParseVectorFromXML(copyNode["windMin"]), ParseVectorFromXML(copyNode["windMax"]), ParseVectorFromXML(copyNode["sinRange"])); break; case "leafgreen": particle = new Leaf(contentManager.Load<Texture2D>("particles\\leafgreen"), random, ParseFloatFromXML(copyNode["lifeTime"]), ParseFloatFromXML(copyNode["fadeTime"]), newPlanet.Pos, newPlanet.Radius, ParseVectorFromXML(copyNode["stray"]), ParseVectorFromXML(copyNode["windMin"]), ParseVectorFromXML(copyNode["windMax"]), ParseVectorFromXML(copyNode["sinRange"])); break; case "leafred": particle = new Leaf(contentManager.Load<Texture2D>("particles\\leafred"), random, ParseFloatFromXML(copyNode["lifeTime"]), ParseFloatFromXML(copyNode["fadeTime"]), newPlanet.Pos, newPlanet.Radius, ParseVectorFromXML(copyNode["stray"]), ParseVectorFromXML(copyNode["windMin"]), ParseVectorFromXML(copyNode["windMax"]), ParseVectorFromXML(copyNode["sinRange"])); break; default: throw new Exception("Could not find emitter type! Check spelling and/or implementation"); } //Create new emitter newEmitter = new ParticleEmitter(ParseVectorFromXML(copyNode["position"]), particleManager, particle, ParseFloatFromXML(copyNode["cooldownTime"]), ParseFloatFromXML(copyNode["spawnChance"]), ParseIntFromXML(copyNode["maxParticleAmount"]), random); } ======= switch (emitter["type"].InnerText) { case "lightbug": particle = new Lightbug(contentManager.Load<Texture2D>("particles\\lightbug"), random, ParseFloatFromXML(emitter["lifeTime"]), ParseFloatFromXML(emitter["fadeTime"]), newPlanet.Pos, ParseVectorFromXML(emitter["stray"])); break; case "leafbrown": particle = new Leaf(contentManager.Load<Texture2D>("particles\\leafbrown"), random, ParseFloatFromXML(emitter["lifeTime"]), ParseFloatFromXML(emitter["fadeTime"]), newPlanet.Pos, newPlanet.Radius, ParseVectorFromXML(emitter["stray"]), ParseVectorFromXML(emitter["windMin"]), ParseVectorFromXML(emitter["windMax"]), ParseVectorFromXML(emitter["sinRange"])); break; case "leafgreen": particle = new Leaf(contentManager.Load<Texture2D>("particles\\leafgreen"), random, ParseFloatFromXML(emitter["lifeTime"]), ParseFloatFromXML(emitter["fadeTime"]), newPlanet.Pos, newPlanet.Radius, ParseVectorFromXML(emitter["stray"]), ParseVectorFromXML(emitter["windMin"]), ParseVectorFromXML(emitter["windMax"]), ParseVectorFromXML(emitter["sinRange"])); break; case "leafred": particle = new Leaf(contentManager.Load<Texture2D>("particles\\leafred"), random, ParseFloatFromXML(emitter["lifeTime"]), ParseFloatFromXML(emitter["fadeTime"]), newPlanet.Pos, newPlanet.Radius, ParseVectorFromXML(emitter["stray"]), ParseVectorFromXML(emitter["windMin"]), ParseVectorFromXML(emitter["windMax"]), ParseVectorFromXML(emitter["sinRange"])); break; default: throw new Exception("Could not find emitter type! Check spelling and/or implementation"); } //Create new emitter ParticleEmitter newEmitter = new ParticleEmitter(ParseVectorFromXML(emitter["position"]), particleManager, particle, ParseFloatFromXML(emitter["cooldownTime"]), ParseFloatFromXML(emitter["spawnChance"]), ParseIntFromXML(emitter["maxParticleAmount"]), random); >>>>>>> origin/David particleManager.AddEmitter(newEmitter); } } return playerPos; }
public void AddEmitter(ParticleEmitter emitter) { emitters.AddLast(emitter); }