Example #1
0
        private void ChangeCollisionLayers(MapPropertiesBrush brush, MapProperties properties, CollisionLayer layer)
        {
            brush.Selection.HasDifferentCollisionLayer = false;
            brush.ActiveTileInfo.CollisionLayer        = layer;

            foreach (var position in brush.Selection.Bounds.allPositionsWithin)
            {
                if (layer == CollisionLayer.None)
                {
                    var tile = properties.GetTile(new Vector2Int(position.x, position.y));
                    if (tile != null)
                    {
                        tile.CollisionLayer = CollisionLayer.None;
                    }
                }
                else
                {
                    var tile = properties.AddOrGetTile(new Vector2Int(position.x, position.y));
                    tile.CollisionLayer = layer;
                }
            }

            var size      = brush.Selection.Bounds.size.x * brush.Selection.Bounds.size.y;
            var tileArray = Enumerable.Repeat(brush.CollisionTile, size).ToArray();
            var nullArray = new TileBase[size];

            for (int index = 0, value = 1; index < CollisionLayerData.LayerCount; index++, value *= 2)
            {
                if ((value & (int)layer) > 0)
                {
                    var tilemap = properties.AddOrGetCollisionLayer(index);
                    tilemap.SetTilesBlock(brush.Selection.Bounds, tileArray);
                }
                else
                {
                    var tilemap = properties.GetCollisionLayer(index);
                    if (tilemap)
                    {
                        tilemap.SetTilesBlock(brush.Selection.Bounds, nullArray);
                        properties.CheckForCollisionRemoval(tilemap, index);
                    }
                }
            }

            properties.UpdateBounds();
        }