示例#1
0
    void OnInitItem(LoopItemObject item, LoopItemData data)
    {
        chatItemData myData   = data as chatItemData;
        chatItem     itemComp = item.widget.GetComponent <chatItem>();

        itemComp.showItemByType(myData.ItemType);

        switch (myData.ItemType)
        {
        case 1:
            itemComp.selfContent.text       = myData.content;
            itemComp.selfUserNameLabel.text = myData.username;
            break;

        case 2:
            itemComp.otherContent.text       = myData.content;
            itemComp.ohterUserNameLabel.text = myData.username;
            GameObject go = itemComp.transform.FindChild("otherChatItem/headImgBg/headImg").gameObject;
            //go.name = "headImg" + myData.uid;
            UIEventListener.Get(go).onClick
                = (g) => { print(myData.uid); };
            break;

        case 3:
            itemComp.timeLable.text = myData.content;

            break;
        }
    }
示例#2
0
 /// <summary>
 /// 设回初始状态
 /// </summary>
 /// <param name="isResetPos">是否重置位置</param>
 public void ResetToBegining(bool isResetPos = true)
 {
     //itemLoop = new Queue<LoopItemObject>();
     if (itemsList != null)
     {
         for (int i = 0; i < itemsList.Count; i++)
         {
             if (!itemLoop.Contains(itemsList[i]))
             {
                 itemsList[i].widget.gameObject.name = "0";
                 itemsList[i].widget.gameObject.SetActive(false);
                 PutItemToLoop(itemsList[i]);
             }
         }
     }
     if (firstItem != null)
     {
         tempFirstItem = isResetPos ? -1 : firstItem.dataIndex;
     }
     lastItem  = null;
     firstItem = null;
     itemsList = null;
     if (isResetPos)
     {
         scrollView.ResetPosition();
     }
 }
示例#3
0
 void InitItemDontReset(LoopItemObject item, int dataIndex, LoopItemData data)
 {
     //UnityEngine.Debug.Log("bbbbbbbbbbbbbbbbbb " + dataIndex);
     item.dataIndex = dataIndex;
     if (OnItemInit != null)
     {
         OnItemInit(item, data);
     }
     if (scrollView.movement == UIScrollView.Movement.Vertical)
     {
         float offsetY = (item.widget.height + gapDis) * dataIndex;
         if (arrangeDirection == ArrangeDirection.Down_to_Up)
         {
             offsetY *= -1f;
         }
         item.widget.transform.localPosition = itemStartPos - new Vector3(0, offsetY, 0);
     }
     else
     {
         float offsetX = (item.widget.width + gapDis) * dataIndex;
         if (arrangeDirection == ArrangeDirection.Right_to_Left)
         {
             offsetX *= -1f;
         }
         item.widget.transform.localPosition = itemStartPos + new Vector3(offsetX, 0, 0);
     }
 }
示例#4
0
    /// <summary>
    /// 构造一个 item 对象
    /// </summary>
    /// <returns>The item.</returns>
    LoopItemObject CreateItem()
    {
        GameObject     go     = NGUITools.AddChild(itemParent, itemPrefab);
        UIWidget       widget = go.GetComponent <UIWidget>();
        LoopItemObject item   = go.GetComponent <LoopItemObject>();//new LoopItemObject();

        item.widget = widget;
        go.SetActive(true);
        return(item);
    }
示例#5
0
    /// <summary>
    /// 用数据列表来初始化scrollview
    /// </summary>
    /// <param name="item">Item.</param>
    /// <param name="indexData">Index data.</param>
    /// <param name="data">Data.</param>
    void InitItem(LoopItemObject item, int dataIndex, LoopItemData data)
    {
        item.dataIndex = dataIndex;

        // print(item.gameObject.name);
        if (OnItemInit != null)
        {
            OnItemInit(item, data);
        }
        item.widget.transform.localPosition = itemStartPos;
    }
示例#6
0
 /// <summary>
 /// 将要移除的item放入对象池中
 /// --这个里我保证这个对象池中存在的对象不超过3个
 /// </summary>
 /// <param name="item">Item.</param>
 void PutItemToLoop(LoopItemObject item)
 {
     if (itemLoop.Count >= 3)
     {
         Destroy(item.widget.gameObject);
         return;
     }
     item.dataIndex = -1;
     item.widget.gameObject.SetActive(false);
     itemLoop.Enqueue(item);
 }
