public MatchThreeCandy GetRandomCandy()
    {
        MatchThreeCandyData candyData = m_CandiesData[Random.Range(0, m_CandiesData.Length)];
        GameObject          obj       = Instantiate(candyData.Prefab);
        MatchThreeCandy     candy     = obj.AddComponent <MatchThreeCandy>();

        candy.CandyData = candyData;
        SpriteRenderer spriteRenderer = obj.GetComponent <SpriteRenderer>();

        spriteRenderer.color = candyData.Color;

        return(candy);
    }
 public static MatchThreeCell GetCell(MatchThreeCandy candy)
 {
     foreach (var row in GameField)
     {
         foreach (var cell in row)
         {
             if (cell.Candy == candy)
             {
                 return(cell);
             }
         }
     }
     return(null);
 }
    private void SetupCandiesLine(MatchThreeCell firstCell, Direction direction)
    {
        MatchThreeCell cell = firstCell;

        while (cell)
        {
            MatchThreeCandy newCandy = m_Types.GetRandomCandy();
            //пробуем генерить пока не получим разрешенную кoнефетку
            //типов конфеток должно быть 5 или более - иначе возможен вариант вечного цикла
            while (!IsFreeCandyPlacement(cell, newCandy.CandyData.Id))
            {
                Destroy(newCandy.gameObject);
                newCandy = m_Types.GetRandomCandy();
            }

            cell.Candy = newCandy;
            cell.Candy.transform.position = cell.transform.position;
            cell = cell.GetNeighbour(direction);
        }
    }
    private void OnMouseUp()
    {
        inDrag = false;
        if (currentCollider)
        {
            MatchThreeCandy targetCandy = currentCollider.GetComponent <MatchThreeCandy>();
            var             targetCell  = MatchThreeField.GetCell(targetCandy);
            var             currentCell = MatchThreeField.GetCell(this);
            //пытаемся поменять ячейки
            currentCell.Candy = targetCandy;
            targetCell.Candy  = this;

            //проверить валидность
            bool isFreePlacement = MatchThreeController.IsFreeCandyPlacement(targetCell, CandyData.Id);
            if (isFreePlacement)
            {
                isFreePlacement = MatchThreeController.IsFreeCandyPlacement(currentCell, targetCandy.CandyData.Id);
            }

            //если смена НЕ приведет к совпадению 3-х
            if (isFreePlacement)
            {
                targetCell.Candy   = targetCandy;
                currentCell.Candy  = this;
                transform.position = baseCandyPosition;
                return;
            }

            //Если приведет к совпадению 3-х
            transform.position             = targetCell.transform.position;
            targetCandy.transform.position = currentCell.transform.position;
            return;
        }

        transform.position = baseCandyPosition;
    }