Beispiel #1
0
        private bool JudgeCanDrag(int view_index_, int model_width, ENUM_ITEM_DIRECTION neighbour_dir)
        {
            int neighbour_index = -1;

            switch (neighbour_dir)
            {
            case ENUM_ITEM_DIRECTION.E_UP:
                neighbour_index = CartoonUtil.GetUpIndex(view_index_, model_width, this.anchor_w_size, this.anchor_h_size);
                break;

            case ENUM_ITEM_DIRECTION.E_DOWN:
                neighbour_index = CartoonUtil.GetDownIndex(view_index_, model_width, this.anchor_w_size, this.anchor_h_size);
                break;

            case ENUM_ITEM_DIRECTION.E_LEFT:
                neighbour_index = CartoonUtil.GetLeftIndex(view_index_, model_width, this.anchor_w_size, this.anchor_h_size);
                break;

            case ENUM_ITEM_DIRECTION.E_RIGHT:
                neighbour_index = CartoonUtil.GetRightIndex(view_index_, model_width, this.anchor_w_size, this.anchor_h_size);
                break;
            }

            if (-1 == neighbour_index)
            {
                return(false);
            }

            return(CanBeExchanged(neighbour_index));
        }
Beispiel #2
0
        private bool JudgeCanDrag(CartoonLongRotateView view_, ENUM_ITEM_DIRECTION neighbour_dir)
        {
            Vector3[] fourCornersArray = new Vector3[4];
            view_.m_rect.GetWorldCorners(fourCornersArray);

            //Vector2[] fourScreenCornersArray = new Vector2[4];
            //for (int i = 0; i < fourCornersArray.Length; ++i)
            //{
            //    fourScreenCornersArray[i] = m_cam.WorldToScreenPoint(fourCornersArray[i]);
            //}

            switch (neighbour_dir)
            {
            case ENUM_ITEM_DIRECTION.E_UP:
            case ENUM_ITEM_DIRECTION.E_DOWN:
            {
                return(JudgeOverflow(fourCornersArray, m_play_rect_4_corners, ENUM_JUDGE_TYPE.E_Y));
            }

            case ENUM_ITEM_DIRECTION.E_LEFT:
            case ENUM_ITEM_DIRECTION.E_RIGHT:
            {
                return(JudgeOverflow(fourCornersArray, m_play_rect_4_corners, ENUM_JUDGE_TYPE.E_X));
            }

            default:
                return(false);
            }
        }