示例#7
0
    void OnItemInit(LoopItemObject item, LoopItemData data)
    {
        chatItemData myData   = data as chatItemData;
        chatItem     itemComp = item.widget.GetComponent <chatItem>();

        itemComp.showItemByType(myData.ItemType);
        itemComp.otherContent.text = myData.content;
        itemComp.selfContent.text  = myData.content;
        itemComp.timeLable.text    = myData.content;
        item.gameObject.name       = "Item" + item.dataIndex;
        //item.widget.gameObject.SetActive(false);
        //print(myData.content +"  " +item.widget.isVisible);
    }
示例#8
0
 /// <summary>
 /// 重置聊天记录
 /// </summary>
 public void InitScollerView()
 {
     datasList = new List <LoopItemData>();
     if (itemsList != null)
     {
         foreach (LoopItemObject v in itemsList)
         {
             PutItemToLoop(v);//全部放入释放池中 但最多储存3个
         }
         itemsList = new List <LoopItemObject>();
     }
     firstItem = null;
     lastItem  = null;
     print("重置数据完成");
 }
示例#9
0
 /// <summary>
 /// 将要移除的item放入对象池中
 /// --这个里我保证这个对象池中存在的对象不超过RealShowCount个
 /// </summary>
 /// <param name="item">Item</param>
 void PutItemToLoop(LoopItemObject item)
 {
     if (itemLoop.Count >= RealShowCount)
     {
         Destroy(item.widget.gameObject);
         return;
     }
     item.dataIndex = -1;
     item.widget.gameObject.SetActive(false);
     if (item.widget.GetComponent <UIToggle>() != null)
     {
         item.widget.GetComponent <UIToggle>().Set(false);
     }
     itemLoop.Enqueue(item);
 }
示例#10
0
    static int get_dataIndex(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            LoopItemObject obj = (LoopItemObject)o;
            int            ret = obj.dataIndex;
            LuaDLL.lua_pushinteger(L, ret);
            return(1);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index dataIndex on a nil value" : e.Message));
        }
    }
示例#11
0
    static int set_widget(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            LoopItemObject obj  = (LoopItemObject)o;
            UIWidget       arg0 = (UIWidget)ToLua.CheckUnityObject(L, 2, typeof(UIWidget));
            obj.widget = arg0;
            return(0);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index widget on a nil value" : e.Message));
        }
    }
示例#12
0
    static int set_dataIndex(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            LoopItemObject obj  = (LoopItemObject)o;
            int            arg0 = (int)LuaDLL.luaL_checknumber(L, 2);
            obj.dataIndex = arg0;
            return(0);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index dataIndex on a nil value" : e.Message));
        }
    }
    static int get_firstItem(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            LoopScrollView obj = (LoopScrollView)o;
            LoopItemObject ret = obj.firstItem;
            ToLua.PushObject(L, ret);
            return(1);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o, "attempt to index firstItem on a nil value"));
        }
    }
    static int set_firstItem(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            LoopScrollView obj  = (LoopScrollView)o;
            LoopItemObject arg0 = (LoopItemObject)ToLua.CheckObject <LoopItemObject>(L, 2);
            obj.firstItem = arg0;
            return(0);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o, "attempt to index firstItem on a nil value"));
        }
    }
示例#15
0
    static int get_lastItem(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            LoopItemScrollView obj = (LoopItemScrollView)o;
            LoopItemObject     ret = obj.lastItem;
            ToLua.Push(L, ret);
            return(1);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index lastItem on a nil value" : e.Message));
        }
    }
示例#16
0
    static int get_widget(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            LoopItemObject obj = (LoopItemObject)o;
            UIWidget       ret = obj.widget;
            ToLua.Push(L, ret);
            return(1);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index widget on a nil value" : e.Message));
        }
    }
示例#17
0
    static int set_lastItem(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            LoopItemScrollView obj  = (LoopItemScrollView)o;
            LoopItemObject     arg0 = (LoopItemObject)ToLua.CheckUnityObject(L, 2, typeof(LoopItemObject));
            obj.lastItem = arg0;
            return(0);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index lastItem on a nil value" : e.Message));
        }
    }
