public void DrawChat(bool drawingPlayerChat) { int num = _startChatLine; int num2 = 0; int num3 = 0; while (num > 0 && num2 < _messages.Count) { int num4 = Math.Min(num, _messages[num2].LineCount); num -= num4; num3 += num4; if (num3 == _messages[num2].LineCount) { num3 = 0; num2++; } } int num5 = 0; int?num6 = null; int snippetIndex = -1; int?num7 = null; int hoveredSnippet = -1; while (num5 < _showCount && num2 < _messages.Count) { ChatMessageContainer chatMessageContainer = _messages[num2]; if (!chatMessageContainer.Prepared || !(drawingPlayerChat | chatMessageContainer.CanBeShownWhenChatIsClosed)) { break; } TextSnippet[] snippetWithInversedIndex = chatMessageContainer.GetSnippetWithInversedIndex(num3); ChatManager.DrawColorCodedStringWithShadow(Main.spriteBatch, FontAssets.MouseText.Value, snippetWithInversedIndex, new Vector2(88f, Main.screenHeight - 30 - 28 - num5 * 21), 0f, Vector2.Zero, Vector2.One, out hoveredSnippet); if (hoveredSnippet >= 0) { num7 = hoveredSnippet; num6 = num2; snippetIndex = num3; } num5++; num3++; if (num3 >= chatMessageContainer.LineCount) { num3 = 0; num2++; } } if (num6.HasValue && num7.HasValue) { TextSnippet[] snippetWithInversedIndex2 = _messages[num6.Value].GetSnippetWithInversedIndex(snippetIndex); snippetWithInversedIndex2[num7.Value].OnHover(); if (Main.mouseLeft && Main.mouseLeftRelease) { snippetWithInversedIndex2[num7.Value].OnClick(); } } }
public void AddNewMessage(string text, Color color, int widthLimitInPixels = -1) { ChatMessageContainer messageContainer = new ChatMessageContainer(); messageContainer.SetContents(text, color, widthLimitInPixels); this._messages.Insert(0, messageContainer); while (this._messages.Count > 500) { this._messages.RemoveAt(this._messages.Count - 1); } }
/// <inheritdoc /> /// <summary> /// </summary> /// <param name="container"></param> /// <param name="message"></param> public DrawableChatMessage(ChatMessageContainer container, ChatMessage message) { Container = container; Message = message; DestroyIfParentIsNull = false; Avatar = new Sprite { Parent = this, UsePreviousSpriteBatchOptions = true, X = 10, Size = new ScalableVector2(44, 44), Y = Padding, }; SteamManager.SteamUserAvatarLoaded += OnSteamAvatarLoaded; // QuaverBot. No need to load. if (message.Sender.OnlineUser.SteamId == 0) { Avatar.Image = UserInterface.UnknownAvatar; } // We've got the user's avatar, so use it. if (SteamManager.UserAvatars.ContainsKey((ulong)message.Sender.OnlineUser.SteamId)) { Avatar.Image = SteamManager.UserAvatars[(ulong)message.Sender.OnlineUser.SteamId]; } // Need to retrieve user's avatar. else { // Go with an unknown avatar for now until it's loaded. Avatar.Image = UserInterface.UnknownAvatar; SteamManager.SendAvatarRetrievalRequest((ulong)message.Sender.OnlineUser.SteamId); } var userColor = Colors.GetUserChatColor(Message.Sender.OnlineUser.UserGroups); Avatar.AddBorder(new Color(userColor.R / 2, userColor.G / 2, userColor.B / 2), 2); Avatar.Border.Alpha = 0.95f; X = -Container.Width; Width = Container.Width - 5; Alpha = 0; CreateUsernameText(); CreateChatBadge(); CreateMessageContentText(); RecalculateHeight(); }
private void ChatMessageHandler(RedisChannel arg1, RedisValue arg2) { ChatMessage chatMessageControl; Classes.ChatMessage currentChatMessage = JsonConvert.DeserializeObject <Classes.ChatMessage>(arg2); //check if last message is from this sender if (ChatMessageContainer.Controls.Count != 0) { chatMessageControl = (ChatMessage)ChatMessageContainer.Controls[ChatMessageContainer.Controls.Count - 1]; if (chatMessageControl.Nickname == currentChatMessage.Nickname) { //message came from the same person chatMessageControl.BeginInvoke((MethodInvoker) delegate() { chatMessageControl.Message += Environment.NewLine + "[" + DateTime.Now.ToLongTimeString() + "] " + currentChatMessage.Message; }); } else { chatMessageControl = new ChatMessage(); chatMessageControl.Nickname = currentChatMessage.Nickname; chatMessageControl.Message = "[" + DateTime.Now.ToLongTimeString() + "] " + currentChatMessage.Message; } } else { chatMessageControl = new ChatMessage(); chatMessageControl.Nickname = currentChatMessage.Nickname; chatMessageControl.Message = "[" + DateTime.Now.ToLongTimeString() + "] " + currentChatMessage.Message; } chatMessageControl.Width = ChatMessageContainer.Width - 30; ChatMessageContainer.BeginInvoke((MethodInvoker) delegate() { ChatMessageContainer.Controls.Add(chatMessageControl); ChatMessageContainer.AutoScrollPosition = new Point( chatMessageControl.Right - ChatMessageContainer.AutoScrollPosition.X, chatMessageControl.Bottom - ChatMessageContainer.AutoScrollPosition.Y); chatMessageControl.Invalidate(true); }); ChatMessageContainer.Invalidate(); }
public void DrawChat(bool drawingPlayerChat) { int startChatLine = this._startChatLine; int index = 0; int snippetIndex1 = 0; while (startChatLine > 0 && index < this._messages.Count) { int num = Math.Min(startChatLine, this._messages[index].LineCount); startChatLine -= num; snippetIndex1 += num; if (snippetIndex1 == this._messages[index].LineCount) { snippetIndex1 = 0; ++index; } } int num1 = 0; int?nullable1 = new int?(); int snippetIndex2 = -1; int?nullable2 = new int?(); int hoveredSnippet = -1; while (num1 < this._showCount && index < this._messages.Count) { ChatMessageContainer message = this._messages[index]; if (message.Prepared && drawingPlayerChat | message.CanBeShownWhenChatIsClosed) { TextSnippet[] withInversedIndex = message.GetSnippetWithInversedIndex(snippetIndex1); ChatManager.DrawColorCodedStringWithShadow(Main.spriteBatch, FontAssets.MouseText.get_Value(), withInversedIndex, new Vector2(88f, (float)(Main.screenHeight - 30 - 28 - num1 * 21)), 0.0f, Vector2.Zero, Vector2.One, out hoveredSnippet, -1f, 2f); if (hoveredSnippet >= 0) { nullable2 = new int?(hoveredSnippet); nullable1 = new int?(index); snippetIndex2 = snippetIndex1; } ++num1; ++snippetIndex1; if (snippetIndex1 >= message.LineCount) { snippetIndex1 = 0; ++index; } } else { break; } } if (!nullable1.HasValue || !nullable2.HasValue) { return; } TextSnippet[] withInversedIndex1 = this._messages[nullable1.Value].GetSnippetWithInversedIndex(snippetIndex2); withInversedIndex1[nullable2.Value].OnHover(); if (!Main.mouseLeft || !Main.mouseLeftRelease) { return; } withInversedIndex1[nullable2.Value].OnClick(); }