private void MakeExplosion(Element el) { BombBonus bombBonus = new BombBonus(Game, el); bombBonus.onExplosion += onBombBonusExplosion; activatedBonuses.Add(bombBonus); }
/// <summary> /// Превращает объект в заданной позиции в бомбу. /// </summary> public void TurnIntoBomb(Vector2Int pos) { GameBoardObject obj = GetObjectAtPosition(pos); BombBonus bomb = new BombBonus(obj, obj.worldPos, obj.worldPos); objectList.Remove(obj); objectList.Add(bomb); }
/// <summary> /// Создать бонус Bomb. /// </summary> /// <param name="baseObject">Базовый объект.</param> public void CreateBombBonus(GameBoardObject baseObject) { // Создаем объект BombBonus newBombBonus = new BombBonus(baseObject, baseObject.worldPos, baseObject.worldPos); objectList.Add(newBombBonus); // Запускаем анимацию появления ScaleAnimation spawnAnimation = new ScaleAnimation(newBombBonus, 0.0, 1.0, blocking: true); activeAnimations.Add(spawnAnimation); }
/// <summary> /// Активирует бонус Bomb. /// </summary> public void TriggerBombBonus(BombBonus bombBonus) { // Объекты вокруг бомбы for (int x = bombBonus.worldPos.x - 1; x <= bombBonus.worldPos.x + 1; x++) { for (int y = bombBonus.worldPos.y - 1; y <= bombBonus.worldPos.y + 1; y++) { if (x == bombBonus.worldPos.x && y == bombBonus.worldPos.y) { continue; } GameBoardObject obj = GetObjectAtPosition(x, y); if (obj is null) { continue; } implodingObjects.Add(obj); ScaleAnimation implodeAnimation = new ScaleAnimation( obj, beginScale: 1.0, endScale: 0.0, delay: 0.25, blocking: true, finishedCallback: _ => objectList.Remove(obj) ); activeAnimations.Add(implodeAnimation); score++; // Если это LineBonus if (obj.GetType() == typeof(LineBonus)) { TriggerLineBonus((LineBonus)obj); } // Если это BombBonus if (obj.GetType() == typeof(BombBonus)) { TriggerBombBonus((BombBonus)obj); } } } // Сама бомба implodingObjects.Add(bombBonus); ScaleAnimation bombImplodeAnimation = new ScaleAnimation( bombBonus, beginScale: 1.0, endScale: 0.0, delay: 0.0, blocking: true, finishedCallback: _ => objectList.Remove(bombBonus) ); activeAnimations.Add(bombImplodeAnimation); score++; }
private void onBombBonusExplosion(BombBonus bombBonus) { int row = bombBonus.el.row; int col = bombBonus.el.col; for (int i = row - 1; i < row + 2; ++i) { if (OutOfRange(i)) { continue; } for (int j = col - 1; j < col + 2; ++j) { if (OutOfRange(j)) { continue; } DestroyElement(field[i, j]); } } }