示例#18
0
    /// <summary>
    /// 用数据列表来初始化scrollview
    /// </summary>
    /// <param name="item">Item.</param>
    /// <param name="indexData">Index data.</param>
    /// <param name="data">Data.</param>
    void InitItem(LoopItemObject item, int dataIndex, LoopItemData data)
    {
        if (item == null)
        {
            return;
        }
        //UnityEngine.Debug.Log("aaaaaaaaaaaaaaaa " + dataIndex);
        item.dataIndex = dataIndex;

        if (OnItemInit != null)
        {
            OnItemInit(item, data);
        }
        if (item.widget != null)
        {
            item.widget.transform.localPosition = itemStartPos;
        }
    }
示例#19
0
    LoopItemObject GetBiggestDataIndexItem()
    {
        LoopItemObject biggestItem  = null;
        int            biggestIndex = int.MinValue;

        if (itemsList != null)
        {
            foreach (LoopItemObject item in itemsList)
            {
                if (item.dataIndex > biggestIndex)
                {
                    biggestIndex = item.dataIndex;
                    biggestItem  = item;
                }
            }
        }
        return(biggestItem);
    }
示例#20
0
    LoopItemObject GetSmallestDataIndexItem()
    {
        LoopItemObject smallestItem  = null;
        int            smallestIndex = int.MaxValue;

        if (itemsList != null)
        {
            foreach (LoopItemObject item in itemsList)
            {
                if (item.dataIndex < smallestIndex)
                {
                    smallestIndex = item.dataIndex;
                    smallestItem  = item;
                }
            }
        }
        return(smallestItem);
    }
示例#21
0
 /// <summary>
 /// 在itemsList后面补上一个item
 /// </summary>
 void AddToBack(LoopItemObject backItem, LoopItemObject newItem, int newIndex, LoopItemData newData)
 {
     InitItem(newItem, newIndex, newData);
     // 计算新item的位置
     if (scrollView.movement == UIScrollView.Movement.Vertical)
     {
         float offsetY = backItem.widget.height * 0.5f + gapDis + newItem.widget.height * 0.5f;
         if (arrangeDirection == ArrangeDirection.Down_to_Up)
         {
             offsetY *= -1f;
         }
         newItem.widget.transform.localPosition = backItem.widget.cachedTransform.localPosition - new Vector3(0f, offsetY, 0f);
     }
     else
     {
         float offsetX = backItem.widget.width * 0.5f + gapDis + newItem.widget.width * 0.5f;
         if (arrangeDirection == ArrangeDirection.Right_to_Left)
         {
             offsetX *= -1f;
         }
         newItem.widget.transform.localPosition = backItem.widget.cachedTransform.localPosition + new Vector3(offsetX, 0f, 0f);
     }
 }
