Split drawing and business logic of ChatOverlay

This commit is contained in:
miterosan
2018-04-08 18:21:48 +02:00
parent 525e50e8dd
commit a70b329155
11 changed files with 431 additions and 388 deletions

View File

@ -81,6 +81,8 @@ namespace osu.Game.Overlays.Chat
Padding = new MarginPadding { Left = padding, Right = padding };
}
private ChatManager chatManager;
private Message message;
private OsuSpriteText username;
private LinkFlowContainer contentFlow;
@ -104,9 +106,9 @@ namespace osu.Game.Overlays.Chat
}
[BackgroundDependencyLoader(true)]
private void load(OsuColour colours, ChatOverlay chat)
private void load(OsuColour colours, ChatManager chatManager)
{
this.chat = chat;
this.chatManager = chatManager;
customUsernameColour = colours.ChatBlue;
}
@ -215,8 +217,6 @@ namespace osu.Game.Overlays.Chat
FinishTransforms(true);
}
private ChatOverlay chat;
private void updateMessageContent()
{
this.FadeTo(message is LocalEchoMessage ? 0.4f : 1.0f, 500, Easing.OutQuint);
@ -226,7 +226,7 @@ namespace osu.Game.Overlays.Chat
username.Text = $@"{message.Sender.Username}" + (senderHasBackground || message.IsAction ? "" : ":");
// remove non-existent channels from the link list
message.Links.RemoveAll(link => link.Action == LinkAction.OpenChannel && chat?.AvailableChannels.Any(c => c.Name == link.Argument) != true);
message.Links.RemoveAll(link => link.Action == LinkAction.OpenChannel && chatManager?.AvailableChannels.Any(c => c.Name == link.Argument) != true);
contentFlow.Clear();
contentFlow.AddLinks(message.DisplayContent, message.Links);

View File

@ -15,15 +15,15 @@ using osu.Game.Online.Chat;
namespace osu.Game.Overlays.Chat
{
public class DrawableChannel : Container
public class DrawableChat : Container
{
public readonly ChannelChat Channel;
public readonly ChatBase Chat;
private readonly ChatLineContainer flow;
private readonly ScrollContainer scroll;
public DrawableChannel(ChannelChat channel)
public DrawableChat(ChatBase chat)
{
Channel = channel;
Chat = chat;
RelativeSizeAxes = Axes.Both;
@ -50,15 +50,15 @@ namespace osu.Game.Overlays.Chat
}
};
Channel.NewMessagesArrived += newMessagesArrived;
Channel.MessageRemoved += messageRemoved;
Channel.PendingMessageResolved += pendingMessageResolved;
Chat.NewMessagesArrived += newMessagesArrived;
Chat.MessageRemoved += messageRemoved;
Chat.PendingMessageResolved += pendingMessageResolved;
}
[BackgroundDependencyLoader]
private void load()
{
newMessagesArrived(Channel.Messages);
newMessagesArrived(Chat.Messages);
}
protected override void LoadComplete()
@ -71,15 +71,15 @@ namespace osu.Game.Overlays.Chat
{
base.Dispose(isDisposing);
Channel.NewMessagesArrived -= newMessagesArrived;
Channel.MessageRemoved -= messageRemoved;
Channel.PendingMessageResolved -= pendingMessageResolved;
Chat.NewMessagesArrived -= newMessagesArrived;
Chat.MessageRemoved -= messageRemoved;
Chat.PendingMessageResolved -= pendingMessageResolved;
}
private void newMessagesArrived(IEnumerable<Message> newMessages)
{
// Add up to last Channel.MAX_HISTORY messages
var displayMessages = newMessages.Skip(Math.Max(0, newMessages.Count() - ChannelChat.MAX_HISTORY));
// Add up to last ChatBase.MAX_HISTORY messages
var displayMessages = newMessages.Skip(Math.Max(0, newMessages.Count() - ChatBase.MAX_HISTORY));
flow.AddRange(displayMessages.Select(m => new ChatLine(m)));
@ -89,7 +89,7 @@ namespace osu.Game.Overlays.Chat
scrollToEnd();
var staleMessages = flow.Children.Where(c => c.LifetimeEnd == double.MaxValue).ToArray();
int count = staleMessages.Length - ChannelChat.MAX_HISTORY;
int count = staleMessages.Length - ChatBase.MAX_HISTORY;
for (int i = 0; i < count; i++)
{