コード例 #1
0
 /// <summary>
 /// 删除所有的数据
 /// </summary>
 /// <param name="isDeleteShowingItems">=true 标示立刻删除所有的项,=false 则标示显示完之后再删除</param>
 public virtual void ClearAllContentItem(bool isDeleteShowingItems)
 {
     RececlyMessageItems();
     mAllContentInfors.Clear();
     mAllShowingContentMessageItem.Clear();
     mAllRecycleMessage.Clear();
     mWillShowContent    = null;
     mLastShowContenItem = null;
 }
コード例 #2
0
    public virtual void ShowMessage(LoopContentItemInfor itemInfor, bool isEnableAfterShow)
    {
        if (itemInfor == null)
        {
            return;
        }
        ++MessageID;

        LoopContentItemInfor infor = new LoopContentItemInfor(itemInfor, MessageID, isEnableAfterShow);

        mAllContentInfors.Add(infor);
    }
コード例 #3
0
    ///// <summary>
    ///// 获取上一个显示的内容
    ///// </summary>
    ///// <param name="current"></param>
    ///// <returns></returns>
    //private LoopContentItemInfor GetPreviousShowContentItem(LoopContentItemInfor current)
    //{
    //    if (mAllContentInfors.Count == 0)
    //        return null;

    //    for (int dex = 0; dex < mAllContentInfors.Count; dex++)
    //    {
    //        if (mAllContentInfors[dex].mMessageID == current.mMessageID)
    //        {
    //            if (dex != 0)
    //                return mAllContentInfors[dex - 1];
    //            return null;
    //        }
    //    }
    //    return null;
    //}

    //private LoopContentItemInfor GetFirstShowContentItem(ref Queue<LoopContentItemInfor> dataSorces)
    //{
    //    if (dataSorces == null || dataSorces.Count == 0)
    //        return null;
    //    return dataSorces.Dequeue();
    //}

    #endregion

    #region 对外接口

    /// <summary>
    /// 添加一个要显示的内容
    /// </summary>
    /// <param name="msg"></param>
    /// <param name="isEnableAfterShow">是否只显示一次</param>
    public virtual void ShowMessage(string msg, bool isEnableAfterShow)
    {
        if (string.IsNullOrEmpty(msg))
        {
            return;
        }

        ++MessageID;
        LoopContentItemInfor itemInfor = new LoopContentItemInfor(msg, MessageID, isEnableAfterShow);

        mAllContentInfors.Add(itemInfor);
    }
コード例 #4
0
 public LoopContentItemInfor(LoopContentItemInfor infor, int messageID, bool isEnableAfterShow)
 {
     mMessageID         = messageID;
     mContentMessage    = infor.mContentMessage;
     mIsEnableAfterShow = isEnableAfterShow;
 }
コード例 #5
0
    protected virtual bool DoLoopShowContent()
    {
        if (mViewMaskRectTrans.childCount >= mMaxShowingItemCount)
        {
            return(false);
        }

        mWillShowContent = GetNextShowContentItem();
        if (mWillShowContent == null)
        {
            return(false);
        }
        mAllContentInfors.RemoveAt(0);

        UILanternMessageItem tempLastMessageItem = mLastShowContenItem; //使用临时变量避免修改原有的引用

        //  EditorPauseApplication.Pause();
        if (tempLastMessageItem == null && mViewMaskRectTrans.childCount > 0)
        {
            tempLastMessageItem = mViewMaskRectTrans.GetChild(mViewMaskRectTrans.childCount - 1).GetComponent <UILanternMessageItem>();
        }

        float endAnchorPos = 0, tweenTime = 0;
        UILanternMessageItem viewItem = GetMeessageItem();

        viewItem.ShowContent(mWillShowContent);

        if (tempLastMessageItem != null)
        {
            Rect LastShowTargetRect = tempLastMessageItem.rectTransform.GetCanvasRect_Standard(mCanvas);

            if (LastShowTargetRect.x + LastShowTargetRect.width >= mViewMaskRect.x + mViewMaskRect.width - mContentItemSpace) //这里-mContentItemSpace 为了确保两个项之间的距离最小是mContentItemSpace
            {
                //    Debug.Log("上一个记录很长 超过Mask区域 则下一个消息接在这个消息后面 " + mLastShowContenItem.rectTransform.anchoredPosition.x);
                viewItem.rectTransform.anchoredPosition = new Vector2(tempLastMessageItem.rectTransform.anchoredPosition.x + tempLastMessageItem.rectTransform.rect.width + mContentItemSpace, 0);
            } //上一个记录很长 超过Mask区域 则下一个消息接在这个消息后面
            else
            {
                viewItem.rectTransform.anchoredPosition = new Vector2(mViewMaskRectTrans.rect.width, 0);
            } //在显示区域的右边开始
        }
        else
        {
            viewItem.rectTransform.anchoredPosition = new Vector2(mViewMaskRectTrans.rect.width, 0);
        }

        endAnchorPos        = -1 * viewItem.mWidth - mContentItemSpace; //防止边界问题 每个消息多位移一点点
        mLastShowContenItem = viewItem;


        tweenTime = mBaseTweenTime * Mathf.Abs(endAnchorPos - viewItem.rectTransform.anchoredPosition.x) / mBaseTweenDistance;
        Tweener tween = viewItem.rectTransform.DOAnchorPosX(endAnchorPos, tweenTime).SetEase(Ease.Linear).OnComplete(() =>
        {
            Rect viewTargetRect = viewItem.rectTransform.GetCanvasRect_Standard(mCanvas);
            Rect mViewMaskRect  = mViewMaskRectTrans.GetCanvasRect_Standard(mCanvas);
            if (mViewMaskRect.Overlaps(viewTargetRect) == false)
            {
                //  Debug.Log("OnCompleteLastTween Recycle " + viewItem.gameObject.name);
                if (mAllShowingContentMessageItem.Count > 0)
                {
                    if (mAllShowingContentMessageItem.Peek() != viewItem)
                    {
                        Debug.Log("保存的数据记录与存在的不对应  "); //当调用了ClearAllContentItem 接口后,由于没有删除已经存在的消息 这里可能不一致
                    }
                    else
                    {
                        mAllShowingContentMessageItem.Dequeue();
                    }
                }

                DeleteMeessageItem(viewItem, true);
            }

            if (OnCompleteTweenCallback != null)
            {
                OnCompleteTweenCallback(viewItem);
            }
        });

        viewItem.SetTweener(tween);

        mAllShowingContentMessageItem.Enqueue(viewItem);

        return(true);
    }