Beispiel #3
0
    //private void OnClick(GameObject obj)
    //{

    //    ((CartoonRotate)(this.m_model)).ClockwiseRotate();

    //    Vector3 next_ang = this.transform.localEulerAngles + new Vector3(0.0f, 0.0f, -90.0f);

    //    CustomTweenRotation.Begin(this.gameObject, 0.5f, Quaternion.Euler(next_ang));

    //}

    public void Dragging(GameObject go, Vector2 delta, Vector2 pos)
    {
        Vector2 from = pos + delta;

        Vector2 local_pos;

        if (RectTransformUtility.ScreenPointToLocalPointInRectangle(this.m_rect, from, null, out local_pos))
        {
            from = local_pos;

            if (RectTransformUtility.ScreenPointToLocalPointInRectangle(this.m_rect, pos, null, out local_pos))
            {
                Vector2 to = local_pos;

                Vector3 normal     = Vector3.Cross(to, from);
                Vector3 normal_one = normal.normalized;
                Vector3 delta_ang  = new Vector3(0, 0, Vector2.Angle(from, to) * normal_one.z);

                //Debug.Log("delta ang " + delta_ang + "normal one " + normal_one.z);

                if (null != IsCanDrag)
                {
                    ENUM_ROTATE_DIR r_dir = delta_ang.z < 0.0f ? ENUM_ROTATE_DIR.E_CLOCKWISE : ENUM_ROTATE_DIR.E_ANTI_CLOCKWISE;
                    if (false == IsCanDrag(this, (CartoonRotate)this.m_model, r_dir))
                    {
                        if (CanTurnButNotChangeDir(delta_ang.z, r_dir))
                        {
                            transform.Rotate(delta_ang, Space.World);
                        }

                        return;
                    }
                }

                transform.Rotate(delta_ang, Space.World);

                ENUM_ITEM_DIRECTION next_dir = this.CalcCurDir();

                if (this.m_dir != next_dir)
                {
                    this.m_dir = next_dir;

                    if (normal_one.z < 0)
                    {
                        ((CartoonRotate)(this.m_model)).ClockwiseRotate();
                    }
                    else
                    {
                        ((CartoonRotate)(this.m_model)).AntiClockwiseRotate();
                    }
                }
            }
        }
    }
    //public void DragBegin(GameObject go, Vector2 pos)
    //{



    //}


    public void Dragging(GameObject go, Vector2 delta, Vector2 pos)
    {
        Vector2 From = pos + delta;

        Vector2 local_pos;

        if (RectTransformUtility.ScreenPointToLocalPointInRectangle(this.m_rect, From, m_cam, out local_pos))
        {
            From = local_pos;

            if (RectTransformUtility.ScreenPointToLocalPointInRectangle(this.m_rect, pos, m_cam, out local_pos))
            {
                Vector2 to = local_pos;

                Vector3 normal = Vector3.Cross(to, From);

                Vector3 delta_ang = new Vector3(0, 0, Vector2.Angle(From, to) * normal.normalized.z);

                //Debug.Log("delta ang " + delta_ang);

                if (null != IsCanDrag)
                {
                    ENUM_ROTATE_DIR r_dir = delta_ang.z < 0.0f ? ENUM_ROTATE_DIR.E_CLOCKWISE : ENUM_ROTATE_DIR.E_ANTI_CLOCKWISE;
                    if (false == IsCanDrag(this, (CartoonRotate)this.m_model, r_dir))
                    {
                        return;
                    }
                }

                transform.Rotate(delta_ang, Space.World);

                ENUM_ITEM_DIRECTION next_dir = this.CalcCurDir();

                if (this.m_dir != next_dir)
                {
                    this.m_dir = next_dir;

                    if (null != OnDragging)
                    {
                        OnDragging(this, (CartoonRotate)this.m_model);
                    }
                }
            }
        }
    }
Beispiel #5
0
    private bool CanTurnButNotChangeDir(float delta_ang_, ENUM_ROTATE_DIR turn_dir_)
    {
        float next_ang = CalcCurAng() + delta_ang_;

        ENUM_ITEM_DIRECTION cur_dir = this.CalcCurDir();

        switch (cur_dir)
        {
        case ENUM_ITEM_DIRECTION.E_DOWN:
            if (ENUM_ROTATE_DIR.E_CLOCKWISE == turn_dir_)
            {
                if (90.0f <= next_ang && next_ang <= 135.0f)
                {
                    return(true);
                }
            }
            else
            {
                if (45.0f <= next_ang && next_ang <= 90.0f)
                {
                    return(true);
                }
            }
            break;

        case ENUM_ITEM_DIRECTION.E_LEFT:
            if (ENUM_ROTATE_DIR.E_CLOCKWISE == turn_dir_)
            {
                if (0.0f <= next_ang && next_ang <= 45.0f)
                {
                    return(true);
                }
            }
            else
            {
                if (315.0f <= next_ang && next_ang <= 360.0f)
                {
                    return(true);
                }
            }
            break;

        case ENUM_ITEM_DIRECTION.E_RIGHT:
            if (ENUM_ROTATE_DIR.E_CLOCKWISE == turn_dir_)
            {
                if (180.0f <= next_ang && next_ang <= 225.0f)
                {
                    return(true);
                }
            }
            else
            {
                if (135.0f <= next_ang && next_ang <= 180.0f)
                {
                    return(true);
                }
            }
            break;

        case ENUM_ITEM_DIRECTION.E_UP:
            if (ENUM_ROTATE_DIR.E_CLOCKWISE == turn_dir_)
            {
                if (270.0f <= next_ang && next_ang <= 315.0f)
                {
                    return(true);
                }
            }
            else
            {
                if (225.0f <= next_ang && next_ang <= 270.0f)
                {
                    return(true);
                }
            }
            break;
        }

        return(false);
    }
Beispiel #6
0
 public static int GetDirDelta(ENUM_ITEM_DIRECTION from, ENUM_ITEM_DIRECTION to)
 {
     return(0);
 }