Exemple #1
0
    /// <summary>
    /// 将方块撤回的移动信息存入operation中
    /// </summary>
    void SaveMove(bool isChanged, string name, GameObject sourBoard, GameObject endBoard)
    {
        Operation operation = Operation.GetInstance();
        MoveInf   move      = new MoveInf();

        move.blockName = name;
        move.endBoard  = endBoard;
        move.sourBoard = sourBoard;
        move.sourPos   = transform.position;
        move.sourRoa   = transform.eulerAngles;
        move.isChanged = isChanged;
        operation.AddMoveInf(move);
    }
Exemple #2
0
    public void ClickToUndo()
    {
        if (operations.Count > 0)
        {
            Operation operation = operations.Pop();

            while (operation.operation.Count > 0)
            {
                MoveInf move = operation.operation.Pop();
                UndoMove(move);
            }
        }
        MouseInf.GetInstance().isRelay = true;
    }
Exemple #3
0
    void UndoMove(MoveInf move)
    {
        GameObject block;

        if (move.isChanged)
        {
            GameObject preBlock     = relayBoard.transform.Find(move.blockName).gameObject;
            Vector3    iniPos       = preBlock.GetComponent <blockController>().initBlockPos;
            GameObject blockPrefabs = preBlock.GetComponent <blockController>().changeBlock;
            block = GameObject.Instantiate(blockPrefabs, iniPos, Quaternion.identity, preBlock.transform.parent);
            GameObject.Destroy(preBlock);
            block.GetComponent <blockController>().isChanged = false;
            string          partten = @"\s.*";
            MatchCollection match   = Regex.Matches(preBlock.name, partten);
            string          order   = null;
            if (match.Count > 0)
            {
                order = match[0].ToString();
            }
            block.name = blockPrefabs.name + order;
        }
        else
        {
            block = relayBoard.transform.Find(move.blockName).gameObject;
        }
        blockController controller = block.GetComponent <blockController>();

        if (move.endBoard == manager.JigsawBoard)
        {
            manager.AddPointToList(block, manager.JigsawBoard);
            controller.isAtJigsawBoard = false;
        }
        else
        {
            controller.isAtJigsawBoard = true;
        }
        block.transform.position    = move.sourPos;
        block.transform.eulerAngles = move.sourRoa;
        if (move.sourBoard == manager.JigsawBoard)
        {
            manager.DeletePointFromList(block, manager.JigsawBoard);
            controller.isAtJigsawBoard = true;
        }
        else
        {
            controller.isAtJigsawBoard = false;
        }
    }
Exemple #4
0
    void FixedUpdate()
    {
        if (isMouseLeftDown)
        {
            Ray        ray = cam.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (pickupItem == null)
            {
                // 提取拼图
                Physics.Raycast(ray, out hit, maxRayDistance, blockBoardMask | UILayerMask);
                if (hit.collider != null)
                {
                    GameObject hitObject = hit.collider.gameObject.GetComponentInParent <blockController>().gameObject;
                    pickupBlock(hitObject);
                    pickupItem = hitObject;

                    Operation.CreateNewInstance();
                    operation      = Operation.GetInstance();
                    move           = new MoveInf();
                    move.blockName = pickupItem.name;
                    move.sourPos   = pickupItem.transform.position;
                    move.sourRoa   = pickupItem.transform.eulerAngles;
                    move.isChanged = false;
                    Undo.instance.AddOperation(operation);
                    // 如果在拼图面板,则需要恢复原来的点集
                    if (pickupItem.GetComponent <blockController>().isAtJigsawBoard)
                    {
                        AddPointToList(pickupItem, JigsawBoard);
                        pickupItem.GetComponent <blockController>().isAtJigsawBoard = false;
                        move.sourBoard = JigsawBoard;
                    }
                    else
                    {
                        move.sourBoard = pickupBoard;
                    }
                }
            }
            else
            {
                // 放置拼图
                Physics.Raycast(ray, out hit, maxRayDistance, jigsawBoardMask | pickupBoardMask | UILayerMask);
                if (hit.collider != null)
                {
                    GameObject hitObject = hit.collider.gameObject;
                    if (CanDrop(pickupItem, hitObject))
                    {
                        dropBlock(pickupItem);
                        pickupItem.transform.position = hitObject.transform.position + InWhichBoardArea(pickupItem.transform.position, hitObject.transform.position);
                        if (hitObject.layer == LayerMask.NameToLayer("jigsawBoard"))
                        {
                            DeletePointFromList(pickupItem, hitObject);
                            pickupItem.GetComponent <blockController>().isAtJigsawBoard = true;
                        }
                        mouse.isRelay = true;
                        move.endBoard = hitObject;
                        operation.AddMoveInf(move);
                        pickupItem = null;
                    }
                }
                //else
                //{
                //    dropBlock(pickupItem);
                //    pickupItem.transform.position = pickupItem.GetComponent<blockController>().initBlockPos;
                //    pickupItem = null;
                //}
            }
            isMouseLeftDown = false;
        }
    }
Exemple #5
0
 public void AddMoveInf(MoveInf move)
 {
     operation.Push(move);
 }