IEnumerator ShowItem <T>(int defaultNum, List <T> dataGroup, bool isSync) { for (int i = 0; i < dataGroup.Count; i++) { if (i < (defaultNum)) { BaseDragChild itemChild = GetBaseDragChildByDisableGroup(); SetItemPos(itemChild, i); itemChild.Init(dataGroup[i]); itemChild.mDataIndex = i; SetItemShowEnable(itemChild.transform, true); mActiveDragChildGroup.Add(itemChild); } if (i == 0) { mUIScrollView.ResetPosition(); } if (isSync) { yield return(null); } if (i == defaultNum) { mUIScrollView.ResetPosition(); } } }
void SetItemPos(BaseDragChild dragChild, int itemDataIndex) { int posXindex = itemDataIndex % mWidthNum; int posYindex = itemDataIndex / mWidthNum;// +(posXindex > 0 ? 1 : 0); dragChild.transform.localPosition = new Vector3(posXindex * mPosWidth, -posYindex * mPosHeight); dragChild.mIndex = itemDataIndex; }
bool IsDisable(BaseDragChild dragChild, BaseDragChild centerChild, ref float distance) { bool isDisable = false; float pos1 = IsHorizontal ? dragChild.mTran.localPosition.x : dragChild.mTran.localPosition.y; float pos2 = IsHorizontal ? centerChild.mTran.localPosition.x : centerChild.mTran.localPosition.y; distance = Mathf.Abs(Mathf.Abs(pos2) - Mathf.Abs(pos1)); if (distance > DisableItemDis) { isDisable = true; } return(isDisable); }
bool IsActiveNew(BaseDragChild dragChild, BaseDragChild centerChild, GetItemType targetMoveType) { bool isActiveNew = false; if (dragChild != null && centerChild != null) { float pos1 = IsHorizontal ? dragChild.mTran.localPosition.x : dragChild.mTran.localPosition.y; float pos2 = IsHorizontal ? centerChild.mTran.localPosition.x : centerChild.mTran.localPosition.y; float distance = Mathf.Abs(Mathf.Abs(pos1) - Mathf.Abs(pos2)); if (distance < TargetActiveItemDis(targetMoveType)) { isActiveNew = true; } } return(isActiveNew); }
BaseDragChild getCenterPosChild() { float minDis = 999; BaseDragChild getChild = null; for (int i = 0; i < mActiveDragChildGroup.Count; i++) { var child = mActiveDragChildGroup[i]; float pos1 = IsHorizontal ? child.mTran.localPosition.x : child.mTran.localPosition.y; float pos2 = IsHorizontal ? mUIScrollviewTran.localPosition.x : mUIScrollviewTran.localPosition.y; float distance = Mathf.Abs(Mathf.Abs(pos1) - Mathf.Abs(pos2)); if (distance <= minDis) { minDis = distance; getChild = child; } } return(getChild); }
void CheckMoveItem() { float upPos = -999999; float downPos = 99999; BaseDragChild upChild = null; BaseDragChild downChild = null; float leftPos = 999999; float rightPos = -99999; BaseDragChild leftChild = null; BaseDragChild rightChild = null; BaseDragChild centerChild = getCenterPosChild(); if (centerChild == null) { return; } for (int i = mActiveDragChildGroup.Count - 1; i >= 0; i--) { var child = mActiveDragChildGroup[i]; float distance = 0; bool isDisable = IsDisable(child, centerChild, ref distance); if (isDisable) { mActiveDragChildGroup.RemoveAt(i); //child.gameObject.SetActive(false); SetItemShowEnable(child.transform, false); mDisableDragChildGroup.Enqueue(child); } float childPosY = child.mTran.position.y; float childPosX = child.mTran.position.x; if (!IsHorizontal) { if (childPosY > upPos) { upPos = childPosY; upChild = child; } if (childPosY < downPos) { downPos = childPosY; downChild = child; } } else { if (childPosX < leftPos) { leftPos = childPosX; leftChild = child; } if (childPosX > rightPos) { rightPos = childPosX; rightChild = child; } } } if (!IsHorizontal) { if (IsActiveNew(upChild, centerChild, GetItemType.Up)) { OnMoveItem(GetItemType.Up); } if (IsActiveNew(downChild, centerChild, GetItemType.Down)) { OnMoveItem(GetItemType.Down); } } else { if (IsActiveNew(leftChild, centerChild, GetItemType.Left)) { OnMoveItem(GetItemType.Left); } if (IsActiveNew(rightChild, centerChild, GetItemType.Right)) { OnMoveItem(GetItemType.Right); } } }