Esempio n. 1
0
    private void SetItemsDepth()
    {
        List <TurnItem> temp = new List <TurnItem>();

        for (int i = 0; i < listTurnItems.Count; i++)
        {
            temp.Add(listTurnItems[i]);
        }
        //temp = listTurnItems;     //这样赋值,sort temp之后,源数据也脏掉了
        temp.Sort(Sortdepth);
        if (temp.Count % 2 != 0)
        {
            for (int i = 0; i < temp.Count; i++)
            {
                temp[i].transform.SetSiblingIndex(i);
                int index = (int)(Mathf.Round(i / 2));
                temp[i].RealIndex = index;
                if (i < temp.Count - 1)
                {
                    temp[i].IsCenter = false;
                }
                else
                {
                    temp[i].IsCenter = true;
                    preCenterItem    = curCenterItem;
                    curCenterItem    = temp[i];
                }
            }
        }
        else
        {
            int   index    = 0;
            float temDepth = 0f;
            temDepth = temp[0].Depth;
            for (int i = 0; i < temp.Count; i++)
            {
                temp[i].transform.SetSiblingIndex(i);
                if (temDepth < temp[i].Depth)
                {
                    index++;
                    temDepth = temp[i].Depth;
                }
                temp[i].RealIndex = index;
                if (i < temp.Count - 1)
                {
                    temp[i].IsCenter = false;
                }
                else
                {
                    temp[i].IsCenter = true;
                    preCenterItem    = curCenterItem;
                    curCenterItem    = temp[i];
                }
            }
        }
    }
Esempio n. 2
0
 public void JumpToItem(TurnItem selectItem)
 {
     if (!canChangeItem || curCenterItem == null)
     {
         return;
     }
     changeIndex = selectItem.CurveOffSetIndex;
     SetHorizontalTargetItemIndex(selectItem);
     ChangePage();
 }
Esempio n. 3
0
    //更新转盘位置
    public void UpdateTurnplate(float fValue)
    {
        for (int i = 0; i < listTurnItems.Count; i++)
        {
            TurnItem itemScript      = listTurnItems[i];
            float    xValue          = GetXPosValue(fValue, itemScript.CenterOffSet);
            float    yValue          = GetYPosValue(fValue, itemScript.CenterOffSet);
            float    scaleValue      = GetScaleValue(fValue, itemScript.CenterOffSet);
            float    depthCurveValue = DepthCurve.Evaluate(fValue + itemScript.CenterOffSet) * 10;
            xValue = -totalWidth / 2 + xValue;
            itemScript.UpdateScrollViewItems(xValue, yValue, scaleValue, depthCurveValue);
        }
        // v 来控制ScrollView的Bar值
        float v = 0;

        if (fValue < 0)
        {
            v = Mathf.Abs((fValue - (int)fValue));
            v = 1 - v;
        }
        else
        {
            v = Mathf.Abs((fValue - (int)fValue));
        }
        if (isControl)
        {
            v = Mathf.Round(v * 100) / 100;

            //v = (1.25f * v - 0.125f);
            v = (t2cfactor * v - t2cB);
            //v = (1 - v)*0.8f;
            v = (1 - v) * t2cf;

            if (v < 0)
            {
                v = 1 + v;
                if (SR)
                {
                    SR.horizontalScrollbar.value = v;
                }
            }
            else
            {
                //Debug.Log(v);
                if (SR)
                {
                    SR.horizontalScrollbar.value = v;
                }
            }
        }
        SetItemsDepth();
    }
Esempio n. 4
0
    public void Reset()
    {
        enableLerpTween = false;
        if (tabBar != null)
        {
            tabBar.resetTabBar(listTurnItems.Count);
        }
        if (ScrollControl)
        {
            ScrollControl.SetScrollView(this);
        }
        canChangeItem = true;
        int count = listTurnItems.Count;

        dFactor      = (Mathf.RoundToInt((1f / count) * 10000f)) * 0.0001f;
        mCenterIndex = count / 2;
        if (count % 2 != 0)
        {
            mCenterIndex = (count - 1) / 2;
        }
        int index = 0;

        for (int i = count - 1; i >= 0; i--)
        {
            listTurnItems[i].CurveOffSetIndex = i;
            listTurnItems[i].CenterOffSet     = dFactor * (mCenterIndex - index);
            listTurnItems[i].SetTurnplate(this);
            GameObject    obj    = listTurnItems[i].gameObject;
            TurnItemEvent script = obj.GetComponent <TurnItemEvent>();
            if (script != null)
            {
                script.SetScrollView(this, listTurnItems[i]);
            }
            index++;
        }
        if (!isLoop)
        {
            startCenterIndex = startIndex;
            changeIndex      = startIndex;
        }
        else
        {
            changeIndex      = mCenterIndex;
            startCenterIndex = mCenterIndex;
        }
        listSortedItems    = new List <TurnItem>(listTurnItems.ToArray());
        curCenterItem      = listTurnItems[startCenterIndex];
        curHorizontalValue = 0.5f - curCenterItem.CenterOffSet;
        LerpTweenToTarget(0f, curHorizontalValue, false);
        ChangePage();
    }
Esempio n. 5
0
    private int GetMoveCurveFactorCount(TurnItem preCenterItem, TurnItem newCenterItem)
    {
        int factorCount = 0;

        if (!isLoop)
        {
            factorCount = Mathf.Abs(newCenterItem.CurveOffSetIndex) - Mathf.Abs(preCenterItem.CurveOffSetIndex);
        }
        else
        {
            factorCount = Mathf.Abs(newCenterItem.RealIndex) - Mathf.Abs(preCenterItem.RealIndex);
        }
        return(Mathf.Abs(factorCount));
    }
Esempio n. 6
0
    //点击移动至中心
    public void SetHorizontalTargetItemIndex(TurnItem selectItem)
    {
        if (!canChangeItem)
        {
            return;
        }

        if (curCenterItem == selectItem)
        {
            return;
        }

        canChangeItem = false;
        preCenterItem = curCenterItem;
        curCenterItem = selectItem;

        // 判断在左在右
        float centerXValue = XpositionCurve.Evaluate(0.5f) * totalWidth - totalWidth * 0.5f;
        bool  isRight      = false;

        if (selectItem.transform.localPosition.x > centerXValue)
        {
            isRight = true;
        }

        // 计算距离中心位置
        int   moveIndexCount = GetMoveCurveFactorCount(preCenterItem, selectItem);
        float dvalue         = 0.0f;

        if (isRight)
        {
            dvalue = -dFactor * moveIndexCount;
        }
        else
        {
            dvalue = dFactor * moveIndexCount;
        }

        float originValue = curHorizontalValue;

        LerpTweenToTarget(originValue, curHorizontalValue + dvalue, true);
    }
Esempio n. 7
0
 static public int Sortdepth(TurnItem a, TurnItem b)
 {
     return(a.Depth.CompareTo(b.Depth));
 }
Esempio n. 8
0
 public void SetScrollView(Turnplate view, TurnItem item)
 {
     turnplateScrollView = view;
     thisTurnItem        = item;
 }