Exemplo n.º 1
0
        /// <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;
        }
Exemplo n.º 2
0
 public void AddEmitter(ParticleEmitter emitter)
 {
     emitters.AddLast(emitter);
 }