Пример #1
0
        /// <summary>
        /// Sets the action.
        /// </summary>
        /// <param name="actionValue">Action value.动作对应的value</param>
        /// <param name="callbackInfor">Callback infor. 是一个key:value的键值对
        ///								key:是0~100的整数,表示动作播放到百分之多少时执行回调,
        ///								而回调方法就是该key所对应的value
        /// </param>

        public void doSetActionWithCallback(string actionName, ArrayList progressCallbackInfor)
        {
            //		if (currActionValue == actionValue) {
            //			return;
            //		}
            //////////////////////////////////////////////////////////////////
            progressPoints.Clear();
            progressCallback.Clear();
            callbackMap.Clear();
            if (progressCallbackInfor != null)
            {
                int count = progressCallbackInfor.Count;
                for (int i = 0; i < count; i++)
                {
                    if (i % 2 == 0)
                    {
                        progressPoints.Add(NumEx.stringToInt(progressCallbackInfor [i].ToString()) / 100.0f);
                    }
                    else
                    {
                        progressCallback.Add(progressCallbackInfor [i]);
                    }
                }

                progressCallbackInfor.Clear();
                progressCallbackInfor = null;
            }
            //////////////////////////////////////////////////////////////////
            PlayAnimation(actionName);
            if (progressPoints.Count > 0)
            {
                progressIndex   = 0;
                isCheckProgress = true;                 // place the code after setAction, beacuse in setAction function ,set isCheckProgress = false;
            }
            else
            {
                isCheckProgress = false;
            }
        }
Пример #2
0
    public void Recenter()
    {
        if (mScrollView == null)
        {
            mScrollView = NGUITools.FindInParents <UIScrollView>(gameObject);

            if (mScrollView == null)
            {
                Debug.LogWarning(GetType() + " requires " + typeof(UIScrollView) + " on a parent object in order to work", this);
                enabled = false;
                return;
            }
            else
            {
                if (mScrollView)
                {
                    mScrollView.centerOnChild   = this;
                    mScrollView.onDragFinished += OnDragFinished;
                }

                if (mScrollView.horizontalScrollBar != null)
                {
                    mScrollView.horizontalScrollBar.onDragFinished += OnDragFinished;
                }

                if (mScrollView.verticalScrollBar != null)
                {
                    mScrollView.verticalScrollBar.onDragFinished += OnDragFinished;
                }
            }
        }
        if (mScrollView.panel == null)
        {
            return;
        }

        Transform trans = transform;

        if (trans.childCount == 0)
        {
            return;
        }

        // Calculate the panel's center in world coordinates
        Vector3[] corners     = mScrollView.panel.worldCorners;
        Vector3   panelCenter = (corners[2] + corners[0]) * 0.5f;

        // Offset this value by the momentum
        Vector3 momentum     = mScrollView.currentMomentum * mScrollView.momentumAmount;
        Vector3 moveDelta    = NGUIMath.SpringDampen(ref momentum, 9f, 2f);
        Vector3 pickingPoint = panelCenter - moveDelta * 0.01f;         // Magic number based on what "feels right"

        float     min          = float.MaxValue;
        Transform closest      = null;
        int       index        = 0;
        int       ignoredIndex = 0;

        // Determine the closest child
        for (int i = 0, imax = trans.childCount, ii = 0; i < imax; ++i)
        {
            Transform t = trans.GetChild(i);
            if (!t.gameObject.activeInHierarchy)
            {
                continue;
            }
            float sqrDist = Vector3.SqrMagnitude(t.position - pickingPoint);

            if (sqrDist < min)
            {
                min          = sqrDist;
                closest      = t;
                index        = i;
                ignoredIndex = ii;
            }
            ++ii;
        }

        // If we have a touch in progress and the next page threshold set
        if (nextPageThreshold > 0f && UICamera.currentTouch != null)
        {
            // If we're still on the same object
            if (mCenteredObject != null && mCenteredObject.transform == trans.GetChild(index))
            {
                Vector3 totalDelta = UICamera.currentTouch.totalDelta;
                totalDelta = transform.rotation * totalDelta;

                float delta = 0f;

                switch (mScrollView.movement)
                {
                case UIScrollView.Movement.Horizontal:
                {
                    delta = totalDelta.x;
                    break;
                }

                case UIScrollView.Movement.Vertical:
                {
                    delta = totalDelta.y;
                    break;
                }

                default:
                {
                    delta = totalDelta.magnitude;
                    break;
                }
                }

                if (Mathf.Abs(delta) > nextPageThreshold)
                {
                    UIGrid       grid     = GetComponent <UIGrid>();
                    CLUILoopGrid loopGrid = GetComponent <CLUILoopGrid>();                    // add by chenbin
                    if (loopGrid == null)
                    {
                        if (grid != null && grid.sorting != UIGrid.Sorting.None)
                        {
                            List <Transform> list = grid.GetChildList();

                            if (delta > nextPageThreshold)
                            {
                                // Next page
                                if (ignoredIndex > 0)
                                {
                                    closest = list [ignoredIndex - 1];
                                }
                                else
                                {
                                    closest = (GetComponent <UIWrapContent> () == null) ? list [0] : list [list.Count - 1];
                                }
                            }
                            else if (delta < -nextPageThreshold)
                            {
                                // Previous page
                                if (ignoredIndex < list.Count - 1)
                                {
                                    closest = list [ignoredIndex + 1];
                                }
                                else
                                {
                                    closest = (GetComponent <UIWrapContent> () == null) ? list [list.Count - 1] : list [0];
                                }
                            }
                        }
                        else
                        {
                            Debug.LogWarning("Next Page Threshold requires a sorted UIGrid in order to work properly", this);
                        }
                        #region add by chenbin
                    }
                    else
                    {
                        int _index = NumEx.stringToInt(closest.name);
                        if (delta > nextPageThreshold)
                        {
                            // Next page
                            if (_index > 0)
                            {
                                _index--;
                                closest = trans.Find(NumEx.nStrForLen(_index, 6));
                            }
                        }
                        else if (delta < -nextPageThreshold)
                        {
                            // Previous page
                            if (_index < loopGrid.list.Count - 1)
                            {
                                _index++;
                                closest = trans.Find(NumEx.nStrForLen(_index, 6));
                            }
                        }
                    }
                    #endregion
                }
            }
        }
        CenterOn(closest, panelCenter);
    }