1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-06 09:47:52 +08:00

Integrate spectate button implementation

This commit is contained in:
Dan Balasescu 2022-03-17 18:36:33 +09:00
parent e3cbde5099
commit 461d41529b
4 changed files with 11 additions and 38 deletions

View File

@ -71,16 +71,6 @@ namespace osu.Game.Tests.Visual.Multiplayer
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
Size = new Vector2(200, 50), Size = new Vector2(200, 50),
OnSpectateClick = () =>
{
readyClickOperation = OngoingOperationTracker.BeginOperation();
Task.Run(async () =>
{
await MultiplayerClient.ToggleSpectate();
readyClickOperation.Dispose();
});
}
}, },
readyButton = new MultiplayerReadyButton readyButton = new MultiplayerReadyButton
{ {

View File

@ -17,13 +17,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
set => readyButton.OnReadyClick = value; set => readyButton.OnReadyClick = value;
} }
public Action OnSpectateClick
{
set => spectateButton.OnSpectateClick = value;
}
private readonly MultiplayerReadyButton readyButton; private readonly MultiplayerReadyButton readyButton;
private readonly MultiplayerSpectateButton spectateButton;
public MultiplayerMatchFooter() public MultiplayerMatchFooter()
{ {
@ -37,7 +31,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
new Drawable[] new Drawable[]
{ {
null, null,
spectateButton = new MultiplayerSpectateButton new MultiplayerSpectateButton
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
}, },

View File

@ -1,7 +1,6 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text. // See the LICENCE file in the repository root for full licence text.
using System;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Bindables; using osu.Framework.Bindables;
using osu.Framework.Graphics; using osu.Framework.Graphics;
@ -15,11 +14,6 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
{ {
public class MultiplayerSpectateButton : MultiplayerRoomComposite public class MultiplayerSpectateButton : MultiplayerRoomComposite
{ {
public Action OnSpectateClick
{
set => button.Action = value;
}
[Resolved] [Resolved]
private OngoingOperationTracker ongoingOperationTracker { get; set; } private OngoingOperationTracker ongoingOperationTracker { get; set; }
@ -37,9 +31,19 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Size = Vector2.One, Size = Vector2.One,
Enabled = { Value = true }, Enabled = { Value = true },
Action = onClick
}; };
} }
private void onClick()
{
var clickOperation = ongoingOperationTracker.BeginOperation();
Client.ToggleSpectate().ContinueWith(t => endOperation());
void endOperation() => clickOperation?.Dispose();
}
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load() private void load()
{ {

View File

@ -233,7 +233,6 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
protected override Drawable CreateFooter() => new MultiplayerMatchFooter protected override Drawable CreateFooter() => new MultiplayerMatchFooter
{ {
OnReadyClick = onReadyClick, OnReadyClick = onReadyClick,
OnSpectateClick = onSpectateClick
}; };
protected override RoomSettingsOverlay CreateRoomSettingsOverlay(Room room) => new MultiplayerMatchSettingsOverlay(room); protected override RoomSettingsOverlay CreateRoomSettingsOverlay(Room room) => new MultiplayerMatchSettingsOverlay(room);
@ -364,20 +363,6 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
} }
} }
private void onSpectateClick()
{
Debug.Assert(readyClickOperation == null);
readyClickOperation = ongoingOperationTracker.BeginOperation();
client.ToggleSpectate().ContinueWith(t => endOperation());
void endOperation()
{
readyClickOperation?.Dispose();
readyClickOperation = null;
}
}
private void onRoomUpdated() private void onRoomUpdated()
{ {
// may happen if the client is kicked or otherwise removed from the room. // may happen if the client is kicked or otherwise removed from the room.