Ejemplo n.º 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);
    }
Ejemplo n.º 2
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;
        }
    }