1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-07 21:32:57 +08:00

Add chat IPC and gameplay screen integration

This commit is contained in:
Dean Herbert 2018-11-16 19:43:54 +09:00
parent c9e2ee8f56
commit e3e92f4302
6 changed files with 63 additions and 7 deletions

View File

@ -12,6 +12,7 @@ using osu.Game.Graphics;
using osu.Game.Graphics.Containers; using osu.Game.Graphics.Containers;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Online.Chat; using osu.Game.Online.Chat;
using osu.Game.Tournament.IPC;
using OpenTK; using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;
@ -25,7 +26,7 @@ namespace osu.Game.Tournament.Components
public MatchChatDisplay() public MatchChatDisplay()
{ {
CornerRadius = 5; CornerRadius = 10;
Masking = true; Masking = true;
InternalChildren = new Drawable[] InternalChildren = new Drawable[]
@ -51,13 +52,46 @@ namespace osu.Game.Tournament.Components
Channel.BindValueChanged(channelChanged); Channel.BindValueChanged(channelChanged);
} }
private readonly Bindable<string> chatChannel = new Bindable<string>();
private ChannelManager manager;
[BackgroundDependencyLoader(true)]
private void load(MatchIPCInfo ipc)
{
if (ipc != null)
{
AddInternal(manager = new ChannelManager());
Channel.BindTo(manager.CurrentChannel);
chatChannel.BindTo(ipc.ChatChannel);
chatChannel.BindValueChanged(channelString =>
{
if (string.IsNullOrWhiteSpace(channelString))
return;
int id = int.Parse(channelString);
var channel = manager.JoinedChannels.FirstOrDefault(ch => ch.Id == id) ?? new Channel
{
Id = id,
Type = ChannelType.Public
};
manager.JoinChannel(channel);
manager.CurrentChannel.Value = channel;
}, true);
}
}
private void channelChanged(Channel channel) private void channelChanged(Channel channel)
{ {
if (lastChannel != null) if (lastChannel != null)
lastChannel.NewMessagesArrived -= newMessages; lastChannel.NewMessagesArrived -= newMessages;
lastChannel = channel; lastChannel = channel;
channel.NewMessagesArrived += newMessages; channel.NewMessagesArrived += newMessages;
} }

View File

@ -62,7 +62,7 @@ namespace osu.Game.Tournament.Components
set set
{ {
expanded = value; expanded = value;
panel.ResizeWidthTo(panelWidth, 800, Easing.OutQuint); panel?.ResizeWidthTo(panelWidth, 800, Easing.OutQuint);
if (expanded) if (expanded)
{ {
@ -72,7 +72,7 @@ namespace osu.Game.Tournament.Components
else else
{ {
innerPanel.ResizeWidthTo(1, 800, Easing.OutQuint); innerPanel.ResizeWidthTo(1, 800, Easing.OutQuint);
outerPanel.ResizeWidthTo(0.2f, 800, Easing.OutQuint); outerPanel.ResizeWidthTo(0.25f, 800, Easing.OutQuint);
} }
} }
} }

View File

@ -53,6 +53,7 @@ namespace osu.Game.Tournament.IPC
} }
Mods.Value = (LegacyMods)mods; Mods.Value = (LegacyMods)mods;
ChatChannel.Value = sr.ReadLine();
} }
} }
catch catch

View File

@ -13,6 +13,7 @@ namespace osu.Game.Tournament.IPC
public Bindable<BeatmapInfo> Beatmap { get; } = new Bindable<BeatmapInfo>(); public Bindable<BeatmapInfo> Beatmap { get; } = new Bindable<BeatmapInfo>();
public Bindable<LegacyMods> Mods { get; } = new Bindable<LegacyMods>(); public Bindable<LegacyMods> Mods { get; } = new Bindable<LegacyMods>();
public Bindable<TourneyState> State { get; } = new Bindable<TourneyState>(); public Bindable<TourneyState> State { get; } = new Bindable<TourneyState>();
public Bindable<string> ChatChannel { get; } = new Bindable<string>();
public BindableInt Score1 { get; } = new BindableInt(); public BindableInt Score1 { get; } = new BindableInt();
public BindableInt Score2 { get; } = new BindableInt(); public BindableInt Score2 { get; } = new BindableInt();
} }

View File

@ -13,6 +13,7 @@ using osu.Game.Tournament.Components;
using osu.Game.Tournament.IPC; using osu.Game.Tournament.IPC;
using osu.Game.Tournament.Screens.Gameplay.Components; using osu.Game.Tournament.Screens.Gameplay.Components;
using osu.Game.Tournament.Screens.Ladder.Components; using osu.Game.Tournament.Screens.Ladder.Components;
using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;
namespace osu.Game.Tournament.Screens.Gameplay namespace osu.Game.Tournament.Screens.Gameplay
@ -82,6 +83,14 @@ namespace osu.Game.Tournament.Screens.Gameplay
}, },
} }
}, },
chat = new MatchChatDisplay
{
RelativeSizeAxes = Axes.X,
Size = new Vector2(0.45f, 120),
Margin = new MarginPadding(10),
Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre,
},
new ControlPanel new ControlPanel
{ {
Children = new Drawable[] Children = new Drawable[]
@ -102,8 +111,8 @@ namespace osu.Game.Tournament.Screens.Gameplay
} }
}); });
State.BindValueChanged(stateChanged);
State.BindTo(ipc.State); State.BindTo(ipc.State);
State.BindValueChanged(stateChanged, true);
currentMatch.BindValueChanged(m => warmup.Value = m.Team1Score + m.Team2Score == 0); currentMatch.BindValueChanged(m => warmup.Value = m.Team1Score + m.Team2Score == 0);
currentMatch.BindTo(ladder.CurrentMatch); currentMatch.BindTo(ladder.CurrentMatch);
@ -112,6 +121,7 @@ namespace osu.Game.Tournament.Screens.Gameplay
} }
private ScheduledDelegate scheduledBarContract; private ScheduledDelegate scheduledBarContract;
private MatchChatDisplay chat;
private void stateChanged(TourneyState state) private void stateChanged(TourneyState state)
{ {
@ -132,11 +142,20 @@ namespace osu.Game.Tournament.Screens.Gameplay
case TourneyState.Idle: case TourneyState.Idle:
// show chat // show chat
SongBar.Expanded = false; SongBar.Expanded = false;
using (chat.BeginDelayedSequence(500))
{
chat.FadeIn(300);
chat.MoveToY(100).MoveToY(0, 500, Easing.OutQuint);
}
break; break;
case TourneyState.Ranking: case TourneyState.Ranking:
scheduledBarContract = Scheduler.AddDelayed(() => SongBar.Expanded = false, 15000); scheduledBarContract = Scheduler.AddDelayed(() => SongBar.Expanded = false, 15000);
break; break;
default: default:
chat.FadeOut(200);
chat.MoveToY(100, 500, Easing.In);
using (SongBar.BeginDelayedSequence(300, true))
SongBar.Expanded = true; SongBar.Expanded = true;
break; break;
} }

View File

@ -6,6 +6,7 @@ namespace osu.Game.Online.Chat
public enum ChannelType public enum ChannelType
{ {
PM, PM,
Public Public,
Temporary
} }
} }