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); } }
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); }
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); }
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; }
public ChatSubCollection(IChatItem item) { _Father = item; _Owner = null; }