diff --git a/osu.Game/Screens/Tournament/Drawings.cs b/osu.Game/Screens/Tournament/Drawings.cs index 671bb41639..2b26229934 100644 --- a/osu.Game/Screens/Tournament/Drawings.cs +++ b/osu.Game/Screens/Tournament/Drawings.cs @@ -37,12 +37,12 @@ namespace osu.Game.Screens.Tournament private ScrollingTeamContainer teamsContainer; private GroupsContainer groupsContainer; + private SpriteText fullTeamNameText; private List allTeams = new List(); private DrawingsConfigManager drawingsConfig; - private Task lastWriteOp; private Task writeOp; private Storage storage; @@ -61,7 +61,6 @@ namespace osu.Game.Screens.Tournament drawingsConfig = new DrawingsConfigManager(storage); Container visualiserContainer; - SpriteText st; Children = new Drawable[] { @@ -125,7 +124,7 @@ namespace osu.Game.Screens.Tournament RelativeSizeAxes = Axes.X, }, // Scrolling team name - st = new SpriteText() + fullTeamNameText = new SpriteText() { Anchor = Anchor.Centre, Origin = Anchor.TopCentre, @@ -242,42 +241,38 @@ namespace osu.Game.Screens.Tournament offset += (float)Math.PI / 6f; } - teamsContainer.OnSelected += t => - { - groupsContainer.AddTeam(t.Team); - - st.Text = t.Team.FullName; - st.FadeIn(200); - - writeResults(groupsContainer.ToStringRepresentation()); - }; - - teamsContainer.OnScrollStarted += () => st.FadeOut(200); + teamsContainer.OnSelected += onTeamSelected; + teamsContainer.OnScrollStarted += () => fullTeamNameText.FadeOut(200); reset(true); } + private void onTeamSelected(Team team) + { + groupsContainer.AddTeam(team); + + fullTeamNameText.Text = team.FullName; + fullTeamNameText.FadeIn(200); + + writeResults(groupsContainer.ToStringRepresentation()); + } + private void writeResults(string text) { - lastWriteOp = writeOp; - writeOp = Task.Run(async () => + Action writeAction = () => { - if (lastWriteOp != null) - await lastWriteOp; - // Write to drawings_results - try + using (Stream stream = storage.GetStream(results_filename, FileAccess.Write, FileMode.Create)) + using (StreamWriter sw = new StreamWriter(stream)) { - using (Stream stream = storage.GetStream(results_filename, FileAccess.Write, FileMode.Create)) - using (StreamWriter sw = new StreamWriter(stream)) - { - sw.Write(text); - } + sw.Write(text); } - catch - { - } - }); + }; + + if (writeOp == null) + writeOp = Task.Run(writeAction); + else + writeOp = writeOp.ContinueWith(t => { writeAction(); }); } private void reloadTeams() diff --git a/osu.Game/Screens/Tournament/ScrollingTeamContainer.cs b/osu.Game/Screens/Tournament/ScrollingTeamContainer.cs index cb83c47b34..9a92289698 100644 --- a/osu.Game/Screens/Tournament/ScrollingTeamContainer.cs +++ b/osu.Game/Screens/Tournament/ScrollingTeamContainer.cs @@ -25,7 +25,7 @@ namespace osu.Game.Screens.Tournament public class ScrollingTeamContainer : Container { public event Action OnScrollStarted; - public event Action OnSelected; + public event Action OnSelected; private readonly List availableTeams = new List(); @@ -136,7 +136,7 @@ namespace osu.Game.Screens.Tournament availableTeams.RemoveAll(at => at == st.Team); st.Selected = true; - OnSelected?.Invoke(st); + OnSelected?.Invoke(st.Team); delayedStateChangeDelegate = Delay(10000).Schedule(() => scrollState = ScrollState.Idle); break;