public void LoadIntoLayer(Layer layer) { foreach (var tileEntry in Tiles) { var tileData = tileEntry.Key; var tilePositions = tileEntry.Value; Tile tile = AssemblyManager.GetTileByFullName(tileData.TypeName); tile.Name = tileData.Name; tile.GraphicsResourceName = tileData.GraphicsResourceName; tile.InitialState = tileData.InitialState; tile.Position = Vector2.Zero; tile.InitialPosition = Vector2.Zero; if (tile.TileShape == Physics.CollidableShape.Rectangle) { tile.RectSolidSides = (TileRectSolidSides)tileData.SolidSides; } else { tile.TriSolidSides = (TileTriSolidSides)tileData.SolidSides; } if (!(tileData.CustomData is JToken)) { throw new InvalidCastException("LayerTileSaveData.LoadIntoLayer(Layer): The custom data for a tile was not in the correct format."); } tile.DeserializeCustomObjects(new JsonHelper((JToken)tileData.CustomData)); List<Tile> tilesToAdd = new List<Tile>(); foreach (Point tileNumber in tilePositions.CellNumbers) { float xPosition = layer.Tiles.Position.X + (tileNumber.X * layer.Tiles.CellWidth); float yPosition = layer.Tiles.Position.Y + (tileNumber.Y * layer.Tiles.CellHeight); Tile resultTile = tile.Clone(); resultTile.InitialPosition = resultTile.Position = new Vector2(xPosition, yPosition); resultTile.Initialize(layer.Owner); tilesToAdd.Add(resultTile); } layer.AddTiles(tilesToAdd); } }