1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-14 03:25:11 +08:00

Merge pull request #19101 from peppy/fix-gameplay-screen-update-teams

Fix gameplay screen not updating with changes in various editors
This commit is contained in:
Dan Balasescu 2022-07-13 22:04:52 +09:00 committed by GitHub
commit b04a4450fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 32 additions and 12 deletions

View File

@ -12,7 +12,8 @@ namespace osu.Game.Tournament.Components
{ {
public class TournamentSpriteTextWithBackground : CompositeDrawable public class TournamentSpriteTextWithBackground : CompositeDrawable
{ {
protected readonly TournamentSpriteText Text; public readonly TournamentSpriteText Text;
protected readonly Box Background; protected readonly Box Background;
public TournamentSpriteTextWithBackground(string text = "") public TournamentSpriteTextWithBackground(string text = "")

View File

@ -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 Newtonsoft.Json; using Newtonsoft.Json;
using osu.Framework.Bindables; using osu.Framework.Bindables;
@ -13,7 +11,7 @@ namespace osu.Game.Tournament.Models
public int ID; public int ID;
[JsonProperty("BeatmapInfo")] [JsonProperty("BeatmapInfo")]
public TournamentBeatmap Beatmap; public TournamentBeatmap? Beatmap;
public long Score; public long Score;

View File

@ -16,6 +16,10 @@ namespace osu.Game.Tournament.Screens.Gameplay.Components
{ {
private readonly TeamScore score; private readonly TeamScore score;
private readonly TournamentSpriteTextWithBackground teamText;
private readonly Bindable<string> teamName = new Bindable<string>("???");
private bool showScore; private bool showScore;
public bool ShowScore public bool ShowScore
@ -93,7 +97,7 @@ namespace osu.Game.Tournament.Screens.Gameplay.Components
} }
} }
}, },
new TournamentSpriteTextWithBackground(team?.FullName.Value ?? "???") teamText = new TournamentSpriteTextWithBackground
{ {
Scale = new Vector2(0.5f), Scale = new Vector2(0.5f),
Origin = anchor, Origin = anchor,
@ -113,6 +117,11 @@ namespace osu.Game.Tournament.Screens.Gameplay.Components
updateDisplay(); updateDisplay();
FinishTransforms(true); FinishTransforms(true);
if (Team != null)
teamName.BindTo(Team.FullName);
teamName.BindValueChanged(name => teamText.Text.Text = name.NewValue, true);
} }
private void updateDisplay() private void updateDisplay()

View File

@ -42,6 +42,8 @@ namespace osu.Game.Tournament.Screens.Gameplay.Components
currentMatch.BindTo(ladder.CurrentMatch); currentMatch.BindTo(ladder.CurrentMatch);
currentMatch.BindValueChanged(matchChanged); currentMatch.BindValueChanged(matchChanged);
currentTeam.BindValueChanged(teamChanged);
updateMatch(); updateMatch();
} }
@ -67,7 +69,7 @@ namespace osu.Game.Tournament.Screens.Gameplay.Components
// team may change to same team, which means score is not in a good state. // team may change to same team, which means score is not in a good state.
// thus we handle this manually. // thus we handle this manually.
teamChanged(currentTeam.Value); currentTeam.TriggerChange();
} }
protected override bool OnMouseDown(MouseDownEvent e) protected override bool OnMouseDown(MouseDownEvent e)
@ -88,11 +90,11 @@ namespace osu.Game.Tournament.Screens.Gameplay.Components
return base.OnMouseDown(e); return base.OnMouseDown(e);
} }
private void teamChanged(TournamentTeam team) private void teamChanged(ValueChangedEvent<TournamentTeam> team)
{ {
InternalChildren = new Drawable[] InternalChildren = new Drawable[]
{ {
teamDisplay = new TeamDisplay(team, teamColour, currentTeamScore, currentMatch.Value?.PointsToWin ?? 0), teamDisplay = new TeamDisplay(team.NewValue, teamColour, currentTeamScore, currentMatch.Value?.PointsToWin ?? 0),
}; };
} }
} }

View File

@ -3,6 +3,7 @@
#nullable disable #nullable disable
using System.Diagnostics;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Bindables; using osu.Framework.Bindables;
using osu.Framework.Graphics; using osu.Framework.Graphics;
@ -69,7 +70,7 @@ namespace osu.Game.Tournament.Screens.TeamIntro
currentTeam.BindValueChanged(teamChanged, true); currentTeam.BindValueChanged(teamChanged, true);
} }
private void teamChanged(ValueChangedEvent<TournamentTeam> team) private void teamChanged(ValueChangedEvent<TournamentTeam> team) => Scheduler.AddOnce(() =>
{ {
if (team.NewValue == null) if (team.NewValue == null)
{ {
@ -78,7 +79,7 @@ namespace osu.Game.Tournament.Screens.TeamIntro
} }
showTeam(team.NewValue); showTeam(team.NewValue);
} });
protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch> match) protected override void CurrentMatchChanged(ValueChangedEvent<TournamentMatch> match)
{ {
@ -120,15 +121,23 @@ namespace osu.Game.Tournament.Screens.TeamIntro
foreach (var seeding in team.SeedingResults) foreach (var seeding in team.SeedingResults)
{ {
fill.Add(new ModRow(seeding.Mod.Value, seeding.Seed.Value)); fill.Add(new ModRow(seeding.Mod.Value, seeding.Seed.Value));
foreach (var beatmap in seeding.Beatmaps) foreach (var beatmap in seeding.Beatmaps)
{
if (beatmap.Beatmap == null)
continue;
fill.Add(new BeatmapScoreRow(beatmap)); fill.Add(new BeatmapScoreRow(beatmap));
} }
} }
}
private class BeatmapScoreRow : CompositeDrawable private class BeatmapScoreRow : CompositeDrawable
{ {
public BeatmapScoreRow(SeedingBeatmap beatmap) public BeatmapScoreRow(SeedingBeatmap beatmap)
{ {
Debug.Assert(beatmap.Beatmap != null);
RelativeSizeAxes = Axes.X; RelativeSizeAxes = Axes.X;
AutoSizeAxes = Axes.Y; AutoSizeAxes = Axes.Y;
@ -157,7 +166,8 @@ namespace osu.Game.Tournament.Screens.TeamIntro
Children = new Drawable[] Children = new Drawable[]
{ {
new TournamentSpriteText { Text = beatmap.Score.ToString("#,0"), Colour = TournamentGame.TEXT_COLOUR, Width = 80 }, new TournamentSpriteText { Text = beatmap.Score.ToString("#,0"), Colour = TournamentGame.TEXT_COLOUR, Width = 80 },
new TournamentSpriteText { Text = "#" + beatmap.Seed.Value.ToString("#,0"), Colour = TournamentGame.TEXT_COLOUR, Font = OsuFont.Torus.With(weight: FontWeight.Regular) }, new TournamentSpriteText
{ Text = "#" + beatmap.Seed.Value.ToString("#,0"), Colour = TournamentGame.TEXT_COLOUR, Font = OsuFont.Torus.With(weight: FontWeight.Regular) },
} }
}, },
}; };

View File

@ -66,7 +66,7 @@ namespace osu.Game.Tournament.Screens.TeamWin
private bool firstDisplay = true; private bool firstDisplay = true;
private void update() => Schedule(() => private void update() => Scheduler.AddOnce(() =>
{ {
var match = CurrentMatch.Value; var match = CurrentMatch.Value;