public void Operate(Operation op) { switch (op.opType) { case 0: { generalPanelUI.InsertPuzzle(op.opPuzzle, false); break; } case 1: { PuzzleItemData opPuzzleItemData = op.opPuzzle.GetComponent <PuzzleItemUI>().puzzleItemData; generalPanelUI.generalPanelData.ModiLayout(GeneralPanelData.GridType.Blank, opPuzzleItemData); opPuzzleItemData.PanelGridIndex = op.newGridIndex; generalPanelUI.InsertPuzzle(op.opPuzzle, false); break; } case 2: { generalPanelUI.RemovePuzzle(op.opPuzzle, false); break; } default: break; } }
public void OnEndDrag(PointerEventData pointerEventData, PuzzleItemUI puzzleItemUI, GeneralPanelUI generalPanelUI) { if (gameOverFlag) { return; } if (puzzleItemUI.puzzleItemData.Plockstate) { return; } if (!puzzleItemUI.DraggedState) { return; } if (firstDragPointerID != pointerEventData.pointerId)//限制手指pointerId不同的不可被放置,可用于限制只能单指操作 { return; } miniMapController.RefreshFlag = true; //拖动结束后,满足一定条件时拼图可以被插进面板,否则移除生成的拼图(隐藏显示) PuzzleItemData puzzleItemData = puzzleItemUI.puzzleItemData; Debug.Log("End Drag At:" + pointerEventData.position); puzzleItemUI.cloneForMove.SetActive(false); int gridIndex = -1; int[] blankLayout = null; int interactRet = generalPanelUI.InteractWithPuzzle(puzzleItemUI.cloneForMove.GetComponent <PuzzleItemUI>(), out gridIndex, out blankLayout); puzzleItemData.PanelGridIndex = gridIndex; generalPanelUI.ShowPreCheckResult(2); //FINISH:进行操作记录,interactRet为0时,进行填充记录或位置移动记录;interactRet为3时,进行删除记录(操作历史记录的实现写于GeneralPanelUI中) if (interactRet == 0)//如果拼图在满足填充条件的位置 { //把拼图插入 generalPanelUI.InsertPuzzle(puzzleItemUI.gameObject); } else if (interactRet == 1 || interactRet == 2) //如果拼图在不满足填充条件以及不在删除区的其他位置 { if (!puzzleItemData.NotSettleFlag) //如果被开始拖的拼图已经放置了 { puzzleItemData.PanelGridIndex = puzzleItemData.LastPanelGridIndex; generalPanelUI.InsertPuzzle(puzzleItemUI.gameObject, false); } Debug.Log("not fit " + interactRet); } else if (interactRet == 3)//如果拼图在删除区 { //删除 if (!puzzleItemData.NotSettleFlag) { Debug.Log("删除拼图"); puzzleItemData.PanelGridIndex = puzzleItemData.LastPanelGridIndex; generalPanelUI.RemovePuzzle(puzzleItemUI.gameObject); } generalPanelUI.deleteParticleEffect.Play(); DragController.VibrateFeedbackIntern(); } //FINISH:deleteArea缩小为1 generalPanelUI.OnDeleteAreaFlag = false; StartCoroutine(generalPanelUI.DeleteAreaLinearScaleDown()); // generalPanelUI.deleteArea.transform.localScale = Vector3.one; puzzleItemUI.DraggedState = false; generalDragFlag = false; //TODO:deleteArea置為透明 generalPanelUI.SetDeleteAreaTransparent(true); }