예제 #1
0
 void OnClick(SwipeComponent obj)
 {
     if (!isSwiping)
     {
         MatchElement clickedElement = (MatchElement)obj;
         if (selectedElement == null)
         {
             selectedElement = clickedElement;
             selectedElement.StartTweenScale();
         }
         else
         {
             // одинаковый ряд, проверяем соседство в колонке
             if (selectedElement.match.Y == clickedElement.match.Y && (Mathf.Abs(selectedElement.match.X - clickedElement.match.X) == 1))
             {
                 SwipeObjects(selectedElement, clickedElement);
             }
             // одинаковая колонка, проверяем соседство в ряду
             else if (selectedElement.match.X == clickedElement.match.X && (Mathf.Abs(selectedElement.match.Y - clickedElement.match.Y) == 1))
             {
                 SwipeObjects(selectedElement, clickedElement);
             }
             // нет соседства, скидываем выбор с первой фишки
             else
             {
                 selectedElement.StopTween();
                 selectedElement = clickedElement;
                 selectedElement.StartTweenScale();
             }
         }
     }
 }
예제 #2
0
        void SwipeObjects(MatchElement from, MatchElement to)
        {
            isSwiping = true;
            if (selectedElement != null)
            {
                selectedElement.StopTween();
            }
            selectedElement = null;

            Match3SceneManager.Instance.PlaySwipeSound();

            // отсоеденяем от елемента в гриду
            to.transform.SetParent(gameObject.transform);
            from.transform.SetParent(gameObject.transform);
            Vector3 toPos   = to.transform.position;
            Vector3 fromPos = from.transform.position;

            //свайпаем
            if (Match3SceneManager.Instance.TryToMatch(from.match, to.match)) // оправляем в клас проверки
            {
                //обмениваем значения X и Y
                int tmpX = from.match.X;
                int tmpY = from.match.Y;
                from.match.X = to.match.X;
                from.match.Y = to.match.Y;
                to.match.X   = tmpX;
                to.match.Y   = tmpY;

                currentMatchObjects[to.match.X, to.match.Y]     = to;
                currentMatchObjects[from.match.X, from.match.Y] = from;

                //двигаем фишки
                to.transform.DOMove(fromPos, 0.2f);
                from.transform.DOMove(toPos, 0.2f).OnComplete(() =>
                {
                    //возврощаем в грид
                    to.transform.SetParent(Match3SceneManager.Instance.GetPositionInGrid(to.match.X, to.match.Y));
                    from.transform.SetParent(Match3SceneManager.Instance.GetPositionInGrid(from.match.X, from.match.Y));

                    // даем знак прощитать текущую комбинацию и ждем ответ с масивом обектов которих нужно будет удалить
                    Match3SceneManager.Instance.FindRemoveMatches();
                });
            }
            else
            {
                //двигаем фишки
                to.transform.DOMove(fromPos, 0.2f).SetLoops(2, LoopType.Yoyo);
                from.transform.DOMove(toPos, 0.2f).SetLoops(2, LoopType.Yoyo).OnComplete(() =>
                {
                    //возврощаем в грид
                    to.transform.SetParent(Match3SceneManager.Instance.GetPositionInGrid(to.match.X, to.match.Y));
                    from.transform.SetParent(Match3SceneManager.Instance.GetPositionInGrid(from.match.X, from.match.Y));
                    isSwiping = false;
                });
            }
        }
예제 #3
0
 void OnRightSwipe(SwipeComponent obj)
 {
     if (!isSwiping)
     {
         MatchElement from = (MatchElement)obj;
         // убедимся, что фишка не выходит за пределы поля
         if (from.match.X < GlobalGameSettings.Instance.Col)
         {
             //достаем обект с которим будем матчить.
             MatchElement to = currentMatchObjects[from.match.X + 1, from.match.Y];
             SwipeObjects(from, to);
         }
     }
 }
예제 #4
0
 void OnDownSwipe(SwipeComponent obj)
 {
     if (!isSwiping)
     {
         MatchElement from = (MatchElement)obj;
         // убедимся, что фишка не выходит за пределы поля
         if (from.match.Y > 0)
         {
             //достаем обект с которим будем матчить.
             MatchElement to = currentMatchObjects[from.match.X, from.match.Y - 1];
             SwipeObjects(from, to);
         }
     }
 }
예제 #5
0
 public void CreateMatchElement(Color color, int x, int y, Transform parent)
 {
     if (reservedObjectsPool.Count == 0)
     {
         MatchElement tmp = Instantiate(MatchElementPrefab, parent);
         tmp.Initialize(x, y, color);
         tmp.OnClickEvent         += OnClick;
         tmp.OnUpSwipeEvent       += OnUpSwipe;
         tmp.OnDownSwipeEvent     += OnDownSwipe;
         tmp.OnLeftSwipeEvent     += OnLeftSwipe;
         tmp.OnRightSwipeEvent    += OnRightSwipe;
         tmp.OnHideElement        += OnHideElement;
         currentMatchObjects[x, y] = tmp;
     }
     else
     {
         MatchElement tmp = reservedObjectsPool[0];
         tmp.Initialize(x, y, color);
         tmp.transform.SetParent(parent, false);
         tmp.transform.localPosition = Vector3.zero;
         currentMatchObjects[x, y]   = tmp;
         reservedObjectsPool.RemoveAt(0);
     }
 }