public void Load(ContentManager cm)
        {
            _map = cm.Load<Map>("Maps\\Level1");

            // Figure out map rows/cols
            TileSheet ts = _map.GetTileSheet("Front");
            Vector2 tileSize = new Vector2(ts.TileWidth, ts.TileHeight);

            int mapSizeX = (int) (_map.DisplayWidth / tileSize.X);
            int mapSizeY = (int) (_map.DisplayHeight / tileSize.Y);

            TileArray tiles = _map.GetLayer("StaticCollidable").Tiles;

            // Get all static objects
            for (int row = 0; row < mapSizeY; ++row)
            {
                for (int col = 0; col < mapSizeX; ++col)
                {
                    if (tiles[col, row] == null)
                        continue;

                    Tile tile = tiles[col, row];

                    // Calculate origin-based position
                    Vector2 oPos = new Vector2(col, row);
                    oPos.X = oPos.X * tileSize.X;
                    oPos.Y = oPos.Y * tileSize.Y;

                    // Create MapTile
                    MapTile mTile = new MapTile(_world, tileSize, oPos);
                    _tiles.Add(mTile);
                }
            }
        }
Exemple #2
0
        private void LoadLayer(XmlHelper xmlHelper, Map map)
        {
            string id = xmlHelper.GetAttribute("Id");

            bool visible = bool.Parse(xmlHelper.GetAttribute("Visible"));

            xmlHelper.AdvanceStartElement("Description");
            string description = xmlHelper.GetCData();
            xmlHelper.AdvanceEndElement("Description");

            xmlHelper.AdvanceStartElement("Dimensions");
            Size layerSize = Size.FromString(xmlHelper.GetAttribute("LayerSize"));
            Size tileSize = Size.FromString(xmlHelper.GetAttribute("TileSize"));
            xmlHelper.AdvanceEndElement("Dimensions");

            Layer layer = new Layer(id, map, layerSize, tileSize);
            layer.Description = description;
            layer.Visible = visible;

            xmlHelper.AdvanceStartElement("TileData");
            string tileSheetId = xmlHelper.GetAttribute("TileSheet");
            string layerFilename = xmlHelper.GetAttribute("Filename");
            xmlHelper.AdvanceEndElement("TileData");

            TileSheet tileSheet = map.GetTileSheet(tileSheetId);
            if (tileSheet == null)
                throw new Exception("Invalid tile sheet reference: " + tileSheetId);

            TextReader layerTextReader = new StreamReader(layerFilename);
            int tileY = 0;
            char[] commas = new char[]{','};
            while (tileY < layer.LayerHeight)
            {
                string layerLine = layerTextReader.ReadLine();
                if (layerLine == null)
                    break;

                string[] tokens = layerLine.Split(commas);
                int tileX = 0;
                foreach (string token in tokens)
                {
                    if (tileX >= layer.LayerWidth)
                        break;
                    int tileIndex = int.Parse(token.Trim());
                    layer.Tiles[tileX++, tileY] = new StaticTile(layer, tileSheet, BlendMode.Alpha, tileIndex);
                }

                ++tileY;
            }
            layerTextReader.Close();

            LoadProperties(xmlHelper, layer);

            xmlHelper.AdvanceEndElement("Layer");

            map.AddLayer(layer);
        }