示例#22
0
    /// <summary>
    /// 检验items的两端是否要补上或删除
    /// </summary>
    void Validate()
    {
        if (datasList == null || datasList.Count == 0)
        {
            return;
        }

        // 如果itemsList还不存在
        if (itemsList == null || itemsList.Count == 0)
        {
            itemsList = new List <LoopItemObject>();

            LoopItemObject item = GetItemFromLoop();
            if (tempFirstItem == -1)
            {
                InitItem(item, 0, datasList[0]);
            }
            else
            {
                InitItemDontReset(item, tempFirstItem, datasList[tempFirstItem]);
            }
            firstItem = lastItem = item;
            itemsList.Add(item);
            //Validate();
        }

        //
        bool all_invisible = true;

        for (int i = 0; i < itemsList.Count; i++)
        {
            if (itemsList[i].widget.isVisible == true)
            {
                all_invisible = false;
                tempFirstItem = -1;
            }
        }
        if (all_invisible == true)
        {
            if (tempFirstItem == -1)
            {
                if (endDragPos.y > startDragPos.y)
                {
                    if (lastItem.dataIndex < datasList.Count - 1)
                    {
                        if (itemsList.Count > 1)
                        {
                            itemsList.Remove(firstItem);
                            //UnityEngine.Debug.Log("(((((((((((((((((((((( itemList.count is: " + itemsList.Count);
                            PutItemToLoop(firstItem);

                            firstItem = GetSmallestDataIndexItem();//itemsList[0];
                        }

                        LoopItemObject item  = GetItemFromLoop();
                        int            index = lastItem.dataIndex + 1;
                        AddToBack(lastItem, item, index, datasList[index]);
                        lastItem = item;
                        itemsList.Add(item);
                    }
                }
                if (endDragPos.y < startDragPos.y)
                {
                    if (firstItem.dataIndex > 0)
                    {
                        LoopItemObject item = GetItemFromLoop();

                        int index = firstItem.dataIndex - 1;
                        AddToFront(firstItem, item, index, datasList[index]);
                        firstItem = item;
                        itemsList.Insert(0, item);

                        itemsList.Remove(lastItem);
                        //UnityEngine.Debug.Log(")))))))))))))))))))))) itemList.count is: " + itemsList.Count);
                        PutItemToLoop(lastItem);
                        lastItem = GetBiggestDataIndexItem();//itemsList[itemsList.Count - 1];
                    }
                }
                ResetPosition(itemsList);
                return;
            }
            else
            {
                if (lastItem.dataIndex < datasList.Count - 1)
                {
                    LoopItemObject item  = GetItemFromLoop();
                    int            index = lastItem.dataIndex + 1;
                    AddToBack(lastItem, item, index, datasList[index]);
                    lastItem = item;
                    itemsList.Add(item);
                }
                ResetPosition(itemsList);
                return;
            }
        }

        // 先判断前端是否要增减
        if (firstItem.widget.isVisible)
        {
            // 判断要不要在它的前面补充一个item
            if (firstItem.dataIndex > 0)
            {
                LoopItemObject item = GetItemFromLoop();

                // 初化:数据索引、大小、位置、显示
                int index = firstItem.dataIndex - 1;
                //InitItem(item, index, datasList[index]);
                AddToFront(firstItem, item, index, datasList[index]);
                firstItem = item;
                itemsList.Insert(0, item);


                //Validate();
            }
        }
        else
        {
            // 判断要不要将它移除
            // 条件:自身是不可见的;且它后一个item也是不可见的(或被被裁剪过半的).
            //      这有个隐含条件是itemsList.Count>=2.
            if (itemsList.Count >= InvisibleCache)
            {
                bool isRemove = true;
                for (int i = 0; i < InvisibleCache; i++)
                {
                    if (itemsList[i].widget.isVisible)
                    {
                        isRemove = false;
                    }
                }



                if (isRemove)
                {
                    itemsList.Remove(firstItem);
                    //UnityEngine.Debug.Log("!!!!!!!!!!!!!!!!!! itemList.count is: " + itemsList.Count);
                    PutItemToLoop(firstItem);
                    firstItem = GetSmallestDataIndexItem();//itemsList[0];
                }

                //Validate();
            }
        }

        // 再判断后端是否要增减
        if (lastItem.widget.isVisible)
        {
            // 判断要不要在它的后面补充一个item
            //UnityEngine.Debug.Log("11111111111111 lastItem.dataIndex " + lastItem.dataIndex + " datasList.Count " + datasList.Count + " itemlist count is: " + itemsList.Count);
            if (lastItem.dataIndex < datasList.Count - 1)
            {
                //UnityEngine.Debug.Log("2222222222222222 lastItem.dataIndex " + lastItem.dataIndex + " datasList.Count " + datasList.Count);

                LoopItemObject item = GetItemFromLoop();

                // 初化:数据索引、大小、位置、显示
                int index = lastItem.dataIndex + 1;
                AddToBack(lastItem, item, index, datasList[index]);
                lastItem = item;
                itemsList.Add(item);

                //Validate();
            }
        }
        else
        {
            // 判断要不要将它移除
            // 条件:自身是不可见的;且它前一个item也是不可见的(或被被裁剪过半的).
            //      这有个隐含条件是itemsList.Count>=2.
            //UnityEngine.Debug.Log("33333333333333333 lastItem.dataIndex " + lastItem.dataIndex + " datasList.Count " + datasList.Count);
            if (itemsList.Count >= InvisibleCache)
            {
                bool isRemove = true;
                for (int i = 1; i <= InvisibleCache; i++)
                {
                    if (itemsList[itemsList.Count - i].widget.isVisible)
                    {
                        isRemove = false;
                    }
                }
                if (isRemove)
                {
                    //UnityEngine.Debug.Log("444444444444444444444 lastItem.dataIndex " + lastItem.dataIndex + " datasList.Count " + datasList.Count);
                    itemsList.Remove(lastItem);
                    //UnityEngine.Debug.Log("*********************** itemList.count is: " + itemsList.Count);
                    PutItemToLoop(lastItem);
                    lastItem = GetBiggestDataIndexItem();//itemsList[itemsList.Count - 1];
                }

                //Validate();
            }
        }

        //UnityEngine.Debug.Log("55555555555555555555555 itemsList.count " + itemsList.Count);
        ResetPosition(itemsList);
    }
