コード例 #1
0
 //метод производящий попытку толкнуть ящик
 //dir - направление толчка
 //moveSpeed - скорость толкания
 //возвращает true если толкнуть получилось иначе false
 public bool TryPush(MoveDirection dir, float moveSpeed)
 {
     if (moving)
     {
         return(false);
     }
     else
     {
         CellScript targetCell;
         if (dir == MoveDirection.Left)
         {
             targetCell = currCell.leftNeighbor;
         }
         else
         {
             targetCell = currCell.rightNeighbor;
         }
         //если сбоку и сверху нет ящика толчок разрешается
         bool canPush = targetCell != null && targetCell.cellObject == null && currCell.topNeighbor.cellObject == null;
         if (canPush)
         {
             StartCoroutine(MoveToCell(targetCell, moveSpeed));
             currMove = BoxMoveType.Push;
             return(true);
         }
         else
         {
             return(false);
         }
     }
 }
コード例 #2
0
    private void Update()
    {
        //падение если под ящиком ничего нет
        bool needFall = canFall && !moving && currCell.bottomNeighbor != null && !(currCell.bottomNeighbor.cellObject is BoxScript);

        if (needFall)
        {
            StartCoroutine(MoveToCell(currCell.bottomNeighbor, fallSpeed));
            currMove = BoxMoveType.Fall;
        }
    }
コード例 #3
0
    protected override void EndMoveAction()
    {
        //конец игры если ящик упал в запретную клетку
        bool inGameOverCell = currMove == BoxMoveType.Fall && currCell.isGameOverCell && currCell.bottomNeighbor.cellObject is BoxScript;

        if (inGameOverCell)
        {
            GameManagerScript.instance.GameOver();
            return;
        }
        currMove = BoxMoveType.Stay;
        //проверка на совпадение цветов проводится если падение не будет продолжаться
        if (currCell.bottomNeighbor == null || currCell.bottomNeighbor.cellObject is BoxScript)
        {
            int count = 0;
            //подсчёт ящиков с одинаковым цветом
            FindBoxWithSameColor(currCell, x => count++);
            if (count >= 3)
            {
                //уничтожение ящиков с одинаковым цветом
                FindBoxWithSameColor(currCell, x => x.DestroyBox());
            }
        }
    }