Skip to content

Commit

Permalink
Merge pull request ppy#24331 from ILW8/tourney-fix-screen-auto-switch
Browse files Browse the repository at this point in the history
Fix auto advance screens sometimes not advancing
  • Loading branch information
peppy authored Jul 25, 2023
2 parents 04c1333 + 7d5305c commit ec1b088
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 36 deletions.
81 changes: 49 additions & 32 deletions osu.Game.Tournament/Screens/Gameplay/GameplayScreen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ protected override void LoadComplete()
base.LoadComplete();

State.BindTo(ipc.State);
State.BindValueChanged(stateChanged, true);
State.BindValueChanged(_ => updateState(), true);
}

protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch> match)
Expand All @@ -150,20 +150,47 @@ protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch> m
return;

warmup.Value = match.NewValue.Team1Score.Value + match.NewValue.Team2Score.Value == 0;
scheduledOperation?.Cancel();
scheduledScreenChange?.Cancel();
}

private ScheduledDelegate scheduledOperation;
private ScheduledDelegate scheduledScreenChange;
private ScheduledDelegate scheduledContract;

private TournamentMatchScoreDisplay scoreDisplay;

private TourneyState lastState;
private MatchHeader header;

private void stateChanged(ValueChangedEvent<TourneyState> state)
private void contract()
{
scheduledContract?.Cancel();

SongBar.Expanded = false;
scoreDisplay.FadeOut(100);
using (chat?.BeginDelayedSequence(500))
chat?.Expand();
}

private void expand()
{
scheduledContract?.Cancel();

chat?.Contract();

using (BeginDelayedSequence(300))
{
scoreDisplay.FadeIn(100);
SongBar.Expanded = true;
}
}

private void updateState()
{
try
{
if (state.NewValue == TourneyState.Ranking)
scheduledScreenChange?.Cancel();

if (State.Value == TourneyState.Ranking)
{
if (warmup.Value || CurrentMatch.Value == null) return;

Expand All @@ -173,28 +200,7 @@ private void stateChanged(ValueChangedEvent<TourneyState> state)
CurrentMatch.Value.Team2Score.Value++;
}

scheduledOperation?.Cancel();

void expand()
{
chat?.Contract();

using (BeginDelayedSequence(300))
{
scoreDisplay.FadeIn(100);
SongBar.Expanded = true;
}
}

void contract()
{
SongBar.Expanded = false;
scoreDisplay.FadeOut(100);
using (chat?.BeginDelayedSequence(500))
chat?.Expand();
}

switch (state.NewValue)
switch (State.Value)
{
case TourneyState.Idle:
contract();
Expand All @@ -208,30 +214,41 @@ void contract()
if (lastState == TourneyState.Ranking && !warmup.Value)
{
if (CurrentMatch.Value?.Completed.Value == true)
scheduledOperation = Scheduler.AddDelayed(() => { sceneManager?.SetScreen(typeof(TeamWinScreen)); }, delay_before_progression);
scheduledScreenChange = Scheduler.AddDelayed(() => { sceneManager?.SetScreen(typeof(TeamWinScreen)); }, delay_before_progression);
else if (CurrentMatch.Value?.Completed.Value == false)
scheduledOperation = Scheduler.AddDelayed(() => { sceneManager?.SetScreen(typeof(MapPoolScreen)); }, delay_before_progression);
scheduledScreenChange = Scheduler.AddDelayed(() => { sceneManager?.SetScreen(typeof(MapPoolScreen)); }, delay_before_progression);
}
}

break;

case TourneyState.Ranking:
scheduledOperation = Scheduler.AddDelayed(contract, 10000);
scheduledContract = Scheduler.AddDelayed(contract, 10000);
break;

default:
chat.Contract();
expand();
break;
}
}
finally
{
lastState = state.NewValue;
lastState = State.Value;
}
}

public override void Hide()
{
scheduledScreenChange?.Cancel();
base.Hide();
}

public override void Show()
{
updateState();
base.Show();
}

private partial class ChromaArea : CompositeDrawable
{
[Resolved]
Expand Down
14 changes: 10 additions & 4 deletions osu.Game.Tournament/Screens/MapPool/MapPoolScreen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ public partial class MapPoolScreen : TournamentMatchScreen
private OsuButton buttonRedPick;
private OsuButton buttonBluePick;

private ScheduledDelegate scheduledScreenChange;

[BackgroundDependencyLoader]
private void load(MatchIPCInfo ipc)
{
Expand Down Expand Up @@ -188,8 +190,6 @@ private void reset()
setNextMode();
}

private ScheduledDelegate scheduledChange;

private void addForBeatmap(int beatmapId)
{
if (CurrentMatch.Value == null)
Expand All @@ -216,12 +216,18 @@ private void addForBeatmap(int beatmapId)
{
if (pickType == ChoiceType.Pick && CurrentMatch.Value.PicksBans.Any(i => i.Type == ChoiceType.Pick))
{
scheduledChange?.Cancel();
scheduledChange = Scheduler.AddDelayed(() => { sceneManager?.SetScreen(typeof(GameplayScreen)); }, 10000);
scheduledScreenChange?.Cancel();
scheduledScreenChange = Scheduler.AddDelayed(() => { sceneManager?.SetScreen(typeof(GameplayScreen)); }, 10000);
}
}
}

public override void Hide()
{
scheduledScreenChange?.Cancel();
base.Hide();
}

protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch> match)
{
base.CurrentMatchChanged(match);
Expand Down

0 comments on commit ec1b088

Please sign in to comment.