/// <summary> /// Center the panel on the specified target. /// </summary> // void CenterOn (Transform target, Vector3 panelCenter) // { // if (target != null && mScrollView != null && mScrollView.panel != null) // { // Transform panelTrans = mScrollView.panel.cachedTransform; // mCenteredObject = target.gameObject; // // // Figure out the difference between the chosen child and the panel's center in local coordinates // Vector3 cp = panelTrans.InverseTransformPoint(target.position); // Vector3 cc = panelTrans.InverseTransformPoint(panelCenter); // Vector3 localOffset = cp - cc; // // // Offset shouldn't occur if blocked // if (!mScrollView.canMoveHorizontally) localOffset.x = 0f; // if (!mScrollView.canMoveVertically) localOffset.y = 0f; // localOffset.z = 0f; // // // Spring the panel to this calculated position // #if UNITY_EDITOR // if (!Application.isPlaying) // { // panelTrans.localPosition = panelTrans.localPosition - localOffset; // // Vector4 co = mScrollView.panel.clipOffset; // co.x += localOffset.x; // co.y += localOffset.y; // mScrollView.panel.clipOffset = co; // } // else // #endif // { // SpringPanelMoveBy.Begin(mScrollView.panel.cachedGameObject, -localOffset, springStrength).onFinished = onFinished; // //SpringPanel.Begin(mScrollView.panel.cachedGameObject,panelTrans.localPosition - localOffset, springStrength).onFinished = onFinished; // } // } // else mCenteredObject = null; // // // Notify the listener // if (onCenter != null) onCenter(mCenteredObject); // } /// <summary> /// Center the panel on the specified target. /// </summary> // public void CenterOn (Transform target) // { // if (mScrollView != null && mScrollView.panel != null) // { // Vector3[] corners = mScrollView.panel.worldCorners; // Vector3 panelCenter = (corners[2] + corners[0]) * 0.5f; // CenterOn(target, panelCenter); // } // } private void CenterOn() { if (mScrollView.movement == UIScrollViewSimple.Movement.Horizontal) { var pos = mScrollView.transform.localPosition; var offset = pos.x; var grid = mScrollView.thisGrid; var cellSize = grid.cellWidth; var relative = new Vector3(); if (offset < 0) { if (offset > -cellSize / 2.0f) { relative = new Vector3(-offset, 0, 0); SpringPanelMoveBy.Begin(mScrollView.panel.gameObject, relative, 13f, onFinished).strength = springStrength; } else { relative = new Vector3(-grid.cellWidth - offset, 0, 0); SpringPanelMoveBy.Begin(mScrollView.panel.gameObject, relative, 13f, onFinished).strength = springStrength; } } else { relative = new Vector3(-offset, 0, 0); SpringPanelMoveBy.Begin(mScrollView.panel.gameObject, relative, 13f, onFinished).strength = springStrength; } } else { } }
/// <summary> /// Advance toward the target position. /// </summary> protected virtual void AdvanceTowardsPosition() { float delta = RealTime.deltaTime; bool trigger = false; Vector3 before = mTrans.localPosition; Vector3 after = NGUIMath.SpringLerp(before, before + target, strength, delta); Vector3 offset = after - before; target = target - offset; //bool isLast = false; if (target.sqrMagnitude < 0.01f) { after = target; enabled = false; trigger = true; //isLast = true; } UIScrollViewSimple tempScrollViewSimple = mTrans.GetComponent <UIScrollViewSimple>(); if (tempScrollViewSimple != null) { tempScrollViewSimple.MoveRelative(offset, true); //if (isLast) //{ // if (tempScrollViewSimple.centerOnChild != null) // { // tempScrollViewSimple.centerOnChild.Recenter(); // } //} } else { mTrans.localPosition = after; Vector2 cr = mPanel.clipOffset; cr.x -= offset.x; cr.y -= offset.y; mPanel.clipOffset = cr; } if (mDrag != null) { mDrag.UpdateScrollbars(false); } if (tempScrollViewSimple != null) { tempScrollViewSimple.UpdateScrollbars(false); } if (trigger && onFinished != null) { current = this; onFinished(); current = null; } }
/// <summary> /// Start the tweening process. /// </summary> static public SpringPanelMoveBy Begin(GameObject go, Vector3 pos, float strength, SpringPanel.OnFinished act = null) { SpringPanelMoveBy sp = go.GetComponent <SpringPanelMoveBy>(); if (sp == null) { sp = go.AddComponent <SpringPanelMoveBy>(); } sp.target = pos; sp.strength = strength; sp.onFinished = act; sp.enabled = true; return(sp); }