protected override TiledMap Read(ContentReader reader, TiledMap existingInstance)
{
var backgroundColor = reader.ReadColor();
var renderOrder = (TiledRenderOrder)Enum.Parse(typeof(TiledRenderOrder), reader.ReadString(), true);
var tiledMap = new TiledMap(firstGid: reader.ReadInt32(),
width: reader.ReadInt32(),
height: reader.ReadInt32(),
tileWidth: reader.ReadInt32(),
tileHeight: reader.ReadInt32(),
orientation: (TiledMapOrientation)reader.ReadInt32())
{
backgroundColor = backgroundColor,
renderOrder = renderOrder
};
readCustomProperties(reader, tiledMap.properties);
var tilesetCount = reader.ReadInt32();
for (var i = 0; i < tilesetCount; i++)
{
var isStandardTileset = reader.ReadBoolean();
// image collections will have not texture associated with them
var textureName = reader.ReadString();
Texture2D texture = null;
if (textureName != string.Empty)
{
var textureAssetName = reader.getRelativeAssetPath(textureName);
texture = reader.ContentManager.Load <Texture2D>(textureAssetName);
}
var tileset = tiledMap.createTileset(
texture: texture,
firstId: reader.ReadInt32(),
tileWidth: reader.ReadInt32(),
tileHeight: reader.ReadInt32(),
isStandardTileset: isStandardTileset,
spacing: reader.ReadInt32(),
margin: reader.ReadInt32());
readCustomProperties(reader, tileset.properties);
// tiledset tile array
var tileCount = reader.ReadInt32();
for (var j = 0; j < tileCount; j++)
{
var tile = new TiledTilesetTile(reader.ReadInt32(), tiledMap);
var tileAnimationFrameCount = reader.ReadInt32();
if (tileAnimationFrameCount > 0)
{
tile.animationFrames = new List <TiledTileAnimationFrame>(tileAnimationFrameCount);
}
for (var k = 0; k < tileAnimationFrameCount; k++)
{
tile.animationFrames.Add(new TiledTileAnimationFrame(reader.ReadInt32(), reader.ReadSingle()));
}
// image source is optional
if (reader.ReadBoolean())
{
var rect = new Rectangle(reader.ReadInt32(), reader.ReadInt32(), reader.ReadInt32(), reader.ReadInt32());
((TiledImageCollectionTileset)tileset).setTileTextureRegion(tileset.firstId + tile.id, rect);
}
readCustomProperties(reader, tile.properties);
// give the TiledTilesetTile a change to process and cache any data required
tile.processProperties();
tileset.tiles.Add(tile);
}
}
var layerCount = reader.ReadInt32();
for (var i = 0; i < layerCount; i++)
{
var layer = readLayer(reader, tiledMap);
readCustomProperties(reader, layer.properties);
}
var objectGroupCount = reader.ReadInt32();
for (var i = 0; i < objectGroupCount; i++)
{
readObjectGroup(reader, tiledMap);
}
return(tiledMap);
}