Пример #1
0
    public void updateUncommittedSlots(Enums.ArrowDirection dir, Vector3 position, int xlength, int zlength)
    {
        var x = Mathf.FloorToInt(position.x);
        var z = Mathf.FloorToInt(position.z);

        var startIdx = posToBoardIdx(new Vector2(x - xlength / 2,
                                                 z - zlength / 2));
        var endIdx = posToBoardIdx(new Vector2(x + xlength / 2,
                                               z + zlength / 2));

        if (xlength == 1)
        {
            endIdx.x += 1;
        }
        if (zlength == 1)
        {
            endIdx.y += 1;
        }

        IntVector2 newStartIdx, oldStartIdx, newEndIdx, oldEndIdx;

        newStartIdx = oldStartIdx = startIdx;
        newEndIdx   = oldEndIdx = endIdx;
        if (dir == Enums.ArrowDirection.Up)
        {
            newStartIdx.y = endIdx.y - 1;

            oldStartIdx.y = startIdx.y - 1;
            oldEndIdx.y   = startIdx.y;
        }
        else if (dir == Enums.ArrowDirection.Down)
        {
            newEndIdx.y = startIdx.y + 1;

            oldStartIdx.y = endIdx.y;
            oldEndIdx.y   = endIdx.y + 1;
        }
        else if (dir == Enums.ArrowDirection.Right)
        {
            newStartIdx.x = endIdx.x - 1;

            oldStartIdx.x = startIdx.x - 1;
            oldEndIdx.x   = startIdx.x;
        }
        else
        {
            newEndIdx.x = startIdx.x + 1;

            oldStartIdx.x = endIdx.x;
            oldEndIdx.x   = endIdx.x + 1;
        }
        incrementSlots(newStartIdx, newEndIdx);
        decrementSlots(oldStartIdx, oldEndIdx);
        //printBoardSlotMembers();
    }
 private void move(Enums.ArrowDirection direction)
 {
     if (direction == Enums.ArrowDirection.Left)
     {
         this.transform.Translate(new Vector3(-1, 0, 0));
     }
     else if (direction == Enums.ArrowDirection.Right)
     {
         this.transform.Translate(new Vector3(1, 0, 0));
     }
     else if (direction == Enums.ArrowDirection.Up)
     {
         this.transform.Translate(new Vector3(0, 0, 1));
     }
     else
     {
         this.transform.Translate(new Vector3(0, 0, -1));
     }
 }
    private bool getDirectionArrow(out Enums.ArrowDirection direction)
    {
        direction = Enums.ArrowDirection.Left;
        RaycastHit hitInfo;
        var        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        var        hit = Physics.Raycast(ray.origin, ray.direction, out hitInfo, 100f);

        if (hit && hitInfo.transform.tag == "ArrowDirection")
        {
            //Debug.DrawRay(ray.origin, ray.direction * Vector3.Distance(hitInfo.point, ray.origin), Color.cyan, 20f);

            var collider             = hitInfo.collider.transform.parent.name;
            var topLevelParent       = hitInfo.transform.parent.parent.parent;
            var oldTopLevelParentPos = topLevelParent.position;
            if (collider == "Left")
            {
                direction = Enums.ArrowDirection.Left;
                topLevelParent.Translate(new Vector3(-1, 0, 0));
            }
            else if (collider == "Right")
            {
                direction = Enums.ArrowDirection.Right;
                topLevelParent.Translate(new Vector3(1, 0, 0));
            }
            else if (collider == "Up")
            {
                direction = Enums.ArrowDirection.Up;
                topLevelParent.Translate(new Vector3(0, 0, 1));
            }
            else
            {
                direction = Enums.ArrowDirection.Down;
                topLevelParent.Translate(new Vector3(0, 0, -1));
            }
            //boardController.updateBoardSlots(direction, oldTopLevelParentPos, topLevelParent.position, this.xLength, this.zLength);
            boardController.updateUncommittedSlots(direction, topLevelParent.position, this.xLength, this.zLength);
            return(true);
        }
        return(false);
    }