/// <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++; }
public void ObjectClick(GameBoardObject clickedObject) { Debug.WriteLine($"CLICKED ON {clickedObject.GetType()}"); // Если нет выбранного объекта if (SelectedObject is null) { SelectObject(clickedObject); } // Если выбирается тот же объект else if (clickedObject == SelectedObject) { ClearSelection(); } // Если выбирается другой объект else { // Если соседний объект if ((clickedObject.worldPos - SelectedObject.worldPos).Magnitude == 1.0) { // Запоминаем какие объекты меняем, чтобы потом поменять их обратно objectSwap1 = clickedObject; objectSwap2 = SelectedObject; // Меняем местами их позиции SwapObjectPositions(clickedObject, SelectedObject); ClearSelection(); currentGamePhase = GamePhase.ElementSwap; } // Если не соседний объект else { ClearSelection(); } } }