Exemplo n.º 1
0
        private void CreateSubItem(SChatMessageObjectInfo info, float width, ref float curOffsetX, ref float curOffsetY, List <LineObjCache> curLineObject)
        {
            if (width < 0f || curLineObject == null)
            {
                return;
            }

            ResNode itemPrefab = LogicDataCenter.chatMessageManager.GetChatItemPrefabByObjType(info.type);

            if (itemPrefab == null)
            {
                return;
            }

            GameObject itemObj = itemPrefab.InstanceMainRes();

            if (itemObj == null)
            {
                return;
            }

            IChatItem subItem = itemObj.GetComponent <IChatItem>();

            if (subItem == null)
            {
                itemPrefab.DestroyInstanceRes(ref itemObj);
                return;
            }
            subItem.SetResNode(itemPrefab);
            currChatBoxItem.Add(subItem);
            itemObj.transform.SetParent(this.transform, false);


            if (subItem.SetItemData(info) == false)
            {
                return;
            }

            for (int i = 0; i < 100; ++i)
            {
                IChatItem nextItem;
                subItem.SplitByWidth(width, curOffsetX, out subItem, out nextItem);
                if (subItem != null)
                {
                    curOffsetX += subItem.GetItemWidth();
                    AddLineObject(subItem, curLineObject);
                }

                if (nextItem == null)
                {
                    break;
                }

                AlignLineObject(ref curOffsetX, ref curOffsetY, curLineObject);
                subItem = nextItem;
                currChatBoxItem.Add(subItem);
            }
        }
Exemplo n.º 2
0
        private void AddLineObject(IChatItem item, List <LineObjCache> curLineObject)
        {
            LineObjCache objCache;

            objCache.width           = item.GetItemWidth();
            objCache.height          = item.GetItemHeight();
            objCache.trans           = item.GetTransform();
            objCache.trans.sizeDelta = new Vector2(objCache.width, objCache.height);
            curLineObject.Add(objCache);
        }
Exemplo n.º 3
0
        public void OnInputfieldAddItem(ChatBoxAddInputFieldItemData msgData)
        {
            ResNode itemPrefab = LogicDataCenter.chatMessageManager.GetChatItemPrefabByObjType(msgData.objInfo.type);

            if (itemPrefab == null)
            {
                return;
            }

            GameObject itemObj = itemPrefab.InstanceMainRes();

            if (itemObj == null)
            {
                return;
            }

            IChatItem subItem = itemObj.GetComponent <IChatItem>();

            subItem.SetResNode(itemPrefab);

            if (subItem == null)
            {
                itemPrefab.DestroyInstanceRes(ref itemObj);
                return;
            }

            if (subItem.SetItemData(msgData.objInfo) == false)
            {
                itemPrefab.DestroyInstanceRes(ref itemObj);
                return;
            }

            if (msgData.bClearInputField)
            {
                inputField.ClearContent();
            }

            if (msgData.bActiveInputField)
            {
                inputField.ActivateInputField();
            }


            inputField.selectionFocusPosition = inputField.caretPosition;
            inputField.InsertItem(itemObj, subItem, -1);

            // 自动发送
            if (msgData.bAutoSend)
            {
                OnSendBtnClick();
            }
        }
        private nfloat CalculateTextHeight(IChatItem item)
        {
            var chatMessage = item as IChatMessage;

            if (chatMessage != null)
            {
                var displayNameHeight = chatMessage.DisplayName?.StringSize(Fonts.LatoBoldWithSize(14), MessageTable.Frame.Size).Height ?? 0;

                var messageHeight = chatMessage.Text?.StringSize(Fonts.LatoWithSize(15),
                                                                 new CGSize(MessageTable.Frame.Width - 60, double.MaxValue)).Height ?? 0;

                var finalHeight = messageHeight + displayNameHeight;

                _textHeights[item.Id] = finalHeight;

                return(finalHeight);
            }

            return(0);
        }
Exemplo n.º 5
0
        public void SetData(ChatContentItemData data)
        {
            RectTransform selfTrans = this.transform as RectTransform;

            m_curWidth = selfTrans.rect.width;

            // 删除现有子对象
            for (int i = 0; i < currChatBoxItem.Count; i++)
            {
                IChatItem itm = currChatBoxItem[i];
                itm.Destroy();
                //itm.Clear();
                GameObject temp = itm.GetTransform().gameObject;
                ResNode.DestroyRes(ref temp);
            }

            currChatBoxItem.Clear();
            float width   = selfTrans.rect.width;
            float offsetX = 0f;
            float offsetY = 0f;

            // TODO: 如果使用了自动布局,可以不计算位置
            List <LineObjCache> curLineObject = new List <LineObjCache>();

            if (data.objList != null)
            {
                foreach (var obj in data.objList)
                {
                    CreateSubItem(obj, width, ref offsetX, ref offsetY, curLineObject);
                }
            }
            AlignLineObject(ref offsetX, ref offsetY, curLineObject);

            data.Height         = -offsetY;
            selfTrans.sizeDelta = new Vector2(selfTrans.sizeDelta.x, data.Height);

            m_Height = data.Height;
        }
Exemplo n.º 6
0
 public ChatSubCollection(IChatItem item)
 {
     _Father = item;
     _Owner  = null;
 }