Example #1
0
        /// <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++;
        }
Example #2
0
        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();
                }
            }
        }