Revert logic to be closer to original

Note the reversal of the order of operations in `endHandlingTrack()`
(done for extra safety, to ensure no more value changed events can be
fired at the point of cancelling looping).
This commit is contained in:
Bartłomiej Dach
2020-12-23 13:47:28 +01:00
parent 286884421d
commit 582b0d2a74

View File

@ -41,27 +41,24 @@ namespace osu.Game.Screens.Multi.Match
managerUpdated = beatmapManager.ItemUpdated.GetBoundCopy(); managerUpdated = beatmapManager.ItemUpdated.GetBoundCopy();
managerUpdated.BindValueChanged(beatmapUpdated); managerUpdated.BindValueChanged(beatmapUpdated);
if (music != null)
music.TrackChanged += applyToTrack;
} }
public override void OnEntering(IScreen last) public override void OnEntering(IScreen last)
{ {
base.OnEntering(last); base.OnEntering(last);
applyToTrack(); beginHandlingTrack();
} }
public override void OnSuspending(IScreen next) public override void OnSuspending(IScreen next)
{ {
resetTrack(); endHandlingTrack();
base.OnSuspending(next); base.OnSuspending(next);
} }
public override void OnResuming(IScreen last) public override void OnResuming(IScreen last)
{ {
base.OnResuming(last); base.OnResuming(last);
applyToTrack(); beginHandlingTrack();
} }
public override bool OnExiting(IScreen next) public override bool OnExiting(IScreen next)
@ -69,7 +66,7 @@ namespace osu.Game.Screens.Multi.Match
RoomManager?.PartRoom(); RoomManager?.PartRoom();
Mods.Value = Array.Empty<Mod>(); Mods.Value = Array.Empty<Mod>();
resetTrack(); endHandlingTrack();
return base.OnExiting(next); return base.OnExiting(next);
} }
@ -98,7 +95,18 @@ namespace osu.Game.Screens.Multi.Match
Beatmap.Value = beatmapManager.GetWorkingBeatmap(localBeatmap); Beatmap.Value = beatmapManager.GetWorkingBeatmap(localBeatmap);
} }
private void applyToTrack(WorkingBeatmap _ = default, TrackChangeDirection __ = default) private void beginHandlingTrack()
{
Beatmap.BindValueChanged(applyLoopingToTrack, true);
}
private void endHandlingTrack()
{
Beatmap.ValueChanged -= applyLoopingToTrack;
cancelTrackLooping();
}
private void applyLoopingToTrack(ValueChangedEvent<WorkingBeatmap> _ = null)
{ {
if (!this.IsCurrentScreen()) if (!this.IsCurrentScreen())
return; return;
@ -114,7 +122,7 @@ namespace osu.Game.Screens.Multi.Match
} }
} }
private void resetTrack() private void cancelTrackLooping()
{ {
var track = Beatmap?.Value?.Track; var track = Beatmap?.Value?.Track;