mirror of
https://github.com/ppy/osu.git
synced 2025-01-12 19:42:55 +08:00
Merge pull request #24409 from cdwcgt/tournament-nullable
Remove #nullable disable in tournament
This commit is contained in:
commit
5b44124ecf
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Game.Tests.Visual;
|
using osu.Game.Tests.Visual;
|
||||||
using osu.Game.Tournament.Components;
|
using osu.Game.Tournament.Components;
|
||||||
@ -13,7 +11,7 @@ namespace osu.Game.Tournament.Tests.Components
|
|||||||
{
|
{
|
||||||
public partial class TestSceneDateTextBox : OsuManualInputManagerTestScene
|
public partial class TestSceneDateTextBox : OsuManualInputManagerTestScene
|
||||||
{
|
{
|
||||||
private DateTextBox textBox;
|
private DateTextBox textBox = null!;
|
||||||
|
|
||||||
[SetUp]
|
[SetUp]
|
||||||
public void Setup() => Schedule(() =>
|
public void Setup() => Schedule(() =>
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
@ -22,7 +20,7 @@ namespace osu.Game.Tournament.Tests.Components
|
|||||||
[Test]
|
[Test]
|
||||||
public void TestSongBar()
|
public void TestSongBar()
|
||||||
{
|
{
|
||||||
SongBar songBar = null;
|
SongBar songBar = null!;
|
||||||
|
|
||||||
AddStep("create bar", () => Child = songBar = new SongBar
|
AddStep("create bar", () => Child = songBar = new SongBar
|
||||||
{
|
{
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
@ -19,12 +17,12 @@ namespace osu.Game.Tournament.Tests.Components
|
|||||||
public partial class TestSceneTournamentModDisplay : TournamentTestScene
|
public partial class TestSceneTournamentModDisplay : TournamentTestScene
|
||||||
{
|
{
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private IAPIProvider api { get; set; }
|
private IAPIProvider api { get; set; } = null!;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private IRulesetStore rulesets { get; set; }
|
private IRulesetStore rulesets { get; set; } = null!;
|
||||||
|
|
||||||
private FillFlowContainer<TournamentBeatmapPanel> fillFlow;
|
private FillFlowContainer<TournamentBeatmapPanel> fillFlow = null!;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
@ -45,7 +43,7 @@ namespace osu.Game.Tournament.Tests.Components
|
|||||||
|
|
||||||
private void success(APIBeatmap beatmap)
|
private void success(APIBeatmap beatmap)
|
||||||
{
|
{
|
||||||
var ruleset = rulesets.GetRuleset(Ladder.Ruleset.Value.OnlineID);
|
var ruleset = rulesets.GetRuleset(Ladder.Ruleset.Value?.OnlineID ?? -1);
|
||||||
|
|
||||||
if (ruleset == null)
|
if (ruleset == null)
|
||||||
return;
|
return;
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -81,11 +79,11 @@ namespace osu.Game.Tournament.Tests.NonVisual
|
|||||||
public partial class TestTournament : TournamentGameBase
|
public partial class TestTournament : TournamentGameBase
|
||||||
{
|
{
|
||||||
private readonly bool resetRuleset;
|
private readonly bool resetRuleset;
|
||||||
private readonly Action runOnLoadComplete;
|
private readonly Action? runOnLoadComplete;
|
||||||
|
|
||||||
public new Task BracketLoadTask => base.BracketLoadTask;
|
public new Task BracketLoadTask => base.BracketLoadTask;
|
||||||
|
|
||||||
public TestTournament(bool resetRuleset = false, [InstantHandle] Action runOnLoadComplete = null)
|
public TestTournament(bool resetRuleset = false, [InstantHandle] Action? runOnLoadComplete = null)
|
||||||
{
|
{
|
||||||
this.resetRuleset = resetRuleset;
|
this.resetRuleset = resetRuleset;
|
||||||
this.runOnLoadComplete = runOnLoadComplete;
|
this.runOnLoadComplete = runOnLoadComplete;
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
@ -36,11 +34,11 @@ namespace osu.Game.Tournament.Tests.NonVisual
|
|||||||
{
|
{
|
||||||
var osu = LoadTournament(host);
|
var osu = LoadTournament(host);
|
||||||
TournamentStorage storage = (TournamentStorage)osu.Dependencies.Get<Storage>();
|
TournamentStorage storage = (TournamentStorage)osu.Dependencies.Get<Storage>();
|
||||||
FileBasedIPC ipc = null;
|
FileBasedIPC? ipc = null;
|
||||||
|
|
||||||
WaitForOrAssert(() => (ipc = osu.Dependencies.Get<MatchIPCInfo>() as FileBasedIPC)?.IsLoaded == true, @"ipc could not be populated in a reasonable amount of time");
|
WaitForOrAssert(() => (ipc = osu.Dependencies.Get<MatchIPCInfo>() as FileBasedIPC)?.IsLoaded == true, @"ipc could not be populated in a reasonable amount of time");
|
||||||
|
|
||||||
Assert.True(ipc.SetIPCLocation(testStableInstallDirectory));
|
Assert.True(ipc!.SetIPCLocation(testStableInstallDirectory));
|
||||||
Assert.True(storage.AllTournaments.Exists("stable.json"));
|
Assert.True(storage.AllTournaments.Exists("stable.json"));
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -35,8 +35,8 @@ namespace osu.Game.Tournament.Tests.NonVisual
|
|||||||
PlayersPerTeam = { Value = 4 },
|
PlayersPerTeam = { Value = 4 },
|
||||||
Teams =
|
Teams =
|
||||||
{
|
{
|
||||||
match.Team1.Value,
|
match.Team1.Value!,
|
||||||
match.Team2.Value,
|
match.Team2.Value!,
|
||||||
},
|
},
|
||||||
Rounds =
|
Rounds =
|
||||||
{
|
{
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -13,7 +11,7 @@ namespace osu.Game.Tournament.Tests.NonVisual
|
|||||||
{
|
{
|
||||||
public abstract class TournamentHostTest
|
public abstract class TournamentHostTest
|
||||||
{
|
{
|
||||||
public static TournamentGameBase LoadTournament(GameHost host, TournamentGameBase tournament = null)
|
public static TournamentGameBase LoadTournament(GameHost host, TournamentGameBase? tournament = null)
|
||||||
{
|
{
|
||||||
tournament ??= new TournamentGameBase();
|
tournament ??= new TournamentGameBase();
|
||||||
Task.Factory.StartNew(() => host.Run(tournament), TaskCreationOptions.LongRunning)
|
Task.Factory.StartNew(() => host.Run(tournament), TaskCreationOptions.LongRunning)
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
|
@ -94,7 +94,7 @@ namespace osu.Game.Tournament.Tests.Screens
|
|||||||
|
|
||||||
AddStep("release mouse button", () => InputManager.ReleaseButton(MouseButton.Left));
|
AddStep("release mouse button", () => InputManager.ReleaseButton(MouseButton.Left));
|
||||||
|
|
||||||
AddAssert("assert ladder teams reset", () => Ladder.CurrentMatch.Value.Team1.Value == null && Ladder.CurrentMatch.Value.Team2.Value == null);
|
AddAssert("assert ladder teams reset", () => Ladder.CurrentMatch.Value?.Team1.Value == null && Ladder.CurrentMatch.Value?.Team2.Value == null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
@ -16,7 +14,7 @@ namespace osu.Game.Tournament.Tests.Screens
|
|||||||
{
|
{
|
||||||
public partial class TestSceneMapPoolScreen : TournamentScreenTestScene
|
public partial class TestSceneMapPoolScreen : TournamentScreenTestScene
|
||||||
{
|
{
|
||||||
private MapPoolScreen screen;
|
private MapPoolScreen screen = null!;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
@ -32,7 +30,7 @@ namespace osu.Game.Tournament.Tests.Screens
|
|||||||
{
|
{
|
||||||
AddStep("load few maps", () =>
|
AddStep("load few maps", () =>
|
||||||
{
|
{
|
||||||
Ladder.CurrentMatch.Value.Round.Value.Beatmaps.Clear();
|
Ladder.CurrentMatch.Value!.Round.Value!.Beatmaps.Clear();
|
||||||
|
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
addBeatmap();
|
addBeatmap();
|
||||||
@ -52,7 +50,7 @@ namespace osu.Game.Tournament.Tests.Screens
|
|||||||
{
|
{
|
||||||
AddStep("load just enough maps", () =>
|
AddStep("load just enough maps", () =>
|
||||||
{
|
{
|
||||||
Ladder.CurrentMatch.Value.Round.Value.Beatmaps.Clear();
|
Ladder.CurrentMatch.Value!.Round.Value!.Beatmaps.Clear();
|
||||||
|
|
||||||
for (int i = 0; i < 18; i++)
|
for (int i = 0; i < 18; i++)
|
||||||
addBeatmap();
|
addBeatmap();
|
||||||
@ -72,7 +70,7 @@ namespace osu.Game.Tournament.Tests.Screens
|
|||||||
{
|
{
|
||||||
AddStep("load many maps", () =>
|
AddStep("load many maps", () =>
|
||||||
{
|
{
|
||||||
Ladder.CurrentMatch.Value.Round.Value.Beatmaps.Clear();
|
Ladder.CurrentMatch.Value!.Round.Value!.Beatmaps.Clear();
|
||||||
|
|
||||||
for (int i = 0; i < 19; i++)
|
for (int i = 0; i < 19; i++)
|
||||||
addBeatmap();
|
addBeatmap();
|
||||||
@ -92,7 +90,7 @@ namespace osu.Game.Tournament.Tests.Screens
|
|||||||
{
|
{
|
||||||
AddStep("load many maps", () =>
|
AddStep("load many maps", () =>
|
||||||
{
|
{
|
||||||
Ladder.CurrentMatch.Value.Round.Value.Beatmaps.Clear();
|
Ladder.CurrentMatch.Value!.Round.Value!.Beatmaps.Clear();
|
||||||
|
|
||||||
for (int i = 0; i < 11; i++)
|
for (int i = 0; i < 11; i++)
|
||||||
addBeatmap(i > 4 ? Ruleset.Value.CreateInstance().AllMods.ElementAt(i).Acronym : "NM");
|
addBeatmap(i > 4 ? Ruleset.Value.CreateInstance().AllMods.ElementAt(i).Acronym : "NM");
|
||||||
@ -118,7 +116,7 @@ namespace osu.Game.Tournament.Tests.Screens
|
|||||||
{
|
{
|
||||||
AddStep("load many maps", () =>
|
AddStep("load many maps", () =>
|
||||||
{
|
{
|
||||||
Ladder.CurrentMatch.Value.Round.Value.Beatmaps.Clear();
|
Ladder.CurrentMatch.Value!.Round.Value!.Beatmaps.Clear();
|
||||||
|
|
||||||
for (int i = 0; i < 12; i++)
|
for (int i = 0; i < 12; i++)
|
||||||
addBeatmap(i > 4 ? Ruleset.Value.CreateInstance().AllMods.ElementAt(i).Acronym : "NM");
|
addBeatmap(i > 4 ? Ruleset.Value.CreateInstance().AllMods.ElementAt(i).Acronym : "NM");
|
||||||
@ -138,7 +136,7 @@ namespace osu.Game.Tournament.Tests.Screens
|
|||||||
{
|
{
|
||||||
AddStep("load many maps", () =>
|
AddStep("load many maps", () =>
|
||||||
{
|
{
|
||||||
Ladder.CurrentMatch.Value.Round.Value.Beatmaps.Clear();
|
Ladder.CurrentMatch.Value!.Round.Value!.Beatmaps.Clear();
|
||||||
|
|
||||||
for (int i = 0; i < 12; i++)
|
for (int i = 0; i < 12; i++)
|
||||||
addBeatmap(i > 4 ? Ruleset.Value.CreateInstance().AllMods.ElementAt(i).Acronym : "NM");
|
addBeatmap(i > 4 ? Ruleset.Value.CreateInstance().AllMods.ElementAt(i).Acronym : "NM");
|
||||||
@ -155,7 +153,7 @@ namespace osu.Game.Tournament.Tests.Screens
|
|||||||
|
|
||||||
private void addBeatmap(string mods = "NM")
|
private void addBeatmap(string mods = "NM")
|
||||||
{
|
{
|
||||||
Ladder.CurrentMatch.Value.Round.Value.Beatmaps.Add(new RoundBeatmap
|
Ladder.CurrentMatch.Value!.Round.Value!.Beatmaps.Add(new RoundBeatmap
|
||||||
{
|
{
|
||||||
Beatmap = CreateSampleBeatmap(),
|
Beatmap = CreateSampleBeatmap(),
|
||||||
Mods = mods
|
Mods = mods
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
// 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 osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Extensions.ObjectExtensions;
|
||||||
using osu.Game.Tournament.Models;
|
using osu.Game.Tournament.Models;
|
||||||
using osu.Game.Tournament.Screens.Editors;
|
using osu.Game.Tournament.Screens.Editors;
|
||||||
|
|
||||||
@ -17,7 +18,7 @@ namespace osu.Game.Tournament.Tests.Screens
|
|||||||
{
|
{
|
||||||
var match = CreateSampleMatch();
|
var match = CreateSampleMatch();
|
||||||
|
|
||||||
Add(new SeedingEditorScreen(match.Team1.Value, new TeamEditorScreen())
|
Add(new SeedingEditorScreen(match.Team1.Value.AsNonNull(), new TeamEditorScreen())
|
||||||
{
|
{
|
||||||
Width = 0.85f // create room for control panel
|
Width = 0.85f // create room for control panel
|
||||||
});
|
});
|
||||||
|
@ -17,7 +17,7 @@ namespace osu.Game.Tournament.Tests.Screens
|
|||||||
{
|
{
|
||||||
var match = Ladder.CurrentMatch.Value!;
|
var match = Ladder.CurrentMatch.Value!;
|
||||||
|
|
||||||
match.Round.Value = Ladder.Rounds.FirstOrDefault(g => g.Name.Value == "Finals");
|
match.Round.Value = Ladder.Rounds.First(g => g.Name.Value == "Quarterfinals");
|
||||||
match.Completed.Value = true;
|
match.Completed.Value = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -40,10 +40,10 @@ namespace osu.Game.Tournament.Tests
|
|||||||
|
|
||||||
match = CreateSampleMatch();
|
match = CreateSampleMatch();
|
||||||
|
|
||||||
Ladder.Rounds.Add(match.Round.Value);
|
Ladder.Rounds.Add(match.Round.Value!);
|
||||||
Ladder.Matches.Add(match);
|
Ladder.Matches.Add(match);
|
||||||
Ladder.Teams.Add(match.Team1.Value);
|
Ladder.Teams.Add(match.Team1.Value!);
|
||||||
Ladder.Teams.Add(match.Team2.Value);
|
Ladder.Teams.Add(match.Team2.Value!);
|
||||||
|
|
||||||
Ruleset.BindTo(Ladder.Ruleset);
|
Ruleset.BindTo(Ladder.Ruleset);
|
||||||
Dependencies.CacheAs(new StableInfo(storage));
|
Dependencies.CacheAs(new StableInfo(storage));
|
||||||
@ -152,7 +152,7 @@ namespace osu.Game.Tournament.Tests
|
|||||||
},
|
},
|
||||||
Round =
|
Round =
|
||||||
{
|
{
|
||||||
Value = new TournamentRound { Name = { Value = "Quarterfinals" } }
|
Value = new TournamentRound { Name = { Value = "Quarterfinals" } },
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
@ -17,14 +15,14 @@ namespace osu.Game.Tournament.Components
|
|||||||
{
|
{
|
||||||
public partial class DrawableTeamFlag : Container
|
public partial class DrawableTeamFlag : Container
|
||||||
{
|
{
|
||||||
private readonly TournamentTeam team;
|
private readonly TournamentTeam? team;
|
||||||
|
|
||||||
[UsedImplicitly]
|
[UsedImplicitly]
|
||||||
private Bindable<string> flag;
|
private Bindable<string>? flag;
|
||||||
|
|
||||||
private Sprite flagSprite;
|
private Sprite? flagSprite;
|
||||||
|
|
||||||
public DrawableTeamFlag(TournamentTeam team)
|
public DrawableTeamFlag(TournamentTeam? team)
|
||||||
{
|
{
|
||||||
this.team = team;
|
this.team = team;
|
||||||
}
|
}
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
@ -12,12 +10,12 @@ namespace osu.Game.Tournament.Components
|
|||||||
{
|
{
|
||||||
public partial class DrawableTeamTitle : TournamentSpriteTextWithBackground
|
public partial class DrawableTeamTitle : TournamentSpriteTextWithBackground
|
||||||
{
|
{
|
||||||
private readonly TournamentTeam team;
|
private readonly TournamentTeam? team;
|
||||||
|
|
||||||
[UsedImplicitly]
|
[UsedImplicitly]
|
||||||
private Bindable<string> acronym;
|
private Bindable<string>? acronym;
|
||||||
|
|
||||||
public DrawableTeamTitle(TournamentTeam team)
|
public DrawableTeamTitle(TournamentTeam? team)
|
||||||
{
|
{
|
||||||
this.team = team;
|
this.team = team;
|
||||||
}
|
}
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
@ -14,15 +12,15 @@ namespace osu.Game.Tournament.Components
|
|||||||
{
|
{
|
||||||
public abstract partial class DrawableTournamentTeam : CompositeDrawable
|
public abstract partial class DrawableTournamentTeam : CompositeDrawable
|
||||||
{
|
{
|
||||||
public readonly TournamentTeam Team;
|
public readonly TournamentTeam? Team;
|
||||||
|
|
||||||
protected readonly Container Flag;
|
protected readonly Container Flag;
|
||||||
protected readonly TournamentSpriteText AcronymText;
|
protected readonly TournamentSpriteText AcronymText;
|
||||||
|
|
||||||
[UsedImplicitly]
|
[UsedImplicitly]
|
||||||
private Bindable<string> acronym;
|
private Bindable<string>? acronym;
|
||||||
|
|
||||||
protected DrawableTournamentTeam(TournamentTeam team)
|
protected DrawableTournamentTeam(TournamentTeam? team)
|
||||||
{
|
{
|
||||||
Team = team;
|
Team = team;
|
||||||
|
|
||||||
@ -36,7 +34,8 @@ namespace osu.Game.Tournament.Components
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
{
|
{
|
||||||
if (Team == null) return;
|
if (Team == null)
|
||||||
|
return;
|
||||||
|
|
||||||
(acronym = Team.Acronym.GetBoundCopy()).BindValueChanged(_ => AcronymText.Text = Team?.Acronym.Value?.ToUpperInvariant() ?? string.Empty, true);
|
(acronym = Team.Acronym.GetBoundCopy()).BindValueChanged(_ => AcronymText.Text = Team?.Acronym.Value?.ToUpperInvariant() ?? string.Empty, true);
|
||||||
}
|
}
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
@ -24,14 +22,14 @@ namespace osu.Game.Tournament.Components
|
|||||||
{
|
{
|
||||||
public partial class SongBar : CompositeDrawable
|
public partial class SongBar : CompositeDrawable
|
||||||
{
|
{
|
||||||
private TournamentBeatmap beatmap;
|
private TournamentBeatmap? beatmap;
|
||||||
|
|
||||||
public const float HEIGHT = 145 / 2f;
|
public const float HEIGHT = 145 / 2f;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private IBindable<RulesetInfo> ruleset { get; set; }
|
private IBindable<RulesetInfo> ruleset { get; set; } = null!;
|
||||||
|
|
||||||
public TournamentBeatmap Beatmap
|
public TournamentBeatmap? Beatmap
|
||||||
{
|
{
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
@ -55,7 +53,7 @@ namespace osu.Game.Tournament.Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private FillFlowContainer flow;
|
private FillFlowContainer flow = null!;
|
||||||
|
|
||||||
private bool expanded;
|
private bool expanded;
|
||||||
|
|
||||||
|
@ -146,7 +146,12 @@ namespace osu.Game.Tournament.Components
|
|||||||
|
|
||||||
private void updateState()
|
private void updateState()
|
||||||
{
|
{
|
||||||
var newChoice = currentMatch.Value?.PicksBans.FirstOrDefault(p => p.BeatmapID == Beatmap?.OnlineID);
|
if (currentMatch.Value == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var newChoice = currentMatch.Value.PicksBans.FirstOrDefault(p => p.BeatmapID == Beatmap?.OnlineID);
|
||||||
|
|
||||||
bool shouldFlash = newChoice != choice;
|
bool shouldFlash = newChoice != choice;
|
||||||
|
|
||||||
|
@ -92,9 +92,9 @@ namespace osu.Game.Tournament.Components
|
|||||||
{
|
{
|
||||||
if (info.CurrentMatch.Value is TournamentMatch match)
|
if (info.CurrentMatch.Value is TournamentMatch match)
|
||||||
{
|
{
|
||||||
if (match.Team1.Value.Players.Any(u => u.OnlineID == Message.Sender.OnlineID))
|
if (match.Team1.Value?.Players.Any(u => u.OnlineID == Message.Sender.OnlineID) == true)
|
||||||
UsernameColour = TournamentGame.COLOUR_RED;
|
UsernameColour = TournamentGame.COLOUR_RED;
|
||||||
else if (match.Team2.Value.Players.Any(u => u.OnlineID == Message.Sender.OnlineID))
|
else if (match.Team2.Value?.Players.Any(u => u.OnlineID == Message.Sender.OnlineID) == true)
|
||||||
UsernameColour = TournamentGame.COLOUR_BLUE;
|
UsernameColour = TournamentGame.COLOUR_BLUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Colour;
|
using osu.Framework.Graphics.Colour;
|
||||||
@ -19,8 +17,8 @@ namespace osu.Game.Tournament.Components
|
|||||||
{
|
{
|
||||||
private readonly string filename;
|
private readonly string filename;
|
||||||
private readonly bool drawFallbackGradient;
|
private readonly bool drawFallbackGradient;
|
||||||
private Video video;
|
private Video? video;
|
||||||
private ManualClock manualClock;
|
private ManualClock? manualClock;
|
||||||
|
|
||||||
public bool VideoAvailable => video != null;
|
public bool VideoAvailable => video != null;
|
||||||
|
|
||||||
|
@ -1,12 +1,9 @@
|
|||||||
// 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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using JetBrains.Annotations;
|
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Extensions.ObjectExtensions;
|
using osu.Framework.Extensions.ObjectExtensions;
|
||||||
@ -24,36 +21,35 @@ namespace osu.Game.Tournament.IPC
|
|||||||
{
|
{
|
||||||
public partial class FileBasedIPC : MatchIPCInfo
|
public partial class FileBasedIPC : MatchIPCInfo
|
||||||
{
|
{
|
||||||
public Storage IPCStorage { get; private set; }
|
public Storage? IPCStorage { get; private set; }
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
protected IAPIProvider API { get; private set; }
|
protected IAPIProvider API { get; private set; } = null!;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
protected IRulesetStore Rulesets { get; private set; }
|
protected IRulesetStore Rulesets { get; private set; } = null!;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private GameHost host { get; set; }
|
private GameHost host { get; set; } = null!;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private LadderInfo ladder { get; set; }
|
private LadderInfo ladder { get; set; } = null!;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private StableInfo stableInfo { get; set; }
|
private StableInfo stableInfo { get; set; } = null!;
|
||||||
|
|
||||||
private int lastBeatmapId;
|
private int lastBeatmapId;
|
||||||
private ScheduledDelegate scheduled;
|
private ScheduledDelegate? scheduled;
|
||||||
private GetBeatmapRequest beatmapLookupRequest;
|
private GetBeatmapRequest? beatmapLookupRequest;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
{
|
{
|
||||||
string stablePath = stableInfo.StablePath ?? findStablePath();
|
string? stablePath = stableInfo.StablePath ?? findStablePath();
|
||||||
initialiseIPCStorage(stablePath);
|
initialiseIPCStorage(stablePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
[CanBeNull]
|
private Storage? initialiseIPCStorage(string? path)
|
||||||
private Storage initialiseIPCStorage(string path)
|
|
||||||
{
|
{
|
||||||
scheduled?.Cancel();
|
scheduled?.Cancel();
|
||||||
|
|
||||||
@ -89,7 +85,7 @@ namespace osu.Game.Tournament.IPC
|
|||||||
|
|
||||||
lastBeatmapId = beatmapId;
|
lastBeatmapId = beatmapId;
|
||||||
|
|
||||||
var existing = ladder.CurrentMatch.Value?.Round.Value?.Beatmaps.FirstOrDefault(b => b.ID == beatmapId && b.Beatmap != null);
|
var existing = ladder.CurrentMatch.Value?.Round.Value?.Beatmaps.FirstOrDefault(b => b.ID == beatmapId);
|
||||||
|
|
||||||
if (existing != null)
|
if (existing != null)
|
||||||
Beatmap.Value = existing.Beatmap;
|
Beatmap.Value = existing.Beatmap;
|
||||||
@ -97,6 +93,7 @@ namespace osu.Game.Tournament.IPC
|
|||||||
{
|
{
|
||||||
beatmapLookupRequest = new GetBeatmapRequest(new APIBeatmap { OnlineID = beatmapId });
|
beatmapLookupRequest = new GetBeatmapRequest(new APIBeatmap { OnlineID = beatmapId });
|
||||||
beatmapLookupRequest.Success += b => Beatmap.Value = new TournamentBeatmap(b);
|
beatmapLookupRequest.Success += b => Beatmap.Value = new TournamentBeatmap(b);
|
||||||
|
beatmapLookupRequest.Failure += _ => Beatmap.Value = null;
|
||||||
API.Queue(beatmapLookupRequest);
|
API.Queue(beatmapLookupRequest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -114,7 +111,7 @@ namespace osu.Game.Tournament.IPC
|
|||||||
using (var stream = IPCStorage.GetStream(file_ipc_channel_filename))
|
using (var stream = IPCStorage.GetStream(file_ipc_channel_filename))
|
||||||
using (var sr = new StreamReader(stream))
|
using (var sr = new StreamReader(stream))
|
||||||
{
|
{
|
||||||
ChatChannel.Value = sr.ReadLine();
|
ChatChannel.Value = sr.ReadLine().AsNonNull();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
@ -140,8 +137,8 @@ namespace osu.Game.Tournament.IPC
|
|||||||
using (var stream = IPCStorage.GetStream(file_ipc_scores_filename))
|
using (var stream = IPCStorage.GetStream(file_ipc_scores_filename))
|
||||||
using (var sr = new StreamReader(stream))
|
using (var sr = new StreamReader(stream))
|
||||||
{
|
{
|
||||||
Score1.Value = int.Parse(sr.ReadLine());
|
Score1.Value = int.Parse(sr.ReadLine().AsNonNull());
|
||||||
Score2.Value = int.Parse(sr.ReadLine());
|
Score2.Value = int.Parse(sr.ReadLine().AsNonNull());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
@ -164,7 +161,7 @@ namespace osu.Game.Tournament.IPC
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="path">Path to the IPC directory</param>
|
/// <param name="path">Path to the IPC directory</param>
|
||||||
/// <returns>Whether the supplied path was a valid IPC directory.</returns>
|
/// <returns>Whether the supplied path was a valid IPC directory.</returns>
|
||||||
public bool SetIPCLocation(string path)
|
public bool SetIPCLocation(string? path)
|
||||||
{
|
{
|
||||||
if (path == null || !ipcFileExistsInDirectory(path))
|
if (path == null || !ipcFileExistsInDirectory(path))
|
||||||
return false;
|
return false;
|
||||||
@ -184,29 +181,28 @@ namespace osu.Game.Tournament.IPC
|
|||||||
/// <returns>Whether an IPC directory was successfully auto-detected.</returns>
|
/// <returns>Whether an IPC directory was successfully auto-detected.</returns>
|
||||||
public bool AutoDetectIPCLocation() => SetIPCLocation(findStablePath());
|
public bool AutoDetectIPCLocation() => SetIPCLocation(findStablePath());
|
||||||
|
|
||||||
private static bool ipcFileExistsInDirectory(string p) => p != null && File.Exists(Path.Combine(p, "ipc.txt"));
|
private static bool ipcFileExistsInDirectory(string? p) => p != null && File.Exists(Path.Combine(p, "ipc.txt"));
|
||||||
|
|
||||||
[CanBeNull]
|
private string? findStablePath()
|
||||||
private string findStablePath()
|
|
||||||
{
|
{
|
||||||
string stableInstallPath = findFromEnvVar() ??
|
string? stableInstallPath = findFromEnvVar() ??
|
||||||
findFromRegistry() ??
|
findFromRegistry() ??
|
||||||
findFromLocalAppData() ??
|
findFromLocalAppData() ??
|
||||||
findFromDotFolder();
|
findFromDotFolder();
|
||||||
|
|
||||||
Logger.Log($"Stable path for tourney usage: {stableInstallPath}");
|
Logger.Log($"Stable path for tourney usage: {stableInstallPath}");
|
||||||
return stableInstallPath;
|
return stableInstallPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string findFromEnvVar()
|
private string? findFromEnvVar()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Logger.Log("Trying to find stable with environment variables");
|
Logger.Log("Trying to find stable with environment variables");
|
||||||
string stableInstallPath = Environment.GetEnvironmentVariable("OSU_STABLE_PATH");
|
string? stableInstallPath = Environment.GetEnvironmentVariable("OSU_STABLE_PATH");
|
||||||
|
|
||||||
if (ipcFileExistsInDirectory(stableInstallPath))
|
if (ipcFileExistsInDirectory(stableInstallPath))
|
||||||
return stableInstallPath;
|
return stableInstallPath!;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
@ -215,7 +211,7 @@ namespace osu.Game.Tournament.IPC
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string findFromLocalAppData()
|
private string? findFromLocalAppData()
|
||||||
{
|
{
|
||||||
Logger.Log("Trying to find stable in %LOCALAPPDATA%");
|
Logger.Log("Trying to find stable in %LOCALAPPDATA%");
|
||||||
string stableInstallPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), @"osu!");
|
string stableInstallPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), @"osu!");
|
||||||
@ -226,7 +222,7 @@ namespace osu.Game.Tournament.IPC
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string findFromDotFolder()
|
private string? findFromDotFolder()
|
||||||
{
|
{
|
||||||
Logger.Log("Trying to find stable in dotfolders");
|
Logger.Log("Trying to find stable in dotfolders");
|
||||||
string stableInstallPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".osu");
|
string stableInstallPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".osu");
|
||||||
@ -237,16 +233,16 @@ namespace osu.Game.Tournament.IPC
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string findFromRegistry()
|
private string? findFromRegistry()
|
||||||
{
|
{
|
||||||
Logger.Log("Trying to find stable in registry");
|
Logger.Log("Trying to find stable in registry");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string stableInstallPath;
|
string? stableInstallPath;
|
||||||
|
|
||||||
#pragma warning disable CA1416
|
#pragma warning disable CA1416
|
||||||
using (RegistryKey key = Registry.ClassesRoot.OpenSubKey("osu"))
|
using (RegistryKey? key = Registry.ClassesRoot.OpenSubKey("osu"))
|
||||||
stableInstallPath = key?.OpenSubKey(@"shell\open\command")?.GetValue(string.Empty)?.ToString()?.Split('"')[1].Replace("osu!.exe", "");
|
stableInstallPath = key?.OpenSubKey(@"shell\open\command")?.GetValue(string.Empty)?.ToString()?.Split('"')[1].Replace("osu!.exe", "");
|
||||||
#pragma warning restore CA1416
|
#pragma warning restore CA1416
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ namespace osu.Game.Tournament.IPC
|
|||||||
{
|
{
|
||||||
public partial class MatchIPCInfo : Component
|
public partial class MatchIPCInfo : Component
|
||||||
{
|
{
|
||||||
public Bindable<TournamentBeatmap> Beatmap { get; } = new Bindable<TournamentBeatmap>();
|
public Bindable<TournamentBeatmap?> Beatmap { get; } = new Bindable<TournamentBeatmap?>();
|
||||||
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 Bindable<string> ChatChannel { get; } = new Bindable<string>();
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
@ -28,7 +26,7 @@ namespace osu.Game.Tournament
|
|||||||
if (reader.TokenType != JsonToken.StartObject)
|
if (reader.TokenType != JsonToken.StartObject)
|
||||||
{
|
{
|
||||||
// if there's no object present then this is using string representation (System.Drawing.Point serializes to "x,y")
|
// if there's no object present then this is using string representation (System.Drawing.Point serializes to "x,y")
|
||||||
string str = (string)reader.Value;
|
string? str = (string?)reader.Value;
|
||||||
|
|
||||||
Debug.Assert(str != null);
|
Debug.Assert(str != null);
|
||||||
|
|
||||||
@ -45,9 +43,12 @@ namespace osu.Game.Tournament
|
|||||||
|
|
||||||
if (reader.TokenType == JsonToken.PropertyName)
|
if (reader.TokenType == JsonToken.PropertyName)
|
||||||
{
|
{
|
||||||
string name = reader.Value?.ToString();
|
string? name = reader.Value?.ToString();
|
||||||
int? val = reader.ReadAsInt32();
|
int? val = reader.ReadAsInt32();
|
||||||
|
|
||||||
|
if (name == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (val == null)
|
if (val == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
@ -17,7 +15,7 @@ namespace osu.Game.Tournament.Models
|
|||||||
[Serializable]
|
[Serializable]
|
||||||
public class LadderInfo
|
public class LadderInfo
|
||||||
{
|
{
|
||||||
public Bindable<RulesetInfo> Ruleset = new Bindable<RulesetInfo>();
|
public Bindable<RulesetInfo?> Ruleset = new Bindable<RulesetInfo?>();
|
||||||
|
|
||||||
public BindableList<TournamentMatch> Matches = new BindableList<TournamentMatch>();
|
public BindableList<TournamentMatch> Matches = new BindableList<TournamentMatch>();
|
||||||
public BindableList<TournamentRound> Rounds = new BindableList<TournamentRound>();
|
public BindableList<TournamentRound> Rounds = new BindableList<TournamentRound>();
|
||||||
@ -27,7 +25,7 @@ namespace osu.Game.Tournament.Models
|
|||||||
public List<TournamentProgression> Progressions = new List<TournamentProgression>();
|
public List<TournamentProgression> Progressions = new List<TournamentProgression>();
|
||||||
|
|
||||||
[JsonIgnore] // updated manually in TournamentGameBase
|
[JsonIgnore] // updated manually in TournamentGameBase
|
||||||
public Bindable<TournamentMatch> CurrentMatch = new Bindable<TournamentMatch>();
|
public Bindable<TournamentMatch?> CurrentMatch = new Bindable<TournamentMatch?>();
|
||||||
|
|
||||||
public Bindable<int> ChromaKeyWidth = new BindableInt(1024)
|
public Bindable<int> ChromaKeyWidth = new BindableInt(1024)
|
||||||
{
|
{
|
||||||
|
@ -8,7 +8,6 @@ namespace osu.Game.Tournament.Models
|
|||||||
public class RoundBeatmap
|
public class RoundBeatmap
|
||||||
{
|
{
|
||||||
public int ID;
|
public int ID;
|
||||||
|
|
||||||
public string Mods = string.Empty;
|
public string Mods = string.Empty;
|
||||||
|
|
||||||
[JsonProperty("BeatmapInfo")]
|
[JsonProperty("BeatmapInfo")]
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
@ -20,12 +18,12 @@ namespace osu.Game.Tournament.Models
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Path to the IPC directory used by the stable (cutting-edge) install.
|
/// Path to the IPC directory used by the stable (cutting-edge) install.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string StablePath { get; set; }
|
public string? StablePath { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Fired whenever stable info is successfully saved to file.
|
/// Fired whenever stable info is successfully saved to file.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public event Action OnStableInfoSaved;
|
public event Action? OnStableInfoSaved;
|
||||||
|
|
||||||
private const string config_path = "stable.json";
|
private const string config_path = "stable.json";
|
||||||
|
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
@ -33,16 +31,16 @@ namespace osu.Game.Tournament.Models
|
|||||||
}
|
}
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public readonly Bindable<TournamentTeam> Team1 = new Bindable<TournamentTeam>();
|
public readonly Bindable<TournamentTeam?> Team1 = new Bindable<TournamentTeam?>();
|
||||||
|
|
||||||
public string Team1Acronym;
|
public string? Team1Acronym;
|
||||||
|
|
||||||
public readonly Bindable<int?> Team1Score = new Bindable<int?>();
|
public readonly Bindable<int?> Team1Score = new Bindable<int?>();
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public readonly Bindable<TournamentTeam> Team2 = new Bindable<TournamentTeam>();
|
public readonly Bindable<TournamentTeam?> Team2 = new Bindable<TournamentTeam?>();
|
||||||
|
|
||||||
public string Team2Acronym;
|
public string? Team2Acronym;
|
||||||
|
|
||||||
public readonly Bindable<int?> Team2Score = new Bindable<int?>();
|
public readonly Bindable<int?> Team2Score = new Bindable<int?>();
|
||||||
|
|
||||||
@ -53,13 +51,13 @@ namespace osu.Game.Tournament.Models
|
|||||||
public readonly ObservableCollection<BeatmapChoice> PicksBans = new ObservableCollection<BeatmapChoice>();
|
public readonly ObservableCollection<BeatmapChoice> PicksBans = new ObservableCollection<BeatmapChoice>();
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public readonly Bindable<TournamentRound> Round = new Bindable<TournamentRound>();
|
public readonly Bindable<TournamentRound?> Round = new Bindable<TournamentRound?>();
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public readonly Bindable<TournamentMatch> Progression = new Bindable<TournamentMatch>();
|
public readonly Bindable<TournamentMatch?> Progression = new Bindable<TournamentMatch?>();
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public readonly Bindable<TournamentMatch> LosersProgression = new Bindable<TournamentMatch>();
|
public readonly Bindable<TournamentMatch?> LosersProgression = new Bindable<TournamentMatch?>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Should not be set directly. Use LadderInfo.CurrentMatch.Value = this instead.
|
/// Should not be set directly. Use LadderInfo.CurrentMatch.Value = this instead.
|
||||||
@ -79,7 +77,7 @@ namespace osu.Game.Tournament.Models
|
|||||||
Team2.BindValueChanged(t => Team2Acronym = t.NewValue?.Acronym.Value, true);
|
Team2.BindValueChanged(t => Team2Acronym = t.NewValue?.Acronym.Value, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TournamentMatch(TournamentTeam team1 = null, TournamentTeam team2 = null)
|
public TournamentMatch(TournamentTeam? team1 = null, TournamentTeam? team2 = null)
|
||||||
: this()
|
: this()
|
||||||
{
|
{
|
||||||
Team1.Value = team1;
|
Team1.Value = team1;
|
||||||
@ -87,10 +85,10 @@ namespace osu.Game.Tournament.Models
|
|||||||
}
|
}
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public TournamentTeam Winner => !Completed.Value ? null : Team1Score.Value > Team2Score.Value ? Team1.Value : Team2.Value;
|
public TournamentTeam? Winner => !Completed.Value ? null : Team1Score.Value > Team2Score.Value ? Team1.Value : Team2.Value;
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public TournamentTeam Loser => !Completed.Value ? null : Team1Score.Value > Team2Score.Value ? Team2.Value : Team1.Value;
|
public TournamentTeam? Loser => !Completed.Value ? null : Team1Score.Value > Team2Score.Value ? Team2.Value : Team1.Value;
|
||||||
|
|
||||||
public TeamColour WinnerColour => Winner == Team1.Value ? TeamColour.Red : TeamColour.Blue;
|
public TeamColour WinnerColour => Winner == Team1.Value ? TeamColour.Red : TeamColour.Blue;
|
||||||
|
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
@ -39,7 +37,7 @@ namespace osu.Game.Tournament.Models
|
|||||||
{
|
{
|
||||||
int[] ranks = Players.Select(p => p.Rank)
|
int[] ranks = Players.Select(p => p.Rank)
|
||||||
.Where(i => i.HasValue)
|
.Where(i => i.HasValue)
|
||||||
.Select(i => i.Value)
|
.Select(i => i!.Value)
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
if (ranks.Length == 0)
|
if (ranks.Length == 0)
|
||||||
@ -66,14 +64,14 @@ namespace osu.Game.Tournament.Models
|
|||||||
{
|
{
|
||||||
// use a sane default flag name based on acronym.
|
// use a sane default flag name based on acronym.
|
||||||
if (val.OldValue.StartsWith(FlagName.Value, StringComparison.InvariantCultureIgnoreCase))
|
if (val.OldValue.StartsWith(FlagName.Value, StringComparison.InvariantCultureIgnoreCase))
|
||||||
FlagName.Value = val.NewValue.Length >= 2 ? val.NewValue?.Substring(0, 2).ToUpperInvariant() : string.Empty;
|
FlagName.Value = val.NewValue?.Length >= 2 ? val.NewValue.Substring(0, 2).ToUpperInvariant() : string.Empty;
|
||||||
};
|
};
|
||||||
|
|
||||||
FullName.ValueChanged += val =>
|
FullName.ValueChanged += val =>
|
||||||
{
|
{
|
||||||
// use a sane acronym based on full name.
|
// use a sane acronym based on full name.
|
||||||
if (val.OldValue.StartsWith(Acronym.Value, StringComparison.InvariantCultureIgnoreCase))
|
if (val.OldValue.StartsWith(Acronym.Value, StringComparison.InvariantCultureIgnoreCase))
|
||||||
Acronym.Value = val.NewValue.Length >= 3 ? val.NewValue?.Substring(0, 3).ToUpperInvariant() : string.Empty;
|
Acronym.Value = val.NewValue?.Length >= 3 ? val.NewValue.Substring(0, 3).ToUpperInvariant() : string.Empty;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ namespace osu.Game.Tournament.Screens
|
|||||||
SongBar.Mods = mods.NewValue;
|
SongBar.Mods = mods.NewValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void beatmapChanged(ValueChangedEvent<TournamentBeatmap> beatmap)
|
private void beatmapChanged(ValueChangedEvent<TournamentBeatmap?> beatmap)
|
||||||
{
|
{
|
||||||
SongBar.FadeInFromZero(300, Easing.OutQuint);
|
SongBar.FadeInFromZero(300, Easing.OutQuint);
|
||||||
SongBar.Beatmap = beatmap.NewValue;
|
SongBar.Beatmap = beatmap.NewValue;
|
||||||
|
@ -84,7 +84,7 @@ namespace osu.Game.Tournament.Screens.Drawings.Components
|
|||||||
|
|
||||||
public bool ContainsTeam(string fullName)
|
public bool ContainsTeam(string fullName)
|
||||||
{
|
{
|
||||||
return allTeams.Any(t => t.Team.FullName.Value == fullName);
|
return allTeams.Any(t => t.Team?.FullName.Value == fullName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool RemoveTeam(TournamentTeam team)
|
public bool RemoveTeam(TournamentTeam team)
|
||||||
@ -112,7 +112,7 @@ namespace osu.Game.Tournament.Screens.Drawings.Components
|
|||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
foreach (GroupTeam gt in allTeams)
|
foreach (GroupTeam gt in allTeams)
|
||||||
sb.AppendLine(gt.Team.FullName.Value);
|
sb.AppendLine(gt.Team?.FullName.Value);
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
// 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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using osu.Framework.Extensions.ObjectExtensions;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Colour;
|
using osu.Framework.Graphics.Colour;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
@ -22,8 +21,8 @@ namespace osu.Game.Tournament.Screens.Drawings.Components
|
|||||||
{
|
{
|
||||||
public partial class ScrollingTeamContainer : Container
|
public partial class ScrollingTeamContainer : Container
|
||||||
{
|
{
|
||||||
public event Action OnScrollStarted;
|
public event Action? OnScrollStarted;
|
||||||
public event Action<TournamentTeam> OnSelected;
|
public event Action<TournamentTeam>? OnSelected;
|
||||||
|
|
||||||
private readonly List<TournamentTeam> availableTeams = new List<TournamentTeam>();
|
private readonly List<TournamentTeam> availableTeams = new List<TournamentTeam>();
|
||||||
|
|
||||||
@ -42,7 +41,7 @@ namespace osu.Game.Tournament.Screens.Drawings.Components
|
|||||||
|
|
||||||
private double lastTime;
|
private double lastTime;
|
||||||
|
|
||||||
private ScheduledDelegate delayedStateChangeDelegate;
|
private ScheduledDelegate? delayedStateChangeDelegate;
|
||||||
|
|
||||||
public ScrollingTeamContainer()
|
public ScrollingTeamContainer()
|
||||||
{
|
{
|
||||||
@ -117,7 +116,7 @@ namespace osu.Game.Tournament.Screens.Drawings.Components
|
|||||||
if (!Children.Any())
|
if (!Children.Any())
|
||||||
break;
|
break;
|
||||||
|
|
||||||
ScrollingTeam closest = null;
|
ScrollingTeam? closest = null;
|
||||||
|
|
||||||
foreach (var c in Children)
|
foreach (var c in Children)
|
||||||
{
|
{
|
||||||
@ -137,9 +136,8 @@ namespace osu.Game.Tournament.Screens.Drawings.Components
|
|||||||
closest = stc;
|
closest = stc;
|
||||||
}
|
}
|
||||||
|
|
||||||
Trace.Assert(closest != null, "closest != null");
|
Debug.Assert(closest != null, "closest != null");
|
||||||
|
|
||||||
// ReSharper disable once PossibleNullReferenceException
|
|
||||||
offset += DrawWidth / 2f - (closest.Position.X + closest.DrawWidth / 2f);
|
offset += DrawWidth / 2f - (closest.Position.X + closest.DrawWidth / 2f);
|
||||||
|
|
||||||
ScrollingTeam st = closest;
|
ScrollingTeam st = closest;
|
||||||
@ -147,7 +145,7 @@ namespace osu.Game.Tournament.Screens.Drawings.Components
|
|||||||
availableTeams.RemoveAll(at => at == st.Team);
|
availableTeams.RemoveAll(at => at == st.Team);
|
||||||
|
|
||||||
st.Selected = true;
|
st.Selected = true;
|
||||||
OnSelected?.Invoke(st.Team);
|
OnSelected?.Invoke(st.Team.AsNonNull());
|
||||||
|
|
||||||
delayedStateChangeDelegate = Scheduler.AddDelayed(() => setScrollState(ScrollState.Idle), 10000);
|
delayedStateChangeDelegate = Scheduler.AddDelayed(() => setScrollState(ScrollState.Idle), 10000);
|
||||||
break;
|
break;
|
||||||
@ -174,7 +172,7 @@ namespace osu.Game.Tournament.Screens.Drawings.Components
|
|||||||
setScrollState(ScrollState.Idle);
|
setScrollState(ScrollState.Idle);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddTeams(IEnumerable<TournamentTeam> teams)
|
public void AddTeams(IEnumerable<TournamentTeam>? teams)
|
||||||
{
|
{
|
||||||
if (teams == null)
|
if (teams == null)
|
||||||
return;
|
return;
|
||||||
@ -311,6 +309,8 @@ namespace osu.Game.Tournament.Screens.Drawings.Components
|
|||||||
|
|
||||||
public partial class ScrollingTeam : DrawableTournamentTeam
|
public partial class ScrollingTeam : DrawableTournamentTeam
|
||||||
{
|
{
|
||||||
|
public new TournamentTeam Team => base.Team.AsNonNull();
|
||||||
|
|
||||||
public const float WIDTH = 58;
|
public const float WIDTH = 58;
|
||||||
public const float HEIGHT = 44;
|
public const float HEIGHT = 44;
|
||||||
|
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@ -39,7 +37,7 @@ namespace osu.Game.Tournament.Screens.Drawings.Components
|
|||||||
{
|
{
|
||||||
while (sr.Peek() != -1)
|
while (sr.Peek() != -1)
|
||||||
{
|
{
|
||||||
string line = sr.ReadLine()?.Trim();
|
string? line = sr.ReadLine()?.Trim();
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(line))
|
if (string.IsNullOrEmpty(line))
|
||||||
continue;
|
continue;
|
||||||
@ -56,7 +54,7 @@ namespace osu.Game.Tournament.Screens.Drawings.Components
|
|||||||
teams.Add(new TournamentTeam
|
teams.Add(new TournamentTeam
|
||||||
{
|
{
|
||||||
FullName = { Value = split[1], },
|
FullName = { Value = split[1], },
|
||||||
Acronym = { Value = split.Length >= 3 ? split[2] : null, },
|
Acronym = { Value = split.Length >= 3 ? split[2] : string.Empty, },
|
||||||
FlagName = { Value = split[0] }
|
FlagName = { Value = split[0] }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
@ -72,7 +70,7 @@ namespace osu.Game.Tournament.Screens.Drawings.Components
|
|||||||
|
|
||||||
private float leftPos => -(float)((Time.Current + Offset) / CycleTime) + expiredCount;
|
private float leftPos => -(float)((Time.Current + Offset) / CycleTime) + expiredCount;
|
||||||
|
|
||||||
private Texture texture;
|
private Texture texture = null!;
|
||||||
|
|
||||||
private int expiredCount;
|
private int expiredCount;
|
||||||
|
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
// 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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Extensions.ObjectExtensions;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Shapes;
|
using osu.Framework.Graphics.Shapes;
|
||||||
@ -28,28 +27,29 @@ namespace osu.Game.Tournament.Screens.Drawings
|
|||||||
{
|
{
|
||||||
private const string results_filename = "drawings_results.txt";
|
private const string results_filename = "drawings_results.txt";
|
||||||
|
|
||||||
private ScrollingTeamContainer teamsContainer;
|
private ScrollingTeamContainer teamsContainer = null!;
|
||||||
private GroupContainer groupsContainer;
|
private GroupContainer groupsContainer = null!;
|
||||||
private TournamentSpriteText fullTeamNameText;
|
private TournamentSpriteText fullTeamNameText = null!;
|
||||||
|
|
||||||
private readonly List<TournamentTeam> allTeams = new List<TournamentTeam>();
|
private readonly List<TournamentTeam> allTeams = new List<TournamentTeam>();
|
||||||
|
|
||||||
private DrawingsConfigManager drawingsConfig;
|
private DrawingsConfigManager drawingsConfig = null!;
|
||||||
|
|
||||||
private Task writeOp;
|
private Task? writeOp;
|
||||||
|
|
||||||
private Storage storage;
|
private Storage storage = null!;
|
||||||
|
|
||||||
public ITeamList TeamList;
|
public ITeamList TeamList = null!;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(Storage storage)
|
private void load(Storage storage)
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both;
|
|
||||||
|
|
||||||
this.storage = storage;
|
this.storage = storage;
|
||||||
|
|
||||||
TeamList ??= new StorageBackedTeamList(storage);
|
RelativeSizeAxes = Axes.Both;
|
||||||
|
|
||||||
|
if (TeamList.IsNull())
|
||||||
|
TeamList = new StorageBackedTeamList(storage);
|
||||||
|
|
||||||
if (!TeamList.Teams.Any())
|
if (!TeamList.Teams.Any())
|
||||||
{
|
{
|
||||||
@ -251,7 +251,7 @@ namespace osu.Game.Tournament.Screens.Drawings
|
|||||||
using (Stream stream = storage.GetStream(results_filename, FileAccess.Read, FileMode.Open))
|
using (Stream stream = storage.GetStream(results_filename, FileAccess.Read, FileMode.Open))
|
||||||
using (StreamReader sr = new StreamReader(stream))
|
using (StreamReader sr = new StreamReader(stream))
|
||||||
{
|
{
|
||||||
string line;
|
string? line;
|
||||||
|
|
||||||
while ((line = sr.ReadLine()?.Trim()) != null)
|
while ((line = sr.ReadLine()?.Trim()) != null)
|
||||||
{
|
{
|
||||||
@ -261,8 +261,7 @@ namespace osu.Game.Tournament.Screens.Drawings
|
|||||||
if (line.ToUpperInvariant().StartsWith("GROUP", StringComparison.Ordinal))
|
if (line.ToUpperInvariant().StartsWith("GROUP", StringComparison.Ordinal))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// ReSharper disable once AccessToModifiedClosure
|
TournamentTeam? teamToAdd = allTeams.FirstOrDefault(t => t.FullName.Value == line);
|
||||||
TournamentTeam teamToAdd = allTeams.FirstOrDefault(t => t.FullName.Value == line);
|
|
||||||
|
|
||||||
if (teamToAdd == null)
|
if (teamToAdd == null)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1,12 +1,9 @@
|
|||||||
// 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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using JetBrains.Annotations;
|
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
@ -35,13 +32,12 @@ namespace osu.Game.Tournament.Screens.Editors
|
|||||||
[Cached]
|
[Cached]
|
||||||
private LadderEditorInfo editorInfo = new LadderEditorInfo();
|
private LadderEditorInfo editorInfo = new LadderEditorInfo();
|
||||||
|
|
||||||
private WarningBox rightClickMessage;
|
private WarningBox rightClickMessage = null!;
|
||||||
|
|
||||||
private RectangularPositionSnapGrid grid;
|
private RectangularPositionSnapGrid grid = null!;
|
||||||
|
|
||||||
[Resolved(canBeNull: true)]
|
[Resolved]
|
||||||
[CanBeNull]
|
private IDialogOverlay? dialogOverlay { get; set; }
|
||||||
private IDialogOverlay dialogOverlay { get; set; }
|
|
||||||
|
|
||||||
protected override bool DrawLoserPaths => true;
|
protected override bool DrawLoserPaths => true;
|
||||||
|
|
||||||
@ -94,36 +90,28 @@ namespace osu.Game.Tournament.Screens.Editors
|
|||||||
ScrollContent.Add(new JoinVisualiser(MatchesContainer, match, losers, UpdateLayout));
|
ScrollContent.Add(new JoinVisualiser(MatchesContainer, match, losers, UpdateLayout));
|
||||||
}
|
}
|
||||||
|
|
||||||
public MenuItem[] ContextMenuItems
|
public MenuItem[] ContextMenuItems =>
|
||||||
{
|
new MenuItem[]
|
||||||
get
|
|
||||||
{
|
{
|
||||||
if (editorInfo == null)
|
new OsuMenuItem("Create new match", MenuItemType.Highlighted, () =>
|
||||||
return Array.Empty<MenuItem>();
|
|
||||||
|
|
||||||
return new MenuItem[]
|
|
||||||
{
|
{
|
||||||
new OsuMenuItem("Create new match", MenuItemType.Highlighted, () =>
|
Vector2 pos = MatchesContainer.Count == 0 ? Vector2.Zero : lastMatchesContainerMouseDownPosition;
|
||||||
|
|
||||||
|
TournamentMatch newMatch = new TournamentMatch { Position = { Value = new Point((int)pos.X, (int)pos.Y) } };
|
||||||
|
|
||||||
|
LadderInfo.Matches.Add(newMatch);
|
||||||
|
|
||||||
|
editorInfo.Selected.Value = newMatch;
|
||||||
|
}),
|
||||||
|
new OsuMenuItem("Reset teams", MenuItemType.Destructive, () =>
|
||||||
|
{
|
||||||
|
dialogOverlay?.Push(new LadderResetTeamsDialog(() =>
|
||||||
{
|
{
|
||||||
Vector2 pos = MatchesContainer.Count == 0 ? Vector2.Zero : lastMatchesContainerMouseDownPosition;
|
foreach (var p in MatchesContainer)
|
||||||
|
p.Match.Reset();
|
||||||
TournamentMatch newMatch = new TournamentMatch { Position = { Value = new Point((int)pos.X, (int)pos.Y) } };
|
}));
|
||||||
|
})
|
||||||
LadderInfo.Matches.Add(newMatch);
|
};
|
||||||
|
|
||||||
editorInfo.Selected.Value = newMatch;
|
|
||||||
}),
|
|
||||||
new OsuMenuItem("Reset teams", MenuItemType.Destructive, () =>
|
|
||||||
{
|
|
||||||
dialogOverlay?.Push(new LadderResetTeamsDialog(() =>
|
|
||||||
{
|
|
||||||
foreach (var p in MatchesContainer)
|
|
||||||
p.Match.Reset();
|
|
||||||
}));
|
|
||||||
})
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Remove(TournamentMatch match)
|
public void Remove(TournamentMatch match)
|
||||||
{
|
{
|
||||||
@ -135,11 +123,11 @@ namespace osu.Game.Tournament.Screens.Editors
|
|||||||
private readonly Container<DrawableTournamentMatch> matchesContainer;
|
private readonly Container<DrawableTournamentMatch> matchesContainer;
|
||||||
public readonly TournamentMatch Source;
|
public readonly TournamentMatch Source;
|
||||||
private readonly bool losers;
|
private readonly bool losers;
|
||||||
private readonly Action complete;
|
private readonly Action? complete;
|
||||||
|
|
||||||
private ProgressionPath path;
|
private ProgressionPath? path;
|
||||||
|
|
||||||
public JoinVisualiser(Container<DrawableTournamentMatch> matchesContainer, TournamentMatch source, bool losers, Action complete)
|
public JoinVisualiser(Container<DrawableTournamentMatch> matchesContainer, TournamentMatch source, bool losers, Action? complete)
|
||||||
{
|
{
|
||||||
this.matchesContainer = matchesContainer;
|
this.matchesContainer = matchesContainer;
|
||||||
RelativeSizeAxes = Axes.Both;
|
RelativeSizeAxes = Axes.Both;
|
||||||
@ -153,7 +141,7 @@ namespace osu.Game.Tournament.Screens.Editors
|
|||||||
Source.Progression.Value = null;
|
Source.Progression.Value = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private DrawableTournamentMatch findTarget(InputState state)
|
private DrawableTournamentMatch? findTarget(InputState state)
|
||||||
{
|
{
|
||||||
return matchesContainer.FirstOrDefault(d => d.ReceivePositionalInputAt(state.Mouse.Position));
|
return matchesContainer.FirstOrDefault(d => d.ReceivePositionalInputAt(state.Mouse.Position));
|
||||||
}
|
}
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
@ -14,9 +12,9 @@ namespace osu.Game.Tournament.Screens.Gameplay.Components
|
|||||||
{
|
{
|
||||||
public partial class MatchHeader : Container
|
public partial class MatchHeader : Container
|
||||||
{
|
{
|
||||||
private TeamScoreDisplay teamDisplay1;
|
private TeamScoreDisplay teamDisplay1 = null!;
|
||||||
private TeamScoreDisplay teamDisplay2;
|
private TeamScoreDisplay teamDisplay2 = null!;
|
||||||
private DrawableTournamentHeaderLogo logo;
|
private DrawableTournamentHeaderLogo logo = null!;
|
||||||
|
|
||||||
private bool showScores = true;
|
private bool showScores = true;
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ namespace osu.Game.Tournament.Screens.Gameplay.Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public TeamDisplay(TournamentTeam team, TeamColour colour, Bindable<int?> currentTeamScore, int pointsToWin)
|
public TeamDisplay(TournamentTeam? team, TeamColour colour, Bindable<int?> currentTeamScore, int pointsToWin)
|
||||||
: base(team)
|
: base(team)
|
||||||
{
|
{
|
||||||
AutoSizeAxes = Axes.Both;
|
AutoSizeAxes = Axes.Both;
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
@ -17,16 +15,22 @@ namespace osu.Game.Tournament.Screens.Gameplay.Components
|
|||||||
{
|
{
|
||||||
private readonly TeamColour teamColour;
|
private readonly TeamColour teamColour;
|
||||||
|
|
||||||
private readonly Bindable<TournamentMatch> currentMatch = new Bindable<TournamentMatch>();
|
private readonly Bindable<TournamentMatch?> currentMatch = new Bindable<TournamentMatch?>();
|
||||||
private readonly Bindable<TournamentTeam> currentTeam = new Bindable<TournamentTeam>();
|
private readonly Bindable<TournamentTeam?> currentTeam = new Bindable<TournamentTeam?>();
|
||||||
private readonly Bindable<int?> currentTeamScore = new Bindable<int?>();
|
private readonly Bindable<int?> currentTeamScore = new Bindable<int?>();
|
||||||
|
|
||||||
private TeamDisplay teamDisplay;
|
private TeamDisplay? teamDisplay;
|
||||||
|
|
||||||
public bool ShowScore
|
public bool ShowScore
|
||||||
{
|
{
|
||||||
get => teamDisplay.ShowScore;
|
get => teamDisplay?.ShowScore ?? false;
|
||||||
set => teamDisplay.ShowScore = value;
|
set
|
||||||
|
{
|
||||||
|
if (teamDisplay != null)
|
||||||
|
{
|
||||||
|
teamDisplay.ShowScore = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public TeamScoreDisplay(TeamColour teamColour)
|
public TeamScoreDisplay(TeamColour teamColour)
|
||||||
@ -48,7 +52,7 @@ namespace osu.Game.Tournament.Screens.Gameplay.Components
|
|||||||
updateMatch();
|
updateMatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void matchChanged(ValueChangedEvent<TournamentMatch> match)
|
private void matchChanged(ValueChangedEvent<TournamentMatch?> match)
|
||||||
{
|
{
|
||||||
currentTeamScore.UnbindBindings();
|
currentTeamScore.UnbindBindings();
|
||||||
currentTeam.UnbindBindings();
|
currentTeam.UnbindBindings();
|
||||||
@ -78,7 +82,7 @@ namespace osu.Game.Tournament.Screens.Gameplay.Components
|
|||||||
switch (e.Button)
|
switch (e.Button)
|
||||||
{
|
{
|
||||||
case MouseButton.Left:
|
case MouseButton.Left:
|
||||||
if (currentTeamScore.Value < currentMatch.Value.PointsToWin)
|
if (currentTeamScore.Value < currentMatch.Value?.PointsToWin)
|
||||||
currentTeamScore.Value++;
|
currentTeamScore.Value++;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -91,7 +95,7 @@ namespace osu.Game.Tournament.Screens.Gameplay.Components
|
|||||||
return base.OnMouseDown(e);
|
return base.OnMouseDown(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void teamChanged(ValueChangedEvent<TournamentTeam> team)
|
private void teamChanged(ValueChangedEvent<TournamentTeam?> team)
|
||||||
{
|
{
|
||||||
bool wasShowingScores = teamDisplay?.ShowScore ?? false;
|
bool wasShowingScores = teamDisplay?.ShowScore ?? false;
|
||||||
|
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
@ -146,7 +144,7 @@ namespace osu.Game.Tournament.Screens.Gameplay.Components
|
|||||||
|
|
||||||
private partial class MatchScoreCounter : CommaSeparatedScoreCounter
|
private partial class MatchScoreCounter : CommaSeparatedScoreCounter
|
||||||
{
|
{
|
||||||
private OsuSpriteText displayedSpriteText;
|
private OsuSpriteText displayedSpriteText = null!;
|
||||||
|
|
||||||
public MatchScoreCounter()
|
public MatchScoreCounter()
|
||||||
{
|
{
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
@ -26,16 +24,16 @@ namespace osu.Game.Tournament.Screens.Gameplay
|
|||||||
private readonly BindableBool warmup = new BindableBool();
|
private readonly BindableBool warmup = new BindableBool();
|
||||||
|
|
||||||
public readonly Bindable<TourneyState> State = new Bindable<TourneyState>();
|
public readonly Bindable<TourneyState> State = new Bindable<TourneyState>();
|
||||||
private OsuButton warmupButton;
|
private OsuButton warmupButton = null!;
|
||||||
private MatchIPCInfo ipc;
|
private MatchIPCInfo ipc = null!;
|
||||||
|
|
||||||
[Resolved(canBeNull: true)]
|
|
||||||
private TournamentSceneManager sceneManager { get; set; }
|
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private TournamentMatchChatDisplay chat { get; set; }
|
private TournamentSceneManager? sceneManager { get; set; }
|
||||||
|
|
||||||
private Drawable chroma;
|
[Resolved]
|
||||||
|
private TournamentMatchChatDisplay chat { get; set; } = null!;
|
||||||
|
|
||||||
|
private Drawable chroma = null!;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(LadderInfo ladder, MatchIPCInfo ipc)
|
private void load(LadderInfo ladder, MatchIPCInfo ipc)
|
||||||
@ -142,7 +140,7 @@ namespace osu.Game.Tournament.Screens.Gameplay
|
|||||||
State.BindValueChanged(_ => updateState(), true);
|
State.BindValueChanged(_ => updateState(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch> match)
|
protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch?> match)
|
||||||
{
|
{
|
||||||
base.CurrentMatchChanged(match);
|
base.CurrentMatchChanged(match);
|
||||||
|
|
||||||
@ -153,29 +151,35 @@ namespace osu.Game.Tournament.Screens.Gameplay
|
|||||||
scheduledScreenChange?.Cancel();
|
scheduledScreenChange?.Cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
private ScheduledDelegate scheduledScreenChange;
|
private ScheduledDelegate? scheduledScreenChange;
|
||||||
private ScheduledDelegate scheduledContract;
|
private ScheduledDelegate? scheduledContract;
|
||||||
|
|
||||||
private TournamentMatchScoreDisplay scoreDisplay;
|
private TournamentMatchScoreDisplay scoreDisplay = null!;
|
||||||
|
|
||||||
private TourneyState lastState;
|
private TourneyState lastState;
|
||||||
private MatchHeader header;
|
private MatchHeader header = null!;
|
||||||
|
|
||||||
private void contract()
|
private void contract()
|
||||||
{
|
{
|
||||||
|
if (!IsLoaded)
|
||||||
|
return;
|
||||||
|
|
||||||
scheduledContract?.Cancel();
|
scheduledContract?.Cancel();
|
||||||
|
|
||||||
SongBar.Expanded = false;
|
SongBar.Expanded = false;
|
||||||
scoreDisplay.FadeOut(100);
|
scoreDisplay.FadeOut(100);
|
||||||
using (chat?.BeginDelayedSequence(500))
|
using (chat.BeginDelayedSequence(500))
|
||||||
chat?.Expand();
|
chat.Expand();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void expand()
|
private void expand()
|
||||||
{
|
{
|
||||||
|
if (!IsLoaded)
|
||||||
|
return;
|
||||||
|
|
||||||
scheduledContract?.Cancel();
|
scheduledContract?.Cancel();
|
||||||
|
|
||||||
chat?.Contract();
|
chat.Contract();
|
||||||
|
|
||||||
using (BeginDelayedSequence(300))
|
using (BeginDelayedSequence(300))
|
||||||
{
|
{
|
||||||
@ -252,7 +256,7 @@ namespace osu.Game.Tournament.Screens.Gameplay
|
|||||||
private partial class ChromaArea : CompositeDrawable
|
private partial class ChromaArea : CompositeDrawable
|
||||||
{
|
{
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private LadderInfo ladder { get; set; }
|
private LadderInfo ladder { get; set; } = null!;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
@ -28,20 +26,20 @@ namespace osu.Game.Tournament.Screens.Ladder.Components
|
|||||||
{
|
{
|
||||||
private readonly TournamentMatch match;
|
private readonly TournamentMatch match;
|
||||||
private readonly bool losers;
|
private readonly bool losers;
|
||||||
private TournamentSpriteText scoreText;
|
private TournamentSpriteText scoreText = null!;
|
||||||
private Box background;
|
private Box background = null!;
|
||||||
private Box backgroundRight;
|
private Box backgroundRight = null!;
|
||||||
|
|
||||||
private readonly Bindable<int?> score = new Bindable<int?>();
|
private readonly Bindable<int?> score = new Bindable<int?>();
|
||||||
private readonly BindableBool completed = new BindableBool();
|
private readonly BindableBool completed = new BindableBool();
|
||||||
|
|
||||||
private Color4 colourWinner;
|
private Color4 colourWinner;
|
||||||
|
|
||||||
private readonly Func<bool> isWinner;
|
private readonly Func<bool>? isWinner;
|
||||||
private LadderEditorScreen ladderEditor;
|
private LadderEditorScreen ladderEditor = null!;
|
||||||
|
|
||||||
[Resolved(canBeNull: true)]
|
[Resolved]
|
||||||
private LadderInfo ladderInfo { get; set; }
|
private LadderInfo? ladderInfo { get; set; }
|
||||||
|
|
||||||
private void setCurrent()
|
private void setCurrent()
|
||||||
{
|
{
|
||||||
@ -55,10 +53,10 @@ namespace osu.Game.Tournament.Screens.Ladder.Components
|
|||||||
ladderInfo.CurrentMatch.Value.Current.Value = true;
|
ladderInfo.CurrentMatch.Value.Current.Value = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Resolved(CanBeNull = true)]
|
[Resolved]
|
||||||
private LadderEditorInfo editorInfo { get; set; }
|
private LadderEditorInfo? editorInfo { get; set; }
|
||||||
|
|
||||||
public DrawableMatchTeam(TournamentTeam team, TournamentMatch match, bool losers)
|
public DrawableMatchTeam(TournamentTeam? team, TournamentMatch match, bool losers)
|
||||||
: base(team)
|
: base(team)
|
||||||
{
|
{
|
||||||
this.match = match;
|
this.match = match;
|
||||||
@ -72,14 +70,11 @@ namespace osu.Game.Tournament.Screens.Ladder.Components
|
|||||||
AcronymText.Padding = new MarginPadding { Left = 50 };
|
AcronymText.Padding = new MarginPadding { Left = 50 };
|
||||||
AcronymText.Font = OsuFont.Torus.With(size: 22, weight: FontWeight.Bold);
|
AcronymText.Font = OsuFont.Torus.With(size: 22, weight: FontWeight.Bold);
|
||||||
|
|
||||||
if (match != null)
|
isWinner = () => match.Winner == Team;
|
||||||
{
|
|
||||||
isWinner = () => match.Winner == Team;
|
|
||||||
|
|
||||||
completed.BindTo(match.Completed);
|
completed.BindTo(match.Completed);
|
||||||
if (team != null)
|
if (team != null)
|
||||||
score.BindTo(team == match.Team1.Value ? match.Team1Score : match.Team2Score);
|
score.BindTo(team == match.Team1.Value ? match.Team1Score : match.Team2Score);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader(true)]
|
[BackgroundDependencyLoader(true)]
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
// 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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
@ -27,13 +26,13 @@ namespace osu.Game.Tournament.Screens.Ladder.Components
|
|||||||
protected readonly FillFlowContainer<DrawableMatchTeam> Flow;
|
protected readonly FillFlowContainer<DrawableMatchTeam> Flow;
|
||||||
private readonly Drawable selectionBox;
|
private readonly Drawable selectionBox;
|
||||||
private readonly Drawable currentMatchSelectionBox;
|
private readonly Drawable currentMatchSelectionBox;
|
||||||
private Bindable<TournamentMatch> globalSelection;
|
private Bindable<TournamentMatch>? globalSelection;
|
||||||
|
|
||||||
[Resolved(CanBeNull = true)]
|
[Resolved]
|
||||||
private LadderEditorInfo editorInfo { get; set; }
|
private LadderEditorInfo? editorInfo { get; set; }
|
||||||
|
|
||||||
[Resolved(CanBeNull = true)]
|
[Resolved]
|
||||||
private LadderInfo ladderInfo { get; set; }
|
private LadderInfo? ladderInfo { get; set; }
|
||||||
|
|
||||||
public DrawableTournamentMatch(TournamentMatch match, bool editor = false)
|
public DrawableTournamentMatch(TournamentMatch match, bool editor = false)
|
||||||
{
|
{
|
||||||
@ -129,7 +128,7 @@ namespace osu.Game.Tournament.Screens.Ladder.Components
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Fired when something changed that requires a ladder redraw.
|
/// Fired when something changed that requires a ladder redraw.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Action Changed;
|
public Action? Changed;
|
||||||
|
|
||||||
private readonly List<IUnbindable> refBindables = new List<IUnbindable>();
|
private readonly List<IUnbindable> refBindables = new List<IUnbindable>();
|
||||||
|
|
||||||
@ -201,20 +200,22 @@ namespace osu.Game.Tournament.Screens.Ladder.Components
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
transferProgression(Match.Progression?.Value, Match.Winner);
|
Debug.Assert(Match.Winner != null);
|
||||||
transferProgression(Match.LosersProgression?.Value, Match.Loser);
|
transferProgression(Match.Progression.Value, Match.Winner);
|
||||||
|
Debug.Assert(Match.Loser != null);
|
||||||
|
transferProgression(Match.LosersProgression.Value, Match.Loser);
|
||||||
}
|
}
|
||||||
|
|
||||||
Changed?.Invoke();
|
Changed?.Invoke();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void transferProgression(TournamentMatch destination, TournamentTeam team)
|
private void transferProgression(TournamentMatch? destination, TournamentTeam team)
|
||||||
{
|
{
|
||||||
if (destination == null) return;
|
if (destination == null) return;
|
||||||
|
|
||||||
bool progressionAbove = destination.ID < Match.ID;
|
bool progressionAbove = destination.ID < Match.ID;
|
||||||
|
|
||||||
Bindable<TournamentTeam> destinationTeam;
|
Bindable<TournamentTeam?> destinationTeam;
|
||||||
|
|
||||||
// check for the case where we have already transferred out value
|
// check for the case where we have already transferred out value
|
||||||
if (destination.Team1.Value == team)
|
if (destination.Team1.Value == team)
|
||||||
@ -268,8 +269,8 @@ namespace osu.Game.Tournament.Screens.Ladder.Components
|
|||||||
{
|
{
|
||||||
foreach (var conditional in Match.ConditionalMatches)
|
foreach (var conditional in Match.ConditionalMatches)
|
||||||
{
|
{
|
||||||
bool team1Match = conditional.Acronyms.Contains(Match.Team1Acronym);
|
bool team1Match = Match.Team1Acronym != null && conditional.Acronyms.Contains(Match.Team1Acronym);
|
||||||
bool team2Match = conditional.Acronyms.Contains(Match.Team2Acronym);
|
bool team2Match = Match.Team2Acronym != null && conditional.Acronyms.Contains(Match.Team2Acronym);
|
||||||
|
|
||||||
if (team1Match && team2Match)
|
if (team1Match && team2Match)
|
||||||
Match.Date.Value = conditional.Date.Value;
|
Match.Date.Value = conditional.Date.Value;
|
||||||
@ -344,6 +345,9 @@ namespace osu.Game.Tournament.Screens.Ladder.Components
|
|||||||
Match.Progression.Value = null;
|
Match.Progression.Value = null;
|
||||||
Match.LosersProgression.Value = null;
|
Match.LosersProgression.Value = null;
|
||||||
|
|
||||||
|
if (ladderInfo == null)
|
||||||
|
return;
|
||||||
|
|
||||||
ladderInfo.Matches.Remove(Match);
|
ladderInfo.Matches.Remove(Match);
|
||||||
|
|
||||||
foreach (var m in ladderInfo.Matches)
|
foreach (var m in ladderInfo.Matches)
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
@ -52,7 +50,7 @@ namespace osu.Game.Tournament.Screens.Ladder.Components
|
|||||||
name.BindValueChanged(_ => textName.Text = ((losers ? "Losers " : "") + round.Name).ToUpperInvariant(), true);
|
name.BindValueChanged(_ => textName.Text = ((losers ? "Losers " : "") + round.Name).ToUpperInvariant(), true);
|
||||||
|
|
||||||
description = round.Description.GetBoundCopy();
|
description = round.Description.GetBoundCopy();
|
||||||
description.BindValueChanged(_ => textDescription.Text = round.Description.Value?.ToUpperInvariant(), true);
|
description.BindValueChanged(_ => textDescription.Text = round.Description.Value?.ToUpperInvariant() ?? string.Empty, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Specialized;
|
using System.Collections.Specialized;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
@ -23,17 +21,17 @@ namespace osu.Game.Tournament.Screens.Ladder.Components
|
|||||||
{
|
{
|
||||||
public partial class LadderEditorSettings : CompositeDrawable
|
public partial class LadderEditorSettings : CompositeDrawable
|
||||||
{
|
{
|
||||||
private SettingsDropdown<TournamentRound> roundDropdown;
|
private SettingsDropdown<TournamentRound?> roundDropdown = null!;
|
||||||
private PlayerCheckbox losersCheckbox;
|
private PlayerCheckbox losersCheckbox = null!;
|
||||||
private DateTextBox dateTimeBox;
|
private DateTextBox dateTimeBox = null!;
|
||||||
private SettingsTeamDropdown team1Dropdown;
|
private SettingsTeamDropdown team1Dropdown = null!;
|
||||||
private SettingsTeamDropdown team2Dropdown;
|
private SettingsTeamDropdown team2Dropdown = null!;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private LadderEditorInfo editorInfo { get; set; }
|
private LadderEditorInfo editorInfo { get; set; } = null!;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private LadderInfo ladderInfo { get; set; }
|
private LadderInfo ladderInfo { get; set; } = null!;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
@ -77,7 +75,7 @@ namespace osu.Game.Tournament.Screens.Ladder.Components
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private void roundDropdownChanged(ValueChangedEvent<TournamentRound> round)
|
private void roundDropdownChanged(ValueChangedEvent<TournamentRound?> round)
|
||||||
{
|
{
|
||||||
if (editorInfo.Selected.Value?.Date.Value < round.NewValue?.StartDate.Value)
|
if (editorInfo.Selected.Value?.Date.Value < round.NewValue?.StartDate.Value)
|
||||||
{
|
{
|
||||||
@ -101,11 +99,11 @@ namespace osu.Game.Tournament.Screens.Ladder.Components
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
private partial class SettingsRoundDropdown : SettingsDropdown<TournamentRound>
|
private partial class SettingsRoundDropdown : SettingsDropdown<TournamentRound?>
|
||||||
{
|
{
|
||||||
public SettingsRoundDropdown(BindableList<TournamentRound> rounds)
|
public SettingsRoundDropdown(BindableList<TournamentRound> rounds)
|
||||||
{
|
{
|
||||||
Current = new Bindable<TournamentRound>();
|
Current = new Bindable<TournamentRound?>();
|
||||||
|
|
||||||
foreach (var r in rounds.Prepend(new TournamentRound()))
|
foreach (var r in rounds.Prepend(new TournamentRound()))
|
||||||
add(r);
|
add(r);
|
||||||
|
@ -12,7 +12,7 @@ using osu.Game.Tournament.Models;
|
|||||||
|
|
||||||
namespace osu.Game.Tournament.Screens.Ladder.Components
|
namespace osu.Game.Tournament.Screens.Ladder.Components
|
||||||
{
|
{
|
||||||
public partial class SettingsTeamDropdown : SettingsDropdown<TournamentTeam>
|
public partial class SettingsTeamDropdown : SettingsDropdown<TournamentTeam?>
|
||||||
{
|
{
|
||||||
public SettingsTeamDropdown(BindableList<TournamentTeam> teams)
|
public SettingsTeamDropdown(BindableList<TournamentTeam> teams)
|
||||||
{
|
{
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System.Collections.Specialized;
|
using System.Collections.Specialized;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -22,13 +20,13 @@ namespace osu.Game.Tournament.Screens.Ladder
|
|||||||
{
|
{
|
||||||
public partial class LadderScreen : TournamentScreen
|
public partial class LadderScreen : TournamentScreen
|
||||||
{
|
{
|
||||||
protected Container<DrawableTournamentMatch> MatchesContainer;
|
protected Container<DrawableTournamentMatch> MatchesContainer = null!;
|
||||||
private Container<Path> paths;
|
private Container<Path> paths = null!;
|
||||||
private Container headings;
|
private Container headings = null!;
|
||||||
|
|
||||||
protected LadderDragContainer ScrollContent;
|
protected LadderDragContainer ScrollContent = null!;
|
||||||
|
|
||||||
protected Container Content;
|
protected Container Content = null!;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
@ -24,20 +22,20 @@ namespace osu.Game.Tournament.Screens.MapPool
|
|||||||
{
|
{
|
||||||
public partial class MapPoolScreen : TournamentMatchScreen
|
public partial class MapPoolScreen : TournamentMatchScreen
|
||||||
{
|
{
|
||||||
private FillFlowContainer<FillFlowContainer<TournamentBeatmapPanel>> mapFlows;
|
private FillFlowContainer<FillFlowContainer<TournamentBeatmapPanel>> mapFlows = null!;
|
||||||
|
|
||||||
[Resolved(canBeNull: true)]
|
[Resolved]
|
||||||
private TournamentSceneManager sceneManager { get; set; }
|
private TournamentSceneManager? sceneManager { get; set; }
|
||||||
|
|
||||||
private TeamColour pickColour;
|
private TeamColour pickColour;
|
||||||
private ChoiceType pickType;
|
private ChoiceType pickType;
|
||||||
|
|
||||||
private OsuButton buttonRedBan;
|
private OsuButton buttonRedBan = null!;
|
||||||
private OsuButton buttonBlueBan;
|
private OsuButton buttonBlueBan = null!;
|
||||||
private OsuButton buttonRedPick;
|
private OsuButton buttonRedPick = null!;
|
||||||
private OsuButton buttonBluePick;
|
private OsuButton buttonBluePick = null!;
|
||||||
|
|
||||||
private ScheduledDelegate scheduledScreenChange;
|
private ScheduledDelegate? scheduledScreenChange;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(MatchIPCInfo ipc)
|
private void load(MatchIPCInfo ipc)
|
||||||
@ -113,7 +111,7 @@ namespace osu.Game.Tournament.Screens.MapPool
|
|||||||
ipc.Beatmap.BindValueChanged(beatmapChanged);
|
ipc.Beatmap.BindValueChanged(beatmapChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Bindable<bool> splitMapPoolByMods;
|
private Bindable<bool>? splitMapPoolByMods;
|
||||||
|
|
||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
{
|
{
|
||||||
@ -123,13 +121,13 @@ namespace osu.Game.Tournament.Screens.MapPool
|
|||||||
splitMapPoolByMods.BindValueChanged(_ => updateDisplay());
|
splitMapPoolByMods.BindValueChanged(_ => updateDisplay());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void beatmapChanged(ValueChangedEvent<TournamentBeatmap> beatmap)
|
private void beatmapChanged(ValueChangedEvent<TournamentBeatmap?> beatmap)
|
||||||
{
|
{
|
||||||
if (CurrentMatch.Value == null || CurrentMatch.Value.PicksBans.Count(p => p.Type == ChoiceType.Ban) < 2)
|
if (CurrentMatch.Value == null || CurrentMatch.Value.PicksBans.Count(p => p.Type == ChoiceType.Ban) < 2)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// if bans have already been placed, beatmap changes result in a selection being made autoamtically
|
// if bans have already been placed, beatmap changes result in a selection being made autoamtically
|
||||||
if (beatmap.NewValue.OnlineID > 0)
|
if (beatmap.NewValue?.OnlineID > 0)
|
||||||
addForBeatmap(beatmap.NewValue.OnlineID);
|
addForBeatmap(beatmap.NewValue.OnlineID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,6 +146,9 @@ namespace osu.Game.Tournament.Screens.MapPool
|
|||||||
|
|
||||||
private void setNextMode()
|
private void setNextMode()
|
||||||
{
|
{
|
||||||
|
if (CurrentMatch.Value == null)
|
||||||
|
return;
|
||||||
|
|
||||||
const TeamColour roll_winner = TeamColour.Red; //todo: draw from match
|
const TeamColour roll_winner = TeamColour.Red; //todo: draw from match
|
||||||
|
|
||||||
var nextColour = (CurrentMatch.Value.PicksBans.LastOrDefault()?.Team ?? roll_winner) == TeamColour.Red ? TeamColour.Blue : TeamColour.Red;
|
var nextColour = (CurrentMatch.Value.PicksBans.LastOrDefault()?.Team ?? roll_winner) == TeamColour.Red ? TeamColour.Blue : TeamColour.Red;
|
||||||
@ -169,11 +170,11 @@ namespace osu.Game.Tournament.Screens.MapPool
|
|||||||
addForBeatmap(map.Beatmap.OnlineID);
|
addForBeatmap(map.Beatmap.OnlineID);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var existing = CurrentMatch.Value.PicksBans.FirstOrDefault(p => p.BeatmapID == map.Beatmap?.OnlineID);
|
var existing = CurrentMatch.Value?.PicksBans.FirstOrDefault(p => p.BeatmapID == map.Beatmap?.OnlineID);
|
||||||
|
|
||||||
if (existing != null)
|
if (existing != null)
|
||||||
{
|
{
|
||||||
CurrentMatch.Value.PicksBans.Remove(existing);
|
CurrentMatch.Value?.PicksBans.Remove(existing);
|
||||||
setNextMode();
|
setNextMode();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -186,13 +187,13 @@ namespace osu.Game.Tournament.Screens.MapPool
|
|||||||
|
|
||||||
private void reset()
|
private void reset()
|
||||||
{
|
{
|
||||||
CurrentMatch.Value.PicksBans.Clear();
|
CurrentMatch.Value?.PicksBans.Clear();
|
||||||
setNextMode();
|
setNextMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addForBeatmap(int beatmapId)
|
private void addForBeatmap(int beatmapId)
|
||||||
{
|
{
|
||||||
if (CurrentMatch.Value == null)
|
if (CurrentMatch.Value?.Round.Value == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (CurrentMatch.Value.Round.Value.Beatmaps.All(b => b.Beatmap?.OnlineID != beatmapId))
|
if (CurrentMatch.Value.Round.Value.Beatmaps.All(b => b.Beatmap?.OnlineID != beatmapId))
|
||||||
@ -228,7 +229,7 @@ namespace osu.Game.Tournament.Screens.MapPool
|
|||||||
base.Hide();
|
base.Hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch> match)
|
protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch?> match)
|
||||||
{
|
{
|
||||||
base.CurrentMatchChanged(match);
|
base.CurrentMatchChanged(match);
|
||||||
updateDisplay();
|
updateDisplay();
|
||||||
@ -245,8 +246,8 @@ namespace osu.Game.Tournament.Screens.MapPool
|
|||||||
|
|
||||||
if (CurrentMatch.Value.Round.Value != null)
|
if (CurrentMatch.Value.Round.Value != null)
|
||||||
{
|
{
|
||||||
FillFlowContainer<TournamentBeatmapPanel> currentFlow = null;
|
FillFlowContainer<TournamentBeatmapPanel>? currentFlow = null;
|
||||||
string currentMods = null;
|
string? currentMods = null;
|
||||||
int flowCount = 0;
|
int flowCount = 0;
|
||||||
|
|
||||||
foreach (var b in CurrentMatch.Value.Round.Value.Beatmaps)
|
foreach (var b in CurrentMatch.Value.Round.Value.Beatmaps)
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
@ -21,9 +19,9 @@ namespace osu.Game.Tournament.Screens.Schedule
|
|||||||
{
|
{
|
||||||
public partial class ScheduleScreen : TournamentScreen
|
public partial class ScheduleScreen : TournamentScreen
|
||||||
{
|
{
|
||||||
private readonly Bindable<TournamentMatch> currentMatch = new Bindable<TournamentMatch>();
|
private readonly Bindable<TournamentMatch?> currentMatch = new Bindable<TournamentMatch?>();
|
||||||
private Container mainContainer;
|
private Container mainContainer = null!;
|
||||||
private LadderInfo ladder;
|
private LadderInfo ladder = null!;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(LadderInfo ladder)
|
private void load(LadderInfo ladder)
|
||||||
@ -107,7 +105,7 @@ namespace osu.Game.Tournament.Screens.Schedule
|
|||||||
currentMatch.BindValueChanged(matchChanged, true);
|
currentMatch.BindValueChanged(matchChanged, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void matchChanged(ValueChangedEvent<TournamentMatch> match)
|
private void matchChanged(ValueChangedEvent<TournamentMatch?> match)
|
||||||
{
|
{
|
||||||
var upcoming = ladder.Matches.Where(p => !p.Completed.Value && p.Team1.Value != null && p.Team2.Value != null && Math.Abs(p.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < 4);
|
var upcoming = ladder.Matches.Where(p => !p.Completed.Value && p.Team1.Value != null && p.Team2.Value != null && Math.Abs(p.Date.Value.DayOfYear - DateTimeOffset.UtcNow.DayOfYear) < 4);
|
||||||
var conditionals = ladder
|
var conditionals = ladder
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Game.Graphics.UserInterface;
|
using osu.Game.Graphics.UserInterface;
|
||||||
@ -14,9 +12,9 @@ namespace osu.Game.Tournament.Screens.Setup
|
|||||||
private const int minimum_window_height = 480;
|
private const int minimum_window_height = 480;
|
||||||
private const int maximum_window_height = 2160;
|
private const int maximum_window_height = 2160;
|
||||||
|
|
||||||
public new Action<int> Action;
|
public new Action<int>? Action;
|
||||||
|
|
||||||
private OsuNumberBox numberBox;
|
private OsuNumberBox? numberBox;
|
||||||
|
|
||||||
protected override Drawable CreateComponent()
|
protected override Drawable CreateComponent()
|
||||||
{
|
{
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
@ -24,27 +22,27 @@ namespace osu.Game.Tournament.Screens.Setup
|
|||||||
{
|
{
|
||||||
public partial class SetupScreen : TournamentScreen
|
public partial class SetupScreen : TournamentScreen
|
||||||
{
|
{
|
||||||
private FillFlowContainer fillFlow;
|
private FillFlowContainer fillFlow = null!;
|
||||||
|
|
||||||
private LoginOverlay loginOverlay;
|
private LoginOverlay? loginOverlay;
|
||||||
private ResolutionSelector resolution;
|
private ResolutionSelector resolution = null!;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private MatchIPCInfo ipc { get; set; }
|
private MatchIPCInfo ipc { get; set; } = null!;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private StableInfo stableInfo { get; set; }
|
private StableInfo stableInfo { get; set; } = null!;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private IAPIProvider api { get; set; }
|
private IAPIProvider api { get; set; } = null!;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private RulesetStore rulesets { get; set; }
|
private RulesetStore rulesets { get; set; } = null!;
|
||||||
|
|
||||||
[Resolved(canBeNull: true)]
|
[Resolved]
|
||||||
private TournamentSceneManager sceneManager { get; set; }
|
private TournamentSceneManager? sceneManager { get; set; }
|
||||||
|
|
||||||
private Bindable<Size> windowSize;
|
private Bindable<Size> windowSize = null!;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(FrameworkConfigManager frameworkConfig)
|
private void load(FrameworkConfigManager frameworkConfig)
|
||||||
@ -115,7 +113,7 @@ namespace osu.Game.Tournament.Screens.Setup
|
|||||||
Failing = api.IsLoggedIn != true,
|
Failing = api.IsLoggedIn != true,
|
||||||
Description = "In order to access the API and display metadata, signing in is required."
|
Description = "In order to access the API and display metadata, signing in is required."
|
||||||
},
|
},
|
||||||
new LabelledDropdown<RulesetInfo>
|
new LabelledDropdown<RulesetInfo?>
|
||||||
{
|
{
|
||||||
Label = "Ruleset",
|
Label = "Ruleset",
|
||||||
Description = "Decides what stats are displayed and which ranks are retrieved for players. This requires a restart to reload data for an existing bracket.",
|
Description = "Decides what stats are displayed and which ranks are retrieved for players. This requires a restart to reload data for an existing bracket.",
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
@ -23,20 +21,20 @@ namespace osu.Game.Tournament.Screens.Setup
|
|||||||
{
|
{
|
||||||
public partial class StablePathSelectScreen : TournamentScreen
|
public partial class StablePathSelectScreen : TournamentScreen
|
||||||
{
|
{
|
||||||
[Resolved(canBeNull: true)]
|
[Resolved]
|
||||||
private TournamentSceneManager sceneManager { get; set; }
|
private TournamentSceneManager? sceneManager { get; set; }
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private MatchIPCInfo ipc { get; set; }
|
private MatchIPCInfo ipc { get; set; } = null!;
|
||||||
|
|
||||||
private OsuDirectorySelector directorySelector;
|
private OsuDirectorySelector directorySelector = null!;
|
||||||
private DialogOverlay overlay;
|
private DialogOverlay? overlay;
|
||||||
|
|
||||||
[BackgroundDependencyLoader(true)]
|
[BackgroundDependencyLoader(true)]
|
||||||
private void load(Storage storage, OsuColour colours)
|
private void load(Storage storage, OsuColour colours)
|
||||||
{
|
{
|
||||||
var initialStorage = (ipc as FileBasedIPC)?.IPCStorage ?? storage;
|
var initialStorage = (ipc as FileBasedIPC)?.IPCStorage ?? storage;
|
||||||
string initialPath = new DirectoryInfo(initialStorage.GetFullPath(string.Empty)).Parent?.FullName;
|
string? initialPath = new DirectoryInfo(initialStorage.GetFullPath(string.Empty)).Parent?.FullName;
|
||||||
|
|
||||||
AddRangeInternal(new Drawable[]
|
AddRangeInternal(new Drawable[]
|
||||||
{
|
{
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Game.Graphics.UserInterface;
|
using osu.Game.Graphics.UserInterface;
|
||||||
@ -13,12 +11,12 @@ namespace osu.Game.Tournament.Screens.Setup
|
|||||||
{
|
{
|
||||||
internal partial class TournamentSwitcher : ActionableInfo
|
internal partial class TournamentSwitcher : ActionableInfo
|
||||||
{
|
{
|
||||||
private OsuDropdown<string> dropdown;
|
private OsuDropdown<string> dropdown = null!;
|
||||||
private OsuButton folderButton;
|
private OsuButton folderButton = null!;
|
||||||
private OsuButton reloadTournamentsButton;
|
private OsuButton reloadTournamentsButton = null!;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private TournamentGameBase game { get; set; }
|
private TournamentGameBase game { get; set; } = null!;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(TournamentStorage storage)
|
private void load(TournamentStorage storage)
|
||||||
|
@ -42,7 +42,7 @@ namespace osu.Game.Tournament.Screens.Showcase
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch> match)
|
protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch?> match)
|
||||||
{
|
{
|
||||||
// showcase screen doesn't care about a match being selected.
|
// showcase screen doesn't care about a match being selected.
|
||||||
// base call intentionally omitted to not show match warning.
|
// base call intentionally omitted to not show match warning.
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
@ -22,12 +20,12 @@ namespace osu.Game.Tournament.Screens.TeamIntro
|
|||||||
{
|
{
|
||||||
public partial class SeedingScreen : TournamentMatchScreen
|
public partial class SeedingScreen : TournamentMatchScreen
|
||||||
{
|
{
|
||||||
private Container mainContainer;
|
private Container mainContainer = null!;
|
||||||
|
|
||||||
private readonly Bindable<TournamentTeam> currentTeam = new Bindable<TournamentTeam>();
|
private readonly Bindable<TournamentTeam?> currentTeam = new Bindable<TournamentTeam?>();
|
||||||
|
|
||||||
private TourneyButton showFirstTeamButton;
|
private TourneyButton showFirstTeamButton = null!;
|
||||||
private TourneyButton showSecondTeamButton;
|
private TourneyButton showSecondTeamButton = null!;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
@ -53,13 +51,13 @@ namespace osu.Game.Tournament.Screens.TeamIntro
|
|||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.X,
|
RelativeSizeAxes = Axes.X,
|
||||||
Text = "Show first team",
|
Text = "Show first team",
|
||||||
Action = () => currentTeam.Value = CurrentMatch.Value.Team1.Value,
|
Action = () => currentTeam.Value = CurrentMatch.Value?.Team1.Value,
|
||||||
},
|
},
|
||||||
showSecondTeamButton = new TourneyButton
|
showSecondTeamButton = new TourneyButton
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.X,
|
RelativeSizeAxes = Axes.X,
|
||||||
Text = "Show second team",
|
Text = "Show second team",
|
||||||
Action = () => currentTeam.Value = CurrentMatch.Value.Team2.Value,
|
Action = () => currentTeam.Value = CurrentMatch.Value?.Team2.Value,
|
||||||
},
|
},
|
||||||
new SettingsTeamDropdown(LadderInfo.Teams)
|
new SettingsTeamDropdown(LadderInfo.Teams)
|
||||||
{
|
{
|
||||||
@ -73,7 +71,7 @@ namespace osu.Game.Tournament.Screens.TeamIntro
|
|||||||
currentTeam.BindValueChanged(teamChanged, true);
|
currentTeam.BindValueChanged(teamChanged, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void teamChanged(ValueChangedEvent<TournamentTeam> team) => updateTeamDisplay();
|
private void teamChanged(ValueChangedEvent<TournamentTeam?> team) => updateTeamDisplay();
|
||||||
|
|
||||||
public override void Show()
|
public override void Show()
|
||||||
{
|
{
|
||||||
@ -84,7 +82,7 @@ namespace osu.Game.Tournament.Screens.TeamIntro
|
|||||||
updateTeamDisplay();
|
updateTeamDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch> match)
|
protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch?> match)
|
||||||
{
|
{
|
||||||
base.CurrentMatchChanged(match);
|
base.CurrentMatchChanged(match);
|
||||||
|
|
||||||
@ -256,7 +254,7 @@ namespace osu.Game.Tournament.Screens.TeamIntro
|
|||||||
|
|
||||||
private partial class LeftInfo : CompositeDrawable
|
private partial class LeftInfo : CompositeDrawable
|
||||||
{
|
{
|
||||||
public LeftInfo(TournamentTeam team)
|
public LeftInfo(TournamentTeam? team)
|
||||||
{
|
{
|
||||||
FillFlowContainer fill;
|
FillFlowContainer fill;
|
||||||
|
|
||||||
@ -315,7 +313,7 @@ namespace osu.Game.Tournament.Screens.TeamIntro
|
|||||||
|
|
||||||
private partial class TeamDisplay : DrawableTournamentTeam
|
private partial class TeamDisplay : DrawableTournamentTeam
|
||||||
{
|
{
|
||||||
public TeamDisplay(TournamentTeam team)
|
public TeamDisplay(TournamentTeam? team)
|
||||||
: base(team)
|
: base(team)
|
||||||
{
|
{
|
||||||
AutoSizeAxes = Axes.Both;
|
AutoSizeAxes = Axes.Both;
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
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,7 +13,7 @@ namespace osu.Game.Tournament.Screens.TeamIntro
|
|||||||
{
|
{
|
||||||
public partial class TeamIntroScreen : TournamentMatchScreen
|
public partial class TeamIntroScreen : TournamentMatchScreen
|
||||||
{
|
{
|
||||||
private Container mainContainer;
|
private Container mainContainer = null!;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
@ -36,7 +34,7 @@ namespace osu.Game.Tournament.Screens.TeamIntro
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch> match)
|
protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch?> match)
|
||||||
{
|
{
|
||||||
base.CurrentMatchChanged(match);
|
base.CurrentMatchChanged(match);
|
||||||
|
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
@ -16,12 +14,12 @@ namespace osu.Game.Tournament.Screens.TeamWin
|
|||||||
{
|
{
|
||||||
public partial class TeamWinScreen : TournamentMatchScreen
|
public partial class TeamWinScreen : TournamentMatchScreen
|
||||||
{
|
{
|
||||||
private Container mainContainer;
|
private Container mainContainer = null!;
|
||||||
|
|
||||||
private readonly Bindable<bool> currentCompleted = new Bindable<bool>();
|
private readonly Bindable<bool> currentCompleted = new Bindable<bool>();
|
||||||
|
|
||||||
private TourneyVideo blueWinVideo;
|
private TourneyVideo blueWinVideo = null!;
|
||||||
private TourneyVideo redWinVideo;
|
private TourneyVideo redWinVideo = null!;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
@ -51,7 +49,7 @@ namespace osu.Game.Tournament.Screens.TeamWin
|
|||||||
currentCompleted.BindValueChanged(_ => update());
|
currentCompleted.BindValueChanged(_ => update());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch> match)
|
protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch?> match)
|
||||||
{
|
{
|
||||||
base.CurrentMatchChanged(match);
|
base.CurrentMatchChanged(match);
|
||||||
|
|
||||||
@ -70,7 +68,7 @@ namespace osu.Game.Tournament.Screens.TeamWin
|
|||||||
{
|
{
|
||||||
var match = CurrentMatch.Value;
|
var match = CurrentMatch.Value;
|
||||||
|
|
||||||
if (match.Winner == null)
|
if (match?.Winner == null)
|
||||||
{
|
{
|
||||||
mainContainer.Clear();
|
mainContainer.Clear();
|
||||||
return;
|
return;
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Game.Tournament.Models;
|
using osu.Game.Tournament.Models;
|
||||||
|
|
||||||
@ -10,8 +8,8 @@ namespace osu.Game.Tournament.Screens
|
|||||||
{
|
{
|
||||||
public abstract partial class TournamentMatchScreen : TournamentScreen
|
public abstract partial class TournamentMatchScreen : TournamentScreen
|
||||||
{
|
{
|
||||||
protected readonly Bindable<TournamentMatch> CurrentMatch = new Bindable<TournamentMatch>();
|
protected readonly Bindable<TournamentMatch?> CurrentMatch = new Bindable<TournamentMatch?>();
|
||||||
private WarningBox noMatchWarning;
|
private WarningBox? noMatchWarning;
|
||||||
|
|
||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
{
|
{
|
||||||
@ -21,7 +19,7 @@ namespace osu.Game.Tournament.Screens
|
|||||||
CurrentMatch.BindValueChanged(CurrentMatchChanged, true);
|
CurrentMatch.BindValueChanged(CurrentMatchChanged, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void CurrentMatchChanged(ValueChangedEvent<TournamentMatch> match)
|
protected virtual void CurrentMatchChanged(ValueChangedEvent<TournamentMatch?> match)
|
||||||
{
|
{
|
||||||
if (match.NewValue == null)
|
if (match.NewValue == null)
|
||||||
{
|
{
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
@ -35,12 +33,12 @@ namespace osu.Game.Tournament
|
|||||||
public static readonly Color4 ELEMENT_FOREGROUND_COLOUR = Color4Extensions.FromHex("#000");
|
public static readonly Color4 ELEMENT_FOREGROUND_COLOUR = Color4Extensions.FromHex("#000");
|
||||||
|
|
||||||
public static readonly Color4 TEXT_COLOUR = Color4Extensions.FromHex("#fff");
|
public static readonly Color4 TEXT_COLOUR = Color4Extensions.FromHex("#fff");
|
||||||
private Drawable heightWarning;
|
private Drawable heightWarning = null!;
|
||||||
|
|
||||||
private Bindable<WindowMode> windowMode;
|
private Bindable<WindowMode> windowMode = null!;
|
||||||
private readonly BindableSize windowSize = new BindableSize();
|
private readonly BindableSize windowSize = new BindableSize();
|
||||||
|
|
||||||
private LoadingSpinner loadingSpinner;
|
private LoadingSpinner loadingSpinner = null!;
|
||||||
|
|
||||||
[Cached(typeof(IDialogOverlay))]
|
[Cached(typeof(IDialogOverlay))]
|
||||||
private readonly DialogOverlay dialogOverlay = new DialogOverlay();
|
private readonly DialogOverlay dialogOverlay = new DialogOverlay();
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
// 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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Extensions.ObjectExtensions;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Textures;
|
using osu.Framework.Graphics.Textures;
|
||||||
using osu.Framework.Input;
|
using osu.Framework.Input;
|
||||||
@ -31,11 +30,11 @@ namespace osu.Game.Tournament
|
|||||||
public partial class TournamentGameBase : OsuGameBase
|
public partial class TournamentGameBase : OsuGameBase
|
||||||
{
|
{
|
||||||
public const string BRACKET_FILENAME = @"bracket.json";
|
public const string BRACKET_FILENAME = @"bracket.json";
|
||||||
private LadderInfo ladder;
|
private LadderInfo ladder = new LadderInfo();
|
||||||
private TournamentStorage storage;
|
private TournamentStorage storage = null!;
|
||||||
private DependencyContainer dependencies;
|
private DependencyContainer dependencies = null!;
|
||||||
private FileBasedIPC ipc;
|
private FileBasedIPC ipc = null!;
|
||||||
private BeatmapLookupCache beatmapCache;
|
private BeatmapLookupCache beatmapCache = null!;
|
||||||
|
|
||||||
protected Task BracketLoadTask => bracketLoadTaskCompletionSource.Task;
|
protected Task BracketLoadTask => bracketLoadTaskCompletionSource.Task;
|
||||||
|
|
||||||
@ -54,7 +53,7 @@ namespace osu.Game.Tournament
|
|||||||
return new ProductionEndpointConfiguration();
|
return new ProductionEndpointConfiguration();
|
||||||
}
|
}
|
||||||
|
|
||||||
private TournamentSpriteText initialisationText;
|
private TournamentSpriteText initialisationText = null!;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(Storage baseStorage)
|
private void load(Storage baseStorage)
|
||||||
@ -100,11 +99,11 @@ namespace osu.Game.Tournament
|
|||||||
{
|
{
|
||||||
using (Stream stream = storage.GetStream(BRACKET_FILENAME, FileAccess.Read, FileMode.Open))
|
using (Stream stream = storage.GetStream(BRACKET_FILENAME, FileAccess.Read, FileMode.Open))
|
||||||
using (var sr = new StreamReader(stream))
|
using (var sr = new StreamReader(stream))
|
||||||
ladder = JsonConvert.DeserializeObject<LadderInfo>(await sr.ReadToEndAsync().ConfigureAwait(false), new JsonPointConverter());
|
{
|
||||||
|
ladder = JsonConvert.DeserializeObject<LadderInfo>(await sr.ReadToEndAsync().ConfigureAwait(false), new JsonPointConverter()) ?? ladder;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ladder ??= new LadderInfo();
|
|
||||||
|
|
||||||
var resolvedRuleset = ladder.Ruleset.Value != null
|
var resolvedRuleset = ladder.Ruleset.Value != null
|
||||||
? RulesetStore.GetRuleset(ladder.Ruleset.Value.ShortName)
|
? RulesetStore.GetRuleset(ladder.Ruleset.Value.ShortName)
|
||||||
: RulesetStore.AvailableRulesets.First();
|
: RulesetStore.AvailableRulesets.First();
|
||||||
@ -283,7 +282,7 @@ namespace osu.Game.Tournament
|
|||||||
|
|
||||||
private void updateLoadProgressMessage(string s) => Schedule(() => initialisationText.Text = s);
|
private void updateLoadProgressMessage(string s) => Schedule(() => initialisationText.Text = s);
|
||||||
|
|
||||||
public void PopulatePlayer(TournamentUser user, Action success = null, Action failure = null, bool immediate = false)
|
public void PopulatePlayer(TournamentUser user, Action? success = null, Action? failure = null, bool immediate = false)
|
||||||
{
|
{
|
||||||
var req = new GetUserRequest(user.OnlineID, ladder.Ruleset.Value);
|
var req = new GetUserRequest(user.OnlineID, ladder.Ruleset.Value);
|
||||||
|
|
||||||
@ -348,8 +347,8 @@ namespace osu.Game.Tournament
|
|||||||
foreach (var r in ladder.Rounds)
|
foreach (var r in ladder.Rounds)
|
||||||
r.Matches = ladder.Matches.Where(p => p.Round.Value == r).Select(p => p.ID).ToList();
|
r.Matches = ladder.Matches.Where(p => p.Round.Value == r).Select(p => p.ID).ToList();
|
||||||
|
|
||||||
ladder.Progressions = ladder.Matches.Where(p => p.Progression.Value != null).Select(p => new TournamentProgression(p.ID, p.Progression.Value.ID)).Concat(
|
ladder.Progressions = ladder.Matches.Where(p => p.Progression.Value != null).Select(p => new TournamentProgression(p.ID, p.Progression.Value.AsNonNull().ID)).Concat(
|
||||||
ladder.Matches.Where(p => p.LosersProgression.Value != null).Select(p => new TournamentProgression(p.ID, p.LosersProgression.Value.ID, true)))
|
ladder.Matches.Where(p => p.LosersProgression.Value != null).Select(p => new TournamentProgression(p.ID, p.LosersProgression.Value.AsNonNull().ID, true)))
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
return JsonConvert.SerializeObject(ladder,
|
return JsonConvert.SerializeObject(ladder,
|
||||||
|
@ -1,8 +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.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
@ -35,8 +33,8 @@ namespace osu.Game.Tournament
|
|||||||
[Cached]
|
[Cached]
|
||||||
public partial class TournamentSceneManager : CompositeDrawable
|
public partial class TournamentSceneManager : CompositeDrawable
|
||||||
{
|
{
|
||||||
private Container screens;
|
private Container screens = null!;
|
||||||
private TourneyVideo video;
|
private TourneyVideo video = null!;
|
||||||
|
|
||||||
public const int CONTROL_AREA_WIDTH = 200;
|
public const int CONTROL_AREA_WIDTH = 200;
|
||||||
|
|
||||||
@ -50,8 +48,8 @@ namespace osu.Game.Tournament
|
|||||||
[Cached]
|
[Cached]
|
||||||
private TournamentMatchChatDisplay chat = new TournamentMatchChatDisplay();
|
private TournamentMatchChatDisplay chat = new TournamentMatchChatDisplay();
|
||||||
|
|
||||||
private Container chatContainer;
|
private Container chatContainer = null!;
|
||||||
private FillFlowContainer buttons;
|
private FillFlowContainer buttons = null!;
|
||||||
|
|
||||||
public TournamentSceneManager()
|
public TournamentSceneManager()
|
||||||
{
|
{
|
||||||
@ -166,10 +164,10 @@ namespace osu.Game.Tournament
|
|||||||
|
|
||||||
private float depth;
|
private float depth;
|
||||||
|
|
||||||
private Drawable currentScreen;
|
private Drawable? currentScreen;
|
||||||
private ScheduledDelegate scheduledHide;
|
private ScheduledDelegate? scheduledHide;
|
||||||
|
|
||||||
private Drawable temporaryScreen;
|
private Drawable? temporaryScreen;
|
||||||
|
|
||||||
public void SetScreen(Drawable screen)
|
public void SetScreen(Drawable screen)
|
||||||
{
|
{
|
||||||
@ -284,7 +282,7 @@ namespace osu.Game.Tournament
|
|||||||
Y = -2,
|
Y = -2,
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
Text = shortcutKey.ToString(),
|
Text = shortcutKey.Value.ToString(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -304,7 +302,7 @@ namespace osu.Game.Tournament
|
|||||||
|
|
||||||
private bool isSelected;
|
private bool isSelected;
|
||||||
|
|
||||||
public Action<Type> RequestSelection;
|
public Action<Type>? RequestSelection;
|
||||||
|
|
||||||
public bool IsSelected
|
public bool IsSelected
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user