示例#1
0
        private void MakeExplosion(Element el)
        {
            BombBonus bombBonus = new BombBonus(Game, el);

            bombBonus.onExplosion += onBombBonusExplosion;
            activatedBonuses.Add(bombBonus);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
        }
示例#4
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++;
        }
示例#5
0
        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]);
                }
            }
        }