Esempio n. 1
0
        /// <summary>
        /// Parses Xml to populate the level with enemies, objects, etc.
        /// </summary>
        /// <param name="doc">XmlDocument containing level data.</param>
        /// <param name="engine">Game engine.</param>
        /// <returns></returns>
        protected void initializeLevelFromXml(XmlDocument doc, Engine engine)
        {
            // First load the tiles
            XmlElement ele = (XmlElement)doc.GetElementsByTagName("level")[0];
            width_ = Convert.ToInt32(ele.GetAttribute("numTilesWide"));
            height_ = Convert.ToInt32(ele.GetAttribute("numTilesTall"));

            tiles_ = new int[height_, width_];

            XmlNodeList tList = doc.GetElementsByTagName("tile");
            for (int i = 0; i < height_; i++)
            {
                for (int j = 0; j < width_; j++)
                {
                    XmlElement ele2 = (XmlElement)tList[j + i * width_];
                    int tempInt = Convert.ToInt32(ele2.GetAttribute("index"));
                    tiles_[i, j] = tempInt;
                }
            }

            // Load the tileset similar to this
            XmlElement tilesetEle = (XmlElement)doc.GetElementsByTagName("tileset")[0];
            if (tilesetEle == null)
            {
                tileSet_ = Tileset.getTilesetFromContent(@"XML\defaultTileset", engine);
            }
            else
            {
                tileSet_ = Tileset.getTilesetFromContent(tilesetEle.InnerText, engine);
            }

            // Now load the enemies
            tList = doc.GetElementsByTagName("enemy");
            for (int i = 0; i < tList.Count; i++)
            {
                parseEnemy(tList[i]);
            }
            // Now load the healthBoxes, ammoBoxes, weapon pickups, and level transitions
            tList = doc.GetElementsByTagName("item");
            for (int i = 0; i < tList.Count; i++)
            {
                parseItem(tList[i]);
            }
            tList = doc.GetElementsByTagName("overlay");
            for (int i = 0; i < tList.Count; i++)
            {
                parseOverlay(tList[i]);
            }
            // Load player location from file
            if (doc.GetElementsByTagName("playerLocation").Count > 0)
            {
                XmlElement playerLocation = (XmlElement)doc.GetElementsByTagName("playerLocation")[0];
                playerStartLocation_ = new Vector2((float)Convert.ToInt32(playerLocation.GetAttribute("x")), (float)Convert.ToInt32(playerLocation.GetAttribute("y")));
            }

            //TODO: get from XML
            //player_ = new ActuatedMainPlayer(pipeline, null, new Vector2(100f, 200f), new Vector2(1.0f, 0.0f));
            //
            player_ = null;
        }
Esempio n. 2
0
        /// <summary>
        /// Constructs a TileSet from an XmlDocument.
        /// </summary>
        /// <param name="doc">XML data containing Tileset related tags.</param>
        /// <param name="spriteBatch">Sprite batch which will draw the tiles.</param>
        /// <param name="graphics">Graphics device which will draw the tiles.</param>
        /// <returns>The constructed TileSet.</returns>
        protected static Tileset getTilesetFromXML(XmlDocument doc, SpriteBatch spriteBatch, GraphicsDevice graphics)
        {
            Tileset returnTileset = new Tileset();
            XmlElement ele = (XmlElement)doc.GetElementsByTagName("image-file")[0];
            string image_file = ele.InnerText;
            ele = (XmlElement)doc.GetElementsByTagName("tile-size")[0];
            int tile_size_x = Convert.ToInt32(ele.GetAttribute("x"));
            int tile_size_y = Convert.ToInt32(ele.GetAttribute("y"));
            ele = (XmlElement)doc.GetElementsByTagName("total-tiles")[0];
            int total_tiles = Convert.ToInt32(ele.InnerText);
            ele = (XmlElement)doc.GetElementsByTagName("tiles-high")[0];
            int tiles_high = Convert.ToInt32(ele.InnerText);
            ele = (XmlElement)doc.GetElementsByTagName("tiles-wide")[0];
            int tiles_wide = Convert.ToInt32(ele.InnerText);
            XmlNodeList heightsNodes = doc.GetElementsByTagName("tile-heights");
            if (heightsNodes.Count != 1)
            {
                throw new Exception("Error in Tileset XML, should be exactly one tile-heights tag");
            }
            XmlNode heightsNode = heightsNodes[0];
            if (heightsNode.ChildNodes.Count != total_tiles)
            {
                throw new Exception("Number of height tags do not match total-tiles");
            }
            for (int i = 0; i < heightsNode.ChildNodes.Count; i++)
            {
                XmlElement e = (XmlElement)heightsNode.ChildNodes[i];
                bool lowH = e.GetAttribute("l").ToLower() == "true";
                bool highH = e.GetAttribute("h").ToLower() == "true";
                Height h = new Height(lowH, highH);
                returnTileset.heights_.Add(i, h);
            }

            returnTileset.TILE_SIZE_X = tile_size_x;
            returnTileset.TILE_SIZE_Y = tile_size_y;

            returnTileset.texture_ = new GameTexture(image_file,
                spriteBatch,
                graphics,
                calculateImageDimensions(total_tiles, tiles_wide, tiles_high, tile_size_x, tile_size_y));

            return returnTileset;
        }