Exemplo n.º 1
0
        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);
            }
        }