mirror of
https://github.com/osukey/osukey.git
synced 2025-05-30 09:57:21 +09:00
Fix weird access to userIds in MultiplayerSpectatorScreen
This commit is contained in:
parent
dc5ee31d94
commit
c065092e72
@ -27,8 +27,6 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Spectate
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool AllPlayersLoaded => instances.All(p => p?.PlayerLoaded == true);
|
public bool AllPlayersLoaded => instances.All(p => p?.PlayerLoaded == true);
|
||||||
|
|
||||||
private readonly int[] userIds;
|
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private SpectatorStreamingClient spectatorClient { get; set; }
|
private SpectatorStreamingClient spectatorClient { get; set; }
|
||||||
|
|
||||||
@ -49,8 +47,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Spectate
|
|||||||
public MultiSpectatorScreen(int[] userIds)
|
public MultiSpectatorScreen(int[] userIds)
|
||||||
: base(userIds.Take(PlayerGrid.MAX_PLAYERS).ToArray())
|
: base(userIds.Take(PlayerGrid.MAX_PLAYERS).ToArray())
|
||||||
{
|
{
|
||||||
this.userIds = GetUserIds().ToArray();
|
instances = new PlayerArea[UserIds.Count];
|
||||||
instances = new PlayerArea[this.userIds.Length];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
@ -84,9 +81,9 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Spectate
|
|||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
for (int i = 0; i < userIds.Length; i++)
|
for (int i = 0; i < UserIds.Count; i++)
|
||||||
{
|
{
|
||||||
grid.Add(instances[i] = new PlayerArea(userIds[i], masterClockContainer.GameplayClock));
|
grid.Add(instances[i] = new PlayerArea(UserIds[i], masterClockContainer.GameplayClock));
|
||||||
syncManager.AddPlayerClock(instances[i].GameplayClock);
|
syncManager.AddPlayerClock(instances[i].GameplayClock);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,7 +92,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Spectate
|
|||||||
var scoreProcessor = Ruleset.Value.CreateInstance().CreateScoreProcessor();
|
var scoreProcessor = Ruleset.Value.CreateInstance().CreateScoreProcessor();
|
||||||
scoreProcessor.ApplyBeatmap(playableBeatmap);
|
scoreProcessor.ApplyBeatmap(playableBeatmap);
|
||||||
|
|
||||||
LoadComponentAsync(leaderboard = new MultiSpectatorLeaderboard(scoreProcessor, userIds) { Expanded = { Value = true } }, leaderboardContainer.Add);
|
LoadComponentAsync(leaderboard = new MultiSpectatorLeaderboard(scoreProcessor, UserIds.ToArray()) { Expanded = { Value = true } }, leaderboardContainer.Add);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
@ -130,7 +127,8 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Spectate
|
|||||||
|
|
||||||
protected override void StartGameplay(int userId, GameplayState gameplayState)
|
protected override void StartGameplay(int userId, GameplayState gameplayState)
|
||||||
{
|
{
|
||||||
var instance = instances[getIndexForUser(userId)];
|
var instance = instances.Single(i => i.UserId == userId);
|
||||||
|
|
||||||
instance.LoadScore(gameplayState.Score);
|
instance.LoadScore(gameplayState.Score);
|
||||||
|
|
||||||
syncManager.AddPlayerClock(instance.GameplayClock);
|
syncManager.AddPlayerClock(instance.GameplayClock);
|
||||||
@ -149,7 +147,5 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Spectate
|
|||||||
multiplayerClient.ChangeState(MultiplayerUserState.Idle);
|
multiplayerClient.ChangeState(MultiplayerUserState.Idle);
|
||||||
return base.OnBackButton();
|
return base.OnBackButton();
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getIndexForUser(int userId) => Array.IndexOf(userIds, userId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@ using System.Diagnostics;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using NuGet.Packaging;
|
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
@ -27,8 +26,9 @@ namespace osu.Game.Screens.Spectate
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class SpectatorScreen : OsuScreen
|
public abstract class SpectatorScreen : OsuScreen
|
||||||
{
|
{
|
||||||
protected IEnumerable<int> GetUserIds() => userIds;
|
protected IReadOnlyList<int> UserIds => userIds;
|
||||||
private readonly HashSet<int> userIds = new HashSet<int>();
|
|
||||||
|
private readonly List<int> userIds = new List<int>();
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private BeatmapManager beatmaps { get; set; }
|
private BeatmapManager beatmaps { get; set; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user