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]; } } } }
public void JumpToItem(TurnItem selectItem) { if (!canChangeItem || curCenterItem == null) { return; } changeIndex = selectItem.CurveOffSetIndex; SetHorizontalTargetItemIndex(selectItem); ChangePage(); }
//更新转盘位置 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(); }
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(); }
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)); }
//点击移动至中心 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); }
static public int Sortdepth(TurnItem a, TurnItem b) { return(a.Depth.CompareTo(b.Depth)); }
public void SetScrollView(Turnplate view, TurnItem item) { turnplateScrollView = view; thisTurnItem = item; }