コード例 #1
0
ファイル: TilesetReader.cs プロジェクト: patriksvensson/ld29
        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);
            }
        }
コード例 #2
0
 public override Texture2D Read(ContentReaderContext context)
 {
     return(Texture2D.FromStream(context.Device, context.Stream));
 }
コード例 #3
0
ファイル: SceneReader.cs プロジェクト: patriksvensson/ld29
        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));
            }
        }