mirror of
https://github.com/osukey/osukey.git
synced 2025-08-05 07:33:55 +09:00
Split drawing and business logic of ChatOverlay
This commit is contained in:
@ -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);
|
||||
|
@ -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++)
|
||||
{
|
Reference in New Issue
Block a user