public override Tileset Read(ContentReaderContext context) { using (var reader = new BinaryReader(context.Stream)) { // Read the texture. var asset = reader.ReadString(); var texture = context.Content.Load <Texture2D>(asset); var tileset = new Tileset(texture, asset); var tileCount = reader.ReadInt32(); for (var index = 0; index < tileCount; index++) { var tilesetIndex = reader.Read7BitEncodedInteger(); var x = reader.Read7BitEncodedInteger(); var y = reader.Read7BitEncodedInteger(); var type = (TileType)reader.ReadByte(); var source = new Rectangle(x * 16, y * 16, 16, 16); var frameCount = reader.Read7BitEncodedInteger(); Frame[] frames = new Frame[frameCount]; for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) { var cell = new Cell(reader.Read7BitEncodedInteger(), reader.Read7BitEncodedInteger()); var delay = TimeSpan.FromMilliseconds(reader.Read7BitEncodedInteger()); var frame = new Frame(cell, delay); frames[frameIndex] = frame; } var animation = frameCount > 0 ? new Animation(frames, new Size(16, 16)) : null; tileset.AddTile(new Tile(tileset, type, source, tilesetIndex, animation)); } return(tileset); } }
public override Texture2D Read(ContentReaderContext context) { return(Texture2D.FromStream(context.Device, context.Stream)); }
public override Scene Read(ContentReaderContext context) { using (var reader = new BinaryReader(context.Stream)) { var size = new Size(reader.ReadInt32(), reader.ReadInt32()); var mapTileCount = size.Width * size.Height; var map = new Map(string.Empty, size); var entities = new List <Entity>(); // Read tilesets. var tilesetCount = reader.ReadInt32(); for (int i = 0; i < tilesetCount; i++) { var id = reader.ReadInt32(); var asset = reader.ReadString(); var tileset = context.Content.Load <Tileset>(asset); map.AddTileset(id, tileset); } // Read layers. var layerCount = reader.ReadInt32(); for (int i = 0; i < layerCount; i++) { var layerId = reader.ReadInt32(); var layerName = reader.ReadString(); var layerOpacity = reader.ReadSingle(); var layerTileCount = reader.ReadInt32(); var tiles = new Tile[mapTileCount]; for (int j = 0; j < layerTileCount; j++) { int tilesetId = reader.Read7BitEncodedInteger(); int tilesetIndex = reader.Read7BitEncodedInteger(); int gridIndex = reader.Read7BitEncodedInteger(); // Find the tile in the tileset. Tileset tileset = map.GetTileset(tilesetId); Tile tile = tileset.GetTile(tilesetIndex); // Add the tile to the layer. tiles[gridIndex] = tile; } var entityCount = reader.ReadInt32(); for (int n = 0; n < entityCount; n++) { var data = new EntityData(); data.Name = reader.ReadString(); data.Type = reader.ReadString(); data.Position = new Vector2(reader.ReadSingle(), reader.ReadSingle()); data.Size = new Size(reader.ReadInt32(), reader.ReadInt32()); var propertyCount = reader.ReadInt32(); for (int m = 0; m < propertyCount; m++) { var propKey = reader.ReadString(); var propValue = reader.ReadString(); data.Properties.Add(propKey, propValue); } var entity = _factory.Create(data); entity.Layer = layerId; entities.Add(entity); } var layer = new Layer(layerId, layerName, tiles, layerOpacity); map.AddLayer(layerId, layer); } return(new Scene(map, entities)); } }