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; }
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()); } }