public override List <EffectData> Apply(FieldManager manager, Random random, GameMatch match, int playerUserIndex, Combo combo, Block block)
        {
            Field  playerField = playerUserIndex == 1 ? match.Field1 : match.Field2;
            Player enemy       = playerUserIndex == 1 ? match.Player2 : match.Player1;
            Field  enemyField  = playerUserIndex == 1 ? match.Field2 : match.Field1;

            List <EffectData> data = new List <EffectData>();

            if (enemyField.TryBlock(out var effect))
            {
                data.Add(EffectDataHelper.GlobalEffectRemovedData(enemy, effect));
            }
            else
            {
                enemy.TakeDamage(DamageToEnemyHealth);
                data.Add(EffectDataHelper.HealthData(enemy, DamageToEnemyHealth));

                List <Block> blocks = manager.GetRandomNonDestroyedBlocks(enemyField, ShotsAmount).ToList();
                foreach (Block blockToDestroy in blocks)
                {
                    manager.DestroyBlocks(enemyField, blocks, BlockState.DestroyedByDamage);
                    data.Add(EffectDataHelper.UniqueShotData(playerField, enemyField, block, blockToDestroy, "ShotgunEffect"));
                }
            }

            return(data);
        }
        public override List <EffectData> Apply(FieldManager manager, Random random, GameMatch match, int playerUserIndex, Combo combo, Block block)
        {
            Field  playerField = playerUserIndex == 1 ? match.Field1 : match.Field2;
            Player enemy       = playerUserIndex == 1 ? match.Player2 : match.Player1;
            Field  enemyField  = playerUserIndex == 1 ? match.Field2 : match.Field1;

            List <EffectData> data = new List <EffectData>();

            if (enemyField.TryBlock(out var effect))
            {
                data.Add(EffectDataHelper.GlobalEffectRemovedData(enemy, effect));
            }
            else
            {
                Block toBlock = manager.GetRandomNonDestroyedBlockExceptBorders(enemyField);
                manager.DestroyBlocks(enemyField, manager.GetNeighbours(enemyField, toBlock), BlockState.DestroyedByDamage);
                data.Add(EffectDataHelper.UniqueShotData(playerField, enemyField, block, toBlock, "BoulderEffect"));
            }

            return(data);
        }