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); } } }
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); }