예제 #1
0
        static internal int checkDelegate(IntPtr l, int p, out SpringPosition.OnFinished ua)
        {
            int op = extractFunction(l, p);

            if (LuaDLL.lua_isnil(l, p))
            {
                ua = null;
                return(op);
            }
            else if (LuaDLL.lua_isuserdata(l, p) == 1)
            {
                ua = (SpringPosition.OnFinished)checkObj(l, p);
                return(op);
            }
            LuaDelegate ld;

            checkType(l, -1, out ld);
            if (ld.d != null)
            {
                ua = (SpringPosition.OnFinished)ld.d;
                return(op);
            }
            LuaDLL.lua_pop(l, 1);

            l  = LuaState.get(l).L;
            ua = () =>
            {
                int error = pushTry(l);

                ld.pcall(0, error);
                LuaDLL.lua_settop(l, error - 1);
            };
            ld.d = ua;
            return(op);
        }
예제 #2
0
    /// <summary>
    /// 目前只支持横向的滚动条。
    /// 只支持减少一个子控件,并且移除的子控件会移动到滚动条最右边或最左边,位于被移除的控件右边的控件会往左移动一个itemsize的距离(包括被移除的控件)。
    /// </summary>
    /// <param name="goItem"></param>
    /// <param name="newSize"></param>
    /// <param name="aniTime"></param>
    /// <param name="aniStrenth"></param>
    /// <param name="onFinish"></param>
    public void DisappearOneAndMoveOn(GameObject goItem, int newSize, float aniTime, float aniStrenth, SpringPosition.OnFinished onFinish)
    {
        _aniTime          = aniTime;
        totalSize         = newSize;
        _aniSpringStrenth = aniStrenth;
        _onAniFinish      = onFinish;
        for (int i = 0; i < mChildren.size; ++i)
        {
            Transform t = mChildren[i];

            if (t.gameObject == goItem)
            {
                goItem.SendMessage("OnWrapDisappear", aniTime, SendMessageOptions.DontRequireReceiver);
                StartCoroutine("MoveOn", goItem);
                break;
            }
        }
    }
예제 #3
0
    private IEnumerator MoveOn(GameObject goItem)
    {
        // 等待消失动画完成
        yield return(new WaitForSeconds(_aniTime));

        goItem.SendMessage("OnWrapDisappearEnd", SendMessageOptions.DontRequireReceiver);

        Vector3 disappearPos = goItem.transform.localPosition;
        // 移到最后或者最前
        Vector3 rightPos = GetRightestPos() + new Vector3(itemSize, 0f, 0f);

        // 可以移动到最右
        // 不需要取绝对值,横向滚动条物件的x值肯定大于等于0
        // 纵向的才要
        if (Mathf.RoundToInt(rightPos.x / itemSize) < totalSize)
        {
            goItem.transform.localPosition = rightPos;
            onUpdateItem(goItem.transform, Mathf.Abs(Mathf.RoundToInt(goItem.transform.localPosition.x / itemSize)));
        }
        else
        {
            Vector3 leftPos = GetLeftestPos() - new Vector3(itemSize, 0f, 0f);

            // 可以移动最左
            // 这里不能取绝对值。。 否则结果肯定大于等于0了
            if (Mathf.RoundToInt(leftPos.x / itemSize) >= 0)
            {
                goItem.transform.localPosition = leftPos;
                onUpdateItem(goItem.transform, Mathf.Abs(Mathf.RoundToInt(goItem.transform.localPosition.x / itemSize)));
            }
            else
            {
                // 两边都不满足,则移动到最右,并且隐藏
                goItem.transform.localPosition = rightPos;
                NGUITools.SetActive(goItem, false);
            }
        }

        // 如果总大小小于预留控件大小,则需要隐藏刚消失的控件
//         if (totalSize < mChildren.size)
//         {
//             NGUITools.SetActive(goItem, false);
//         }
//         else
//         {
//             onUpdateItem(goItem.transform, Mathf.Abs(Mathf.RoundToInt(goItem.transform.localPosition.x / itemSize)));
//         }

        bool hasSpring = false;

        // 超过消失点的控件,spring到合适位置
        // to do 如果是不可见的控件,不能用spring,直接设置到目标位置
        for (int i = 0; i < mChildren.size; ++i)
        {
            Transform t = mChildren[i];

            if (t.localPosition.x > disappearPos.x)
            {
                if (NGUITools.GetActive(t.gameObject))
                {
                    hasSpring = true;
                    if (Mathf.RoundToInt(t.localPosition.x - disappearPos.x) == itemSize)
                    {
                        t.gameObject.SendMessage("OnWrapSpringBegin", SendMessageOptions.DontRequireReceiver);
                        SpringPosition.Begin(t.gameObject, t.localPosition - new Vector3(itemSize, 0f, 0f), _aniSpringStrenth).onFinished = _onAniFinish;
                    }
                    else
                    {
                        SpringPosition.Begin(t.gameObject, t.localPosition - new Vector3(itemSize, 0f, 0f), _aniSpringStrenth);
                    }
                }
                else
                {
                    t.localPosition = t.localPosition - new Vector3(itemSize, 0f, 0f);
                }
            }
        }

        if (!hasSpring)
        {
            if (_onAniFinish != null)
            {
                _onAniFinish();
                _onAniFinish = null;
            }
        }
    }