Exemple #1
0
    public void onInputEnd()
    {
        TileActor selected = selectedTile;

        //clear state at top
        selectedTile = null;
        if (selected != null)
        {
            selected.restoreHighlight();


            Vector2 diff  = getpointerPosInBoardSpace() - (Vector2)selected.transform.localPosition;
            float   angle = Mathf.Repeat(Vector2.SignedAngle(myTransform.right, diff) + 360.0f, 360.0f);



            Dir userDir = Match3.Utils.getSwipeDirection(diff, currentData.swipeDelta, angle);
            int otherRow = selected.tileModel.row, otherCol = selected.tileModel.col;
            switch (userDir)
            {
            case Dir.Up:
                ++otherRow;
                break;

            case Dir.Down:
                --otherRow;
                break;

            case Dir.Left:
                --otherCol;
                break;

            case Dir.Right:
                ++otherCol;
                break;

            case Dir.NoDir:
                return;
            }

            if (otherCol < 0 || otherCol >= currentData.numCols || otherRow < 0 || otherRow >= currentData.numRows)
            {
                return;
            }



            TileModel other = boardModel.getTileModelAt(otherRow, otherCol);
            if (other == null || !boardModel.canSwap(selected.tileModel, other))
            {
                return;
            }

            Assert.IsNotNull(other.AttachedTileActor);

            TileActor otherActor = other.AttachedTileActor;

            //controller work,update model,disable view
            //model work
            boardModel.swapTiles(selected.tileModel, other);
            //view work
            userInput.enabled = false;

            StartCoroutine(_tileMovmentAndStabilization(selected, otherActor, currentData.tileMovementTime, onStabilizatonOver));
        }
    }