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); }