1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-12 17:43:05 +08:00

Add tournament switching in the UI

This commit is contained in:
Shivam 2020-12-07 13:11:13 +01:00
parent 87da6b3270
commit eda6e1fbdd
2 changed files with 31 additions and 0 deletions

View File

@ -1,10 +1,12 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text. // See the LICENCE file in the repository root for full licence text.
using osu.Framework.Bindables;
using osu.Framework.Logging; using osu.Framework.Logging;
using osu.Framework.Platform; using osu.Framework.Platform;
using osu.Game.IO; using osu.Game.IO;
using System.IO; using System.IO;
using System.Collections.Generic;
using osu.Game.Tournament.Configuration; using osu.Game.Tournament.Configuration;
namespace osu.Game.Tournament.IO namespace osu.Game.Tournament.IO
@ -13,12 +15,15 @@ namespace osu.Game.Tournament.IO
{ {
private const string default_tournament = "default"; private const string default_tournament = "default";
private readonly Storage storage; private readonly Storage storage;
private readonly Storage allTournaments;
private readonly TournamentStorageManager storageConfig; private readonly TournamentStorageManager storageConfig;
public readonly Bindable<string> CurrentTournament;
public TournamentStorage(Storage storage) public TournamentStorage(Storage storage)
: base(storage.GetStorageForDirectory("tournaments"), string.Empty) : base(storage.GetStorageForDirectory("tournaments"), string.Empty)
{ {
this.storage = storage; this.storage = storage;
allTournaments = UnderlyingStorage;
storageConfig = new TournamentStorageManager(storage); storageConfig = new TournamentStorageManager(storage);
@ -29,9 +34,22 @@ namespace osu.Game.Tournament.IO
else else
Migrate(UnderlyingStorage.GetStorageForDirectory(default_tournament)); Migrate(UnderlyingStorage.GetStorageForDirectory(default_tournament));
CurrentTournament = new Bindable<string>(storageConfig.Get<string>(StorageConfig.CurrentTournament));
Logger.Log("Using tournament storage: " + GetFullPath(string.Empty)); Logger.Log("Using tournament storage: " + GetFullPath(string.Empty));
CurrentTournament.BindValueChanged(updateTournament, false);
} }
private void updateTournament(ValueChangedEvent<string> newTournament)
{
ChangeTargetStorage(allTournaments.GetStorageForDirectory(newTournament.NewValue));
Logger.Log("Changing tournament storage: " + GetFullPath(string.Empty));
storageConfig.Set(StorageConfig.CurrentTournament, newTournament.NewValue);
storageConfig.Save();
}
public IEnumerable<string> ListTournaments() => allTournaments.GetDirectories(string.Empty);
public override void Migrate(Storage newStorage) public override void Migrate(Storage newStorage)
{ {
// this migration only happens once on moving to the per-tournament storage system. // this migration only happens once on moving to the per-tournament storage system.

View File

@ -9,8 +9,10 @@ using osu.Framework.Bindables;
using osu.Framework.Configuration; using osu.Framework.Configuration;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Platform;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
using osu.Game.Graphics.UserInterfaceV2; using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Tournament.IO;
using osu.Game.Online.API; using osu.Game.Online.API;
using osu.Game.Overlays; using osu.Game.Overlays;
using osu.Game.Rulesets; using osu.Game.Rulesets;
@ -40,6 +42,9 @@ namespace osu.Game.Tournament.Screens
[Resolved] [Resolved]
private RulesetStore rulesets { get; set; } private RulesetStore rulesets { get; set; }
[Resolved]
private Storage storage { get; set; }
[Resolved(canBeNull: true)] [Resolved(canBeNull: true)]
private TournamentSceneManager sceneManager { get; set; } private TournamentSceneManager sceneManager { get; set; }
@ -70,6 +75,7 @@ namespace osu.Game.Tournament.Screens
private void reload() private void reload()
{ {
var fileBasedIpc = ipc as FileBasedIPC; var fileBasedIpc = ipc as FileBasedIPC;
var tourneyStorage = storage as TournamentStorage;
fillFlow.Children = new Drawable[] fillFlow.Children = new Drawable[]
{ {
new ActionableInfo new ActionableInfo
@ -111,6 +117,13 @@ namespace osu.Game.Tournament.Screens
Items = rulesets.AvailableRulesets, Items = rulesets.AvailableRulesets,
Current = LadderInfo.Ruleset, Current = LadderInfo.Ruleset,
}, },
new LabelledDropdown<string>
{
Label = "Current tournament",
Description = "Changes the background videos and bracket to match the selected tournament. This requires a restart after selecting to apply changes.",
Items = tourneyStorage?.ListTournaments(),
Current = tourneyStorage?.CurrentTournament,
},
resolution = new ResolutionSelector resolution = new ResolutionSelector
{ {
Label = "Stream area resolution", Label = "Stream area resolution",