示例#23
0
    /// <summary>
    /// 检验items的两端是否要补上或删除
    /// </summary>
    void Validate()
    {
        if (datasList == null || datasList.Count == 0)
        {
            return;
        }

        // 如果itemsList还不存在
        if (itemsList == null || itemsList.Count == 0)
        {
            itemsList = new List <LoopItemObject>();

            LoopItemObject item = GetItemFromLoop();

            Vector3      v3 = new Vector3(0, itemStartPos.y, 0);
            chatItemData d  = datasList[0] as chatItemData;
            if (d.ItemType != 3)
            {
                itemStartPos = new Vector3(0, itemStartPos.y + 50, 0);
            }

            InitItem(item, 0, datasList[0]);
            itemStartPos = v3;//还原
            firstItem    = lastItem = item;
            itemsList.Add(item);

            //Validate();
        }

        //
        bool all_invisible = true;

        foreach (LoopItemObject item in itemsList)
        {
            if (item.widget.isVisible == true)
            {
                all_invisible = false;
            }
        }
        if (all_invisible == true)
        {
            return;
        }

        // 先判断前端是否要增减
        if (firstItem.widget.isVisible)
        {
            // 判断要不要在它的前面补充一个item
            if (firstItem.dataIndex > 0)
            {
                LoopItemObject item = GetItemFromLoop();

                // 初化:数据索引、大小、位置、显示
                int index = firstItem.dataIndex - 1;
                //InitItem(item, index, datasList[index]);
                AddToFront(firstItem, item, index, datasList[index]);
                firstItem = item;
                itemsList.Insert(0, item);

                //Validate();
                //SpringPanel.Begin
            }
        }
        else
        {
            // 判断要不要将它移除
            // 条件:自身是不可见的;且它后一个item也是不可见的(或被被裁剪过半的).
            //      这有个隐含条件是itemsList.Count>=2.
            if (itemsList.Count >= 2 &&
                itemsList[0].widget.isVisible == false &&
                itemsList[1].widget.isVisible == false)
            {
                itemsList.Remove(firstItem);
                PutItemToLoop(firstItem);
                firstItem = itemsList[0];

                //Validate();
            }
        }

        // 再判断后端是否要增减
        if (lastItem.widget.isVisible)
        {
            // 判断要不要在它的后面补充一个item
            if (lastItem.dataIndex < datasList.Count - 1)
            {
                LoopItemObject item = GetItemFromLoop();

                // 初化:数据索引、大小、位置、显示
                int index = lastItem.dataIndex + 1;
                AddToBack(lastItem, item, index, datasList[index]);
                lastItem = item;
                itemsList.Add(item);

                //Validate();
            }
        }
        else
        {
            // 判断要不要将它移除
            // 条件:自身是不可见的;且它前一个item也是不可见的(或被被裁剪过半的).
            //      这有个隐含条件是itemsList.Count>=2.
            if (itemsList.Count >= 2 &&
                itemsList[itemsList.Count - 1].widget.isVisible == false &&
                itemsList[itemsList.Count - 2].widget.isVisible == false)
            {
                itemsList.Remove(lastItem);
                PutItemToLoop(lastItem);
                lastItem = itemsList[itemsList.Count - 1];
                //UIGrid ug =new UIGrid();
                //Validate();
            }
        }

        //防止还没到底的时候就回弹BUG(效果不好)
        if (firstItem.dataIndex != 0 && lastItem.dataIndex != datasList.Count - 1)
        {
            SpringPanel sp = gameObject.GetComponent <SpringPanel>();
            if (sp != null)
            {
                sp.enabled = false;
            }
        }
    }