public static void SetBlockToBoard(Pice pice, int indexX, int indexY) { PiceMover.SetBlockToFloat(pice); pice.ForeachPiceOfBlockWhitShift((onePice, shift) => { var onePiceIndexX = indexX + shift.x; var onePiceIndexY = indexY + shift.y; Puzzle.instance.board.Put(onePice, onePiceIndexX, onePiceIndexY); }); }
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 static void SetToSide(Pice pice, int index) { Assert.IsTrue(pice.linkingList.Count == 0, "only non-linked pice can'bt be set to side."); PiceMover.SetBlockToFloat(pice); if (index != -1) { Puzzle.instance.side.Insert(pice, index); pice.owner = PiceOwner.Side; } else { Puzzle.instance.side.Append(pice); pice.owner = PiceOwner.Side; } }
/// <summary> /// 每当开始新拼图时调用 /// </summary> /// <param name="texture"></param> /// <param name="cellPixelSize"></param> public void StartPuzzle(Sprite content, int cellPixelSize) { Clean(); EXPAND = (int)(cellPixelSize * 0.25f); expanedTexture = ExpandTexture(content); map = new Map(); map.Init(expanedTexture, EXPAND, cellPixelSize); board.Init(map.validWidth, map.validHeight, map.xCount, map.yCount); side.Init(200); //side.Init(map.validHeight, map.yCount); var count = map.xCount * map.yCount; var indexList = new List <int>(); for (int i = 0; i < count; i++) { indexList.Add(i); } if (SHUFF) { indexList = ArraryUtil.GetRandomList(indexList); } foreach (var index in indexList) { var pice = PiceManager.Create(map, index); PiceMover.SetToSide(pice, -1); } //side.RepositionPiceList(); side.RepositionPiceListNoAnimation(); if (!DEBUG) { core.HideDot(); } // board 的 scrollRect content位置归零 var p = side.scrollView.content.localPosition; p.x = 0; side.scrollView.content.localPosition = p; // 设置 valid rect sprite 到参考图 core.validSpriet.sprite = map.validSprite; core.validSpriet.gameObject.SetActive(false); }
public void UpdatePiceOwner(Pice pice) { if (pice.owner == PiceOwner.Side) { var inSide = side.Rect.Contains(pice.transform.position); if (!inSide) { // 认为从side中拖出 //side.Remove(pice); PiceMover.SetBlockToFloat(pice); side.RepositionPiceList(); pice.TweenToScale(1); side.scrollView.AnimateFixContentPosition(); } else { var rect = side.GetCellRect(pice.sideIndex); if (!rect.Contains(pice.transform.position)) { // 认为在side中移动了位置 //side.Remove(pice); PiceMover.SetBlockToFloat(pice); var insertIndex = side.GetNearestCellIndex(pice); PiceMover.SetToSide(pice, insertIndex); side.RepositionPiceList(); side.scrollView.AnimateFixContentPosition(); } } } else if (pice.owner != PiceOwner.Side) { var inSide = side.Rect.Contains(pice.transform.position); if (inSide) { // 认为拖入side var insertIndex = side.GetNearestCellIndex(pice); PiceMover.SetToSide(pice, insertIndex); side.RepositionPiceList(); side.scrollView.AnimateFixContentPosition(); } } }
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()); } }
public void SetToFloating() { PiceMover.SetBlockToFloat(this); //RemoveFromOwner(); this.owner = PiceOwner.Floating; }