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();
                }
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        /// <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();
        }
Beispiel #5
0
        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();
        }