示例#1
0
    void UpdateStateMomentum()
    {
        MoveScrollerPivot(m_DragInput.ScrollDelta);
        bool switchToAnim = !m_DragInput.HasMomentum() || AdjustScrollToLimits();

        if (switchToAnim)
        {
            m_ScrollMode = E_ScrollMode.Anim;

            int stopItemIndex = GetNearestItem(m_DragInput.ScrollDelta.x);
            m_CurrentItemIndex = Mathf.Clamp(stopItemIndex, 0, m_Items.Count - 1);
            //Debug.Log("m_CurrentItemIndex is set to: " + m_CurrentItemIndex);

            //z aktualni rychlosti a vzdalenosti vypocitej cas za jaky tam dorazime
            float distToItem   = Mathf.Abs(m_ScrollPivot.transform.localPosition.x + m_CurrentItemIndex * ItemOffset);
            float curSpeed     = Mathf.Max(m_DragInput.MoveSpeed, m_DragInput.MinSpeed);
            float timeToScroll = distToItem / curSpeed;
            //Debug.Log("Finishing anim - timeToScroll: " + timeToScroll + " dist: " + distToItem + " move speed: " + curSpeed);

            //create transition anim
            m_Transition = new Transition(m_ScrollPivot.transform.localPosition.x,
                                          -(m_CurrentItemIndex * ItemOffset),
                                          timeToScroll,
                                          Tween.Easing.Quad.EaseOut);
        }
    }
示例#2
0
    void UpdateState()
    {
        //mode changes
        //faze: 1) tahneme scroller                                                                 -> touch begin
        //		2) pustime ho ale jeste ma setrvacnost                                              -> touch end
        //		3) setrvacnost klesne pod urcitou hodnotu, doscroloujeme na nejblizsi item			-> momentum klesne pod limit
        //		4) ukonceni scrollu, dal jsme v klidu dokud znova nezacne opet 1)					-> ukonceni transition
        if (m_DragInput.IsDragging && Mathf.Abs(m_DragInput.ScrollDelta.x) > 0.0f /*&& !AdjustScrollToLimits()*/)
        {
            m_ScrollMode = E_ScrollMode.Drag;
            m_Transition = null;
            UpdateStateDrag();
        }
        else
        {
            switch (m_ScrollMode)
            {
            case E_ScrollMode.Idle:
                UpdateStateIdle();
                break;

            case E_ScrollMode.Drag:
                UpdateStateDrag();
                break;

            case E_ScrollMode.Momentum:
                UpdateStateMomentum();
                break;

            case E_ScrollMode.Anim:
                UpdateStateAnim();
                break;
            }
        }
    }
示例#3
0
 void UpdateStateIdle()
 {
     if (m_DragInput.IsDragging && Mathf.Abs(m_DragInput.ScrollDelta.x) > 0.0f)
     {
         m_ScrollMode = E_ScrollMode.Drag;
         MoveScrollerPivot(m_DragInput.ScrollDelta);
     }
 }
示例#4
0
    void UpdateStateAnim()
    {
        Vector2 curPos = m_ScrollPivot.transform.localPosition;

        curPos.x = m_Transition.GetTransition();
        m_ScrollPivot.transform.localPosition = curPos;
        m_ScrollPivot.SetModify(true);
        if (m_Transition.IsDone())
        {
            m_Transition = null;
            m_ScrollMode = E_ScrollMode.Idle;

            if (m_OnSelectionChange != null)
            {
                m_OnSelectionChange(GetSelectedItem());
            }
        }
    }
示例#5
0
    //Doscroluje k itemu na pozici index.
    void SetSelectedItem(int index)
    {
        //reset scroll mode and remove transition
        m_Transition = null;
        m_ScrollMode = E_ScrollMode.Idle;

        //Debug.Log("SetSelectedItem: " + index);
        m_ScrollPivot.transform.localPosition = new Vector2(-index * ItemOffset, m_ScrollPivot.transform.localPosition.y);
        //changed y value because value 0 broke layout in ResearchScroller_Layout
        m_ScrollPivot.SetModify(true);

        //store index of selected item
        m_CurrentItemIndex = index;

        //notify user
        if (m_OnSelectionChange != null)
        {
            m_OnSelectionChange(GetSelectedItem());
        }
    }
示例#6
0
    void UpdateStateDrag()
    {
        if (m_DragInput.IsDragging && Mathf.Abs(m_DragInput.ScrollDelta.x) > 0.0f)
        {
            MoveScrollerPivot(m_DragInput.ScrollDelta);
            if (AdjustScrollToLimits())
            {
                m_ScrollMode = E_ScrollMode.Anim;

                int stopItemIndex = GetNearestItem(m_DragInput.ScrollDelta.x);
                m_CurrentItemIndex = Mathf.Clamp(stopItemIndex, 0, m_Items.Count - 1);
                m_Transition       = new Transition(m_ScrollPivot.transform.localPosition.x,
                                                    -(m_CurrentItemIndex * ItemOffset),
                                                    0.35f,
                                                    Tween.Easing.Linear.EaseNone);
            }
        }
        else
        {
            m_ScrollMode = E_ScrollMode.Momentum;
        }
    }
示例#7
0
    //Doscroluje k itemu na pozici index.
    void ScrollToItem(int index)
    {
        if (m_CurrentItemIndex == index)
        {
            return;
        }

        //Debug.Log("ScrollToItem: " + index);
        m_ScrollMode = E_ScrollMode.Anim;

        //float distToItem = Mathf.Abs(m_ScrollPivot.transform.localPosition.x + index*ItemOffset);
        int   scrCnt     = Mathf.Abs(m_CurrentItemIndex - index);
        float scrollTime = 0.5f + (scrCnt - 1) * 0.15f;

        //create transition anim
        m_Transition = new Transition(m_ScrollPivot.transform.localPosition.x, -(index * ItemOffset), scrollTime, Tween.Easing.Sine.EaseInOut);

        //store index of selected item
        m_CurrentItemIndex = index;

        //notify user by nemel byt potreba, k notifikaci by melo dojit na konci transition.
        //if(m_OnSelectionChange != null)
        //	m_OnSelectionChange( GetSelectedItem() );
    }