mirror of
https://github.com/ppy/osu.git
synced 2025-01-30 07:32:55 +08:00
Merge pull request #1898 from UselessToucan/RefactorPlayerOverlaysInitialization
Do not assign hudOverlay's and breakOverlay's members in Player class
This commit is contained in:
commit
3a7f20e530
@ -1 +1 @@
|
|||||||
Subproject commit a7dd1fba8473f636ee8f6e49075331d9076383ee
|
Subproject commit 736a139a748eba7cebea41a09b404d47ca589522
|
@ -41,6 +41,12 @@ namespace osu.Game.Screens.Play.BreaksOverlay
|
|||||||
private readonly InfoContainer info;
|
private readonly InfoContainer info;
|
||||||
private readonly ArrowsOverlay arrowsOverlay;
|
private readonly ArrowsOverlay arrowsOverlay;
|
||||||
|
|
||||||
|
public BreakOverlay(bool letterboxing, ScoreProcessor scoreProcessor)
|
||||||
|
: this(letterboxing)
|
||||||
|
{
|
||||||
|
bindProcessor(scoreProcessor);
|
||||||
|
}
|
||||||
|
|
||||||
public BreakOverlay(bool letterboxing)
|
public BreakOverlay(bool letterboxing)
|
||||||
{
|
{
|
||||||
this.letterboxing = letterboxing;
|
this.letterboxing = letterboxing;
|
||||||
@ -148,7 +154,7 @@ namespace osu.Game.Screens.Play.BreaksOverlay
|
|||||||
arrowsOverlay.Hide();
|
arrowsOverlay.Hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void BindProcessor(ScoreProcessor processor)
|
private void bindProcessor(ScoreProcessor processor)
|
||||||
{
|
{
|
||||||
info.AccuracyDisplay.Current.BindTo(processor.Accuracy);
|
info.AccuracyDisplay.Current.BindTo(processor.Accuracy);
|
||||||
info.GradeDisplay.Current.BindTo(processor.Rank);
|
info.GradeDisplay.Current.BindTo(processor.Rank);
|
||||||
|
@ -6,6 +6,8 @@ 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.Input;
|
using osu.Framework.Input;
|
||||||
|
using osu.Framework.Timing;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Configuration;
|
using osu.Game.Configuration;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Graphics.UserInterface;
|
using osu.Game.Graphics.UserInterface;
|
||||||
@ -39,7 +41,7 @@ namespace osu.Game.Screens.Play
|
|||||||
|
|
||||||
private static bool hasShownNotificationOnce;
|
private static bool hasShownNotificationOnce;
|
||||||
|
|
||||||
public HUDOverlay()
|
public HUDOverlay(ScoreProcessor scoreProcessor, RulesetContainer rulesetContainer, DecoupleableInterpolatingFramedClock decoupledClock, WorkingBeatmap working, IAdjustableClock adjustableSourceClock)
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both;
|
RelativeSizeAxes = Axes.Both;
|
||||||
|
|
||||||
@ -59,6 +61,18 @@ namespace osu.Game.Screens.Play
|
|||||||
ReplaySettingsOverlay = CreateReplaySettingsOverlay(),
|
ReplaySettingsOverlay = CreateReplaySettingsOverlay(),
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
BindProcessor(scoreProcessor);
|
||||||
|
BindRulesetContainer(rulesetContainer);
|
||||||
|
|
||||||
|
Progress.Objects = rulesetContainer.Objects;
|
||||||
|
Progress.AudioClock = decoupledClock;
|
||||||
|
Progress.AllowSeeking = rulesetContainer.HasReplayLoaded;
|
||||||
|
Progress.OnSeek = pos => decoupledClock.Seek(pos);
|
||||||
|
|
||||||
|
ModDisplay.Current.BindTo(working.Mods);
|
||||||
|
|
||||||
|
ReplaySettingsOverlay.PlaybackSettings.AdjustableClock = adjustableSourceClock;
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader(true)]
|
[BackgroundDependencyLoader(true)]
|
||||||
@ -115,7 +129,7 @@ namespace osu.Game.Screens.Play
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void BindRulesetContainer(RulesetContainer rulesetContainer)
|
protected virtual void BindRulesetContainer(RulesetContainer rulesetContainer)
|
||||||
{
|
{
|
||||||
(rulesetContainer.KeyBindingInputManager as ICanAttachKeyCounter)?.Attach(KeyCounter);
|
(rulesetContainer.KeyBindingInputManager as ICanAttachKeyCounter)?.Attach(KeyCounter);
|
||||||
|
|
||||||
@ -201,7 +215,7 @@ namespace osu.Game.Screens.Play
|
|||||||
|
|
||||||
protected virtual ReplaySettingsOverlay CreateReplaySettingsOverlay() => new ReplaySettingsOverlay();
|
protected virtual ReplaySettingsOverlay CreateReplaySettingsOverlay() => new ReplaySettingsOverlay();
|
||||||
|
|
||||||
public virtual void BindProcessor(ScoreProcessor processor)
|
protected virtual void BindProcessor(ScoreProcessor processor)
|
||||||
{
|
{
|
||||||
ScoreCounter?.Current.BindTo(processor.TotalScore);
|
ScoreCounter?.Current.BindTo(processor.TotalScore);
|
||||||
AccuracyCounter?.Current.BindTo(processor.Accuracy);
|
AccuracyCounter?.Current.BindTo(processor.Accuracy);
|
||||||
|
@ -1,35 +1,35 @@
|
|||||||
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
using OpenTK;
|
|
||||||
using osu.Framework.Allocation;
|
|
||||||
using osu.Framework.Audio;
|
|
||||||
using osu.Framework.Configuration;
|
|
||||||
using osu.Framework.Graphics;
|
|
||||||
using osu.Framework.Graphics.Containers;
|
|
||||||
using osu.Framework.Input;
|
|
||||||
using osu.Framework.Logging;
|
|
||||||
using osu.Framework.Screens;
|
|
||||||
using osu.Framework.Timing;
|
|
||||||
using osu.Game.Configuration;
|
|
||||||
using osu.Game.Rulesets;
|
|
||||||
using osu.Game.Rulesets.UI;
|
|
||||||
using osu.Game.Screens.Backgrounds;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using osu.Framework.Threading;
|
using osu.Framework.Allocation;
|
||||||
using osu.Game.Rulesets.Mods;
|
using osu.Framework.Audio;
|
||||||
using osu.Game.Rulesets.Scoring;
|
|
||||||
using osu.Game.Screens.Ranking;
|
|
||||||
using osu.Framework.Audio.Sample;
|
using osu.Framework.Audio.Sample;
|
||||||
|
using osu.Framework.Configuration;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Cursor;
|
using osu.Framework.Graphics.Cursor;
|
||||||
|
using osu.Framework.Input;
|
||||||
|
using osu.Framework.Logging;
|
||||||
|
using osu.Framework.Screens;
|
||||||
|
using osu.Framework.Threading;
|
||||||
|
using osu.Framework.Timing;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Configuration;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Graphics.Cursor;
|
using osu.Game.Graphics.Cursor;
|
||||||
using osu.Game.Online.API;
|
using osu.Game.Online.API;
|
||||||
|
using osu.Game.Rulesets;
|
||||||
|
using osu.Game.Rulesets.Mods;
|
||||||
|
using osu.Game.Rulesets.Scoring;
|
||||||
|
using osu.Game.Rulesets.UI;
|
||||||
|
using osu.Game.Screens.Backgrounds;
|
||||||
using osu.Game.Screens.Play.BreaksOverlay;
|
using osu.Game.Screens.Play.BreaksOverlay;
|
||||||
|
using osu.Game.Screens.Ranking;
|
||||||
using osu.Game.Storyboards.Drawables;
|
using osu.Game.Storyboards.Drawables;
|
||||||
|
using OpenTK;
|
||||||
|
|
||||||
namespace osu.Game.Screens.Play
|
namespace osu.Game.Screens.Play
|
||||||
{
|
{
|
||||||
@ -79,7 +79,6 @@ namespace osu.Game.Screens.Play
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private BreakOverlay breakOverlay;
|
|
||||||
private Container storyboardContainer;
|
private Container storyboardContainer;
|
||||||
private DrawableStoryboard storyboard;
|
private DrawableStoryboard storyboard;
|
||||||
|
|
||||||
@ -155,6 +154,8 @@ namespace osu.Game.Screens.Play
|
|||||||
userAudioOffset.ValueChanged += v => offsetClock.Offset = v;
|
userAudioOffset.ValueChanged += v => offsetClock.Offset = v;
|
||||||
userAudioOffset.TriggerChange();
|
userAudioOffset.TriggerChange();
|
||||||
|
|
||||||
|
scoreProcessor = RulesetContainer.CreateScoreProcessor();
|
||||||
|
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
storyboardContainer = new Container
|
storyboardContainer = new Container
|
||||||
@ -170,13 +171,12 @@ namespace osu.Game.Screens.Play
|
|||||||
OnRetry = Restart,
|
OnRetry = Restart,
|
||||||
OnQuit = Exit,
|
OnQuit = Exit,
|
||||||
CheckCanPause = () => AllowPause && ValidForResume && !HasFailed && !RulesetContainer.HasReplayLoaded,
|
CheckCanPause = () => AllowPause && ValidForResume && !HasFailed && !RulesetContainer.HasReplayLoaded,
|
||||||
OnPause = () => {
|
OnPause = () =>
|
||||||
|
{
|
||||||
pauseContainer.Retries = RestartCount;
|
pauseContainer.Retries = RestartCount;
|
||||||
hudOverlay.KeyCounter.IsCounting = pauseContainer.IsPaused;
|
hudOverlay.KeyCounter.IsCounting = pauseContainer.IsPaused;
|
||||||
},
|
},
|
||||||
OnResume = () => {
|
OnResume = () => hudOverlay.KeyCounter.IsCounting = true,
|
||||||
hudOverlay.KeyCounter.IsCounting = true;
|
|
||||||
},
|
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
new Container
|
new Container
|
||||||
@ -186,12 +186,12 @@ namespace osu.Game.Screens.Play
|
|||||||
Child = RulesetContainer,
|
Child = RulesetContainer,
|
||||||
},
|
},
|
||||||
new SkipButton(firstObjectTime) { AudioClock = decoupledClock },
|
new SkipButton(firstObjectTime) { AudioClock = decoupledClock },
|
||||||
hudOverlay = new HUDOverlay
|
hudOverlay = new HUDOverlay(scoreProcessor, RulesetContainer, decoupledClock, working, adjustableSourceClock)
|
||||||
{
|
{
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre
|
Origin = Anchor.Centre
|
||||||
},
|
},
|
||||||
breakOverlay = new BreakOverlay(beatmap.BeatmapInfo.LetterboxInBreaks)
|
new BreakOverlay(beatmap.BeatmapInfo.LetterboxInBreaks, scoreProcessor)
|
||||||
{
|
{
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
@ -207,7 +207,8 @@ namespace osu.Game.Screens.Play
|
|||||||
},
|
},
|
||||||
new HotkeyRetryOverlay
|
new HotkeyRetryOverlay
|
||||||
{
|
{
|
||||||
Action = () => {
|
Action = () =>
|
||||||
|
{
|
||||||
//we want to hide the hitrenderer immediately (looks better).
|
//we want to hide the hitrenderer immediately (looks better).
|
||||||
//we may be able to remove this once the mouse cursor trail is improved.
|
//we may be able to remove this once the mouse cursor trail is improved.
|
||||||
RulesetContainer?.Hide();
|
RulesetContainer?.Hide();
|
||||||
@ -216,24 +217,9 @@ namespace osu.Game.Screens.Play
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
scoreProcessor = RulesetContainer.CreateScoreProcessor();
|
|
||||||
|
|
||||||
if (showStoryboard)
|
if (showStoryboard)
|
||||||
initializeStoryboard(false);
|
initializeStoryboard(false);
|
||||||
|
|
||||||
hudOverlay.BindProcessor(scoreProcessor);
|
|
||||||
hudOverlay.BindRulesetContainer(RulesetContainer);
|
|
||||||
|
|
||||||
hudOverlay.Progress.Objects = RulesetContainer.Objects;
|
|
||||||
hudOverlay.Progress.AudioClock = decoupledClock;
|
|
||||||
hudOverlay.Progress.OnSeek = pos => decoupledClock.Seek(pos);
|
|
||||||
|
|
||||||
hudOverlay.ModDisplay.Current.BindTo(working.Mods);
|
|
||||||
|
|
||||||
breakOverlay.BindProcessor(scoreProcessor);
|
|
||||||
|
|
||||||
hudOverlay.ReplaySettingsOverlay.PlaybackSettings.AdjustableClock = adjustableSourceClock;
|
|
||||||
|
|
||||||
// Bind ScoreProcessor to ourselves
|
// Bind ScoreProcessor to ourselves
|
||||||
scoreProcessor.AllJudged += onCompletion;
|
scoreProcessor.AllJudged += onCompletion;
|
||||||
scoreProcessor.Failed += onFail;
|
scoreProcessor.Failed += onFail;
|
||||||
|
Loading…
Reference in New Issue
Block a user