コード例 #1
0
ファイル: Puzzle.cs プロジェクト: Peng-Zhiyuan/puzzle
    public void LoadInfo(PuzzleInfo info)
    {
        // 把所有 pice 拿起
        foreach (var pice in PiceManager.list)
        {
            //pice.SetToFloating();
            PiceMover.SetBlockToFloat(pice);
            pice.StopTween();
        }

        // 逐个设置 pice 归属
        foreach (var i in info.piceInfoList)
        {
            var index = i.index;
            var pice  = PiceManager.GetByIndex(index);
            if (i.owner == PiceOwner.Board)
            {
                //pice.SetToBoard(i.boardX, i.boardY);
                PiceMover.SetBlockToBoard(pice, i.boardX, i.boardY);
            }
            else if (i.owner == PiceOwner.Side)
            {
                //pice.SetToSide(i.sideIndex);
                //side.Append(pice);
                PiceMover.SetToSide(pice, -1);
            }
            else if (i.owner == PiceOwner.Floating)
            {
                PiceMover.SetToSide(pice, -1);
                //pice.SetToSide(side.count - 1);
            }
            pice.isFixed      = i.isFixed;
            pice.SortingOrder = i.sortingOrder;
            // linking
            pice.linkingList.Clear();
            foreach (var linkingInfo in i.LinkingInfoList)
            {
                var linking = new Linking();
                linking.directory = linkingInfo.directory;
                var linkingToPinceIndex = linkingInfo.piceIndex;
                var linkingToPice       = PiceManager.GetByIndex(linkingToPinceIndex);
                linking.pice = linkingToPice;
                pice.linkingList.Add(linking);
            }
            // edge type
            pice.LeftType   = i.leftType;
            pice.RightType  = i.rightType;
            pice.BottomType = i.bottomType;
            pice.TopType    = i.topType;
        }
        board.RepositionAllPiceNoAnimation();
        side.RepositionPiceListNoAnimation();

        LayerOrderDispatcher.next = info.nextOrder;
    }
コード例 #2
0
ファイル: Puzzle.cs プロジェクト: Peng-Zhiyuan/puzzle
    public void OnRootPiceDragEnd(Pice pice)
    {
        lastDragPice = pice;
        UpdatePiceOwner(pice);
        // 没有连结的 pice, 当拖放释放点不在 board 上时,自动回到 side 上
        if (pice.linkingList.Count == 0)
        {
            var inboard = board.Rect.Contains(pice.transform.position);
            if (!inboard)
            {
                var insertIndex = side.GetNearestCellIndex(pice);
                PiceMover.SetToSide(pice, insertIndex);
                side.RepositionPiceList();
                side.scrollView.AnimateFixContentPosition();
                return;
            }
        }

        // 应该放置到 board 上时
        //board.PlacePice(pice);
        var index = board.GetNearestCellIndex(pice);

        PiceMover.SetBlockToBoard(pice, index.x, index.y);
        var x = board.GetCenterX(index.x);
        var y = board.GetCenterY(index.y);

        pice.TweenBlockToPosition(x, y);
        //board.RepositionAllPice();

        CheckNewLink();
        CheckNewFix();
        var complete = IsAllPiceFixed();

        if (complete)
        {
            Debug.Log("[Core] Complete");
            CoroutineManager.Create(PlayCompleteTask());
        }
    }