Exemplo n.º 1
0
    //--------------------------------------------------------------------------------
    //스왑 Move가 끝났을 경우에 실행
    public void OnEventEndSwap(List <PieceMoveHandler> moveList)
    {
        Debug.Log("PanelBoard::OnEventEndSwap");
        //match된 Piece들 받을 리스트
        List <Node> matchList = new List <Node>();

        //움직인 Piece들 기준으로 ThreeMatch 검사
        for (int i = 0; i < moveList.Count; ++i)
        {
            //매치된 리스트 받아옴
            List <Node> tempList = CheckThreeMatch(moveList[i].targetNode.Index);
            //하나의 리스트로 합친다
            MergeNodeList(matchList, tempList);
        }

        //매치된게 없다면 다시 되돌려야 함
        if (matchList.Count == 0)
        {
            //콤보 체크 해제
            //mIsComboCheck = false;

            //스왑으로 이동했으므로 moveList는 2개
            PieceMoveEvent moveEvent = new PieceMoveEvent();

            Node  aNode  = moveList[0].targetNode;
            Node  bNode  = moveList[1].targetNode;
            Piece aPiece = aNode.piece;
            Piece bPiece = bNode.piece;

            moveEvent.AddMoveHandler(new PieceMoveHandler(aPiece, bNode));
            moveEvent.AddMoveHandler(new PieceMoveHandler(bPiece, aNode));

            SetPieceToNode(bPiece, aNode);
            SetPieceToNode(aPiece, bNode);

            PieceMoveManager.Instance.AddMoveEvent(moveEvent);
        }
        else
        {
            //콤보체크 재시작
            //mIsComboCheck = true;

            //매치된 리스트들 전부 삭제
            for (int i = 0; i < matchList.Count; ++i)
            {
                DestroyPiece(matchList[i]);
            }
        }
    }
Exemplo n.º 2
0
    //--------------------------------------------------------------------------------
    public void MoveToSwap(Node a, Node b)
    {
        //MoveEvent 생성
        PieceMoveEvent moveEvent = new PieceMoveEvent();

        Piece aPiece = a.piece;
        Piece bPiece = b.piece;

        //aPiece는 bNode로, bPiece는 aNode로 이동
        moveEvent.AddMoveHandler(new PieceMoveHandler(aPiece, b));
        moveEvent.AddMoveHandler(new PieceMoveHandler(bPiece, a));

        //aPiece.transform.DOPunchScale(Vector3.one, 0.4f , 2 ,3);
        //bPiece.transform.DOPunchScale(Vector3.one, 0.4f , 2 ,3);

        //해당 Piece들 이동할 Node에 바인딩
        SetPieceToNode(bPiece, a);
        SetPieceToNode(aPiece, b);
        //이동 끝났을 때 알림받을 함수 바인딩
        moveEvent.EventMoveEnd += OnEventEndSwap;
        PieceMoveManager.Instance.AddMoveEvent(moveEvent);
    }
Exemplo n.º 3
0
    //--------------------------------------------------------------------------------
    void UpdateGravity()
    {
        //어떤 타일을 드래깅 중이라면 Gravity Check 적용 X
        if (mDragHanlder.IsNull() == false)
        {
            return;
        }
        //움직임 요청 이벤트
        PieceMoveEvent moveEvent = null;

        for (int x = 0; x < mCellWidthCount; ++x)
        {
            int createCount = 0;                            //해당 행에서 몇개의 새로운 Piece 생성했는지 수
            for (int y = mCellHeightCount - 1; y >= 0; --y) //맨 아래 노드들 부터 검사
            {
                Index index = new Index(x, y);              //현재 인덱스
                Node  node  = GetNode(index);               //현재 노드
                if (node.piece != null)
                {
                    continue;                       //조각이 있는 노드면 딱히 별도의 처리 필요 X
                }
                //조각이 없는 빈 노드라면 위의 노드들을 검사하면서 조각을 찾는다.
                for (int ny = y - 1; ny >= -1; --ny)
                {
                    //위에 있는 모든 Node를 검사했는데 해당 노드로 끌어 내릴 조각이 없다는 뜻 => 새로 Piece를 생성해 주어야 한다는 뜻
                    if (ny == -1)
                    {
                        //새로 생성되어야 할 위치
                        Vector2 position = new Vector2();
                        position.x = mStartX + m_cellSize * x;
                        position.y = mStartY + m_cellSize * (createCount + 1);
                        //새 Piece
                        Piece newPiece = CreateRandomPiece(index, position);

                        if (moveEvent == null)
                        {
                            moveEvent = new PieceMoveEvent();
                        }
                        //새로 생성된 Piece MoveEvent에 추가
                        moveEvent.AddMoveHandler(new PieceMoveHandler(newPiece, node));
                        //해당 Piece 목표 Node에 바인딩
                        SetPieceToNode(newPiece, node);
                        //생성 수 ++
                        ++createCount;

                        break;
                    }
                    else
                    {
                        //다음 노드 인덱스
                        Index nextIndex = new Index(x, ny);
                        Node  nextNode  = GetNode(nextIndex);
                        //다음 노드가 빈 노드라면 스킵
                        if (nextNode.piece == null)
                        {
                            continue;
                        }

                        //여기까지 왔다면 Piece를 찾았다는 뜻

                        if (moveEvent == null)
                        {
                            moveEvent = new PieceMoveEvent();
                        }
                        //해당 Piece targetNode로 끌어내리자
                        moveEvent.AddMoveHandler(new PieceMoveHandler(nextNode.piece, node));
                        //해당 Piece node로 바인딩
                        SetPieceToNode(nextNode.piece, node);
                        //이제 해당 노드에는 piece가 없는 상황
                        nextNode.piece = null;
                        break;
                    }
                }
            }
        }
        //MoveEvent가 있다면
        if (moveEvent != null)
        {
            moveEvent.EventMoveEnd += OnEventGravityEnd;
            PieceMoveManager.Instance.AddMoveEvent(moveEvent);
        }
    }
Exemplo n.º 4
0
 public void AddMoveEvent(PieceMoveEvent moveEvent)
 {
     mEventList.Add(moveEvent);
 }