mirror of
https://github.com/ppy/osu.git
synced 2024-12-15 03:22:55 +08:00
Allow increasing confidence by playing longer
This commit is contained in:
parent
20cfa5d83f
commit
c323c67d7d
@ -29,7 +29,7 @@ namespace osu.Game.Screens
|
||||
{
|
||||
private FrameSync previousFrameSyncMode;
|
||||
|
||||
private readonly OsuSpriteText statusText;
|
||||
private readonly OsuTextFlowContainer statusText;
|
||||
|
||||
public override bool HideOverlaysOnEnter => true;
|
||||
|
||||
@ -37,7 +37,9 @@ namespace osu.Game.Screens
|
||||
|
||||
public override float BackgroundParallaxAmount => 0;
|
||||
|
||||
private readonly Container latencyAreaContainer;
|
||||
private readonly Container mainArea;
|
||||
|
||||
private readonly Container resultsArea;
|
||||
|
||||
[Cached]
|
||||
private readonly OverlayColourProvider overlayColourProvider = new OverlayColourProvider(OverlayColourScheme.Orange);
|
||||
@ -49,7 +51,12 @@ namespace osu.Game.Screens
|
||||
{
|
||||
InternalChildren = new Drawable[]
|
||||
{
|
||||
latencyAreaContainer = new Container
|
||||
new Box
|
||||
{
|
||||
Colour = overlayColourProvider.Background6,
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
},
|
||||
mainArea = new Container
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
},
|
||||
@ -72,11 +79,17 @@ namespace osu.Game.Screens
|
||||
Anchor = Anchor.TopCentre,
|
||||
Origin = Anchor.TopRight,
|
||||
},
|
||||
statusText = new OsuSpriteText
|
||||
statusText = new OsuTextFlowContainer(cp => cp.Font = OsuFont.Default.With(size: 40))
|
||||
{
|
||||
Font = OsuFont.Default.With(size: 40),
|
||||
Anchor = Anchor.Centre,
|
||||
Origin = Anchor.Centre,
|
||||
TextAnchor = Anchor.TopCentre,
|
||||
RelativeSizeAxes = Axes.X,
|
||||
AutoSizeAxes = Axes.Y,
|
||||
},
|
||||
resultsArea = new Container
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
},
|
||||
};
|
||||
}
|
||||
@ -109,13 +122,14 @@ namespace osu.Game.Screens
|
||||
private const int rounds_to_complete = 10;
|
||||
|
||||
private int correctCount;
|
||||
private int targetRoundCount = rounds_to_complete;
|
||||
|
||||
private void recordResult(bool correct)
|
||||
{
|
||||
if (correct)
|
||||
correctCount++;
|
||||
|
||||
if (round < rounds_to_complete)
|
||||
if (round < targetRoundCount)
|
||||
loadNextRound();
|
||||
else
|
||||
{
|
||||
@ -126,21 +140,21 @@ namespace osu.Game.Screens
|
||||
private void loadNextRound()
|
||||
{
|
||||
round++;
|
||||
statusText.Text = $"Round {round} of {rounds_to_complete}";
|
||||
statusText.Text = $"Round {round} of {targetRoundCount}";
|
||||
|
||||
latencyAreaContainer.Clear();
|
||||
mainArea.Clear();
|
||||
|
||||
const int induced_latency = 1;
|
||||
|
||||
int betterSide = RNG.Next(0, 2);
|
||||
|
||||
latencyAreaContainer.Add(new LatencyArea(betterSide == 1 ? induced_latency : 0)
|
||||
mainArea.Add(new LatencyArea(betterSide == 1 ? induced_latency : 0)
|
||||
{
|
||||
Width = 0.5f,
|
||||
ReportBetter = () => recordResult(betterSide == 0)
|
||||
});
|
||||
|
||||
latencyAreaContainer.Add(new LatencyArea(betterSide == 0 ? induced_latency : 0)
|
||||
mainArea.Add(new LatencyArea(betterSide == 0 ? induced_latency : 0)
|
||||
{
|
||||
Width = 0.5f,
|
||||
Anchor = Anchor.TopRight,
|
||||
@ -151,25 +165,27 @@ namespace osu.Game.Screens
|
||||
|
||||
private void showResults()
|
||||
{
|
||||
AddInternal(new Container
|
||||
mainArea.Clear();
|
||||
|
||||
statusText.Text = $"You scored {correctCount} out of {targetRoundCount} ({(float)correctCount / targetRoundCount:P0})!";
|
||||
|
||||
resultsArea.Add(new Container
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
Children = new Drawable[]
|
||||
{
|
||||
new Box
|
||||
{
|
||||
Colour = overlayColourProvider.Background1,
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
},
|
||||
|
||||
new OsuTextFlowContainer(cp => cp.Font = OsuFont.Default.With(size: 40))
|
||||
new Button
|
||||
{
|
||||
Text = "Increase confidence",
|
||||
Anchor = Anchor.Centre,
|
||||
Origin = Anchor.Centre,
|
||||
TextAnchor = Anchor.TopCentre,
|
||||
RelativeSizeAxes = Axes.X,
|
||||
AutoSizeAxes = Axes.Y,
|
||||
Text = $"You scored {correctCount} out of {rounds_to_complete} ({(float)correctCount / rounds_to_complete:P0})!"
|
||||
Y = 100,
|
||||
Action = () =>
|
||||
{
|
||||
resultsArea.Clear();
|
||||
targetRoundCount += rounds_to_complete;
|
||||
loadNextRound();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -186,6 +202,12 @@ namespace osu.Game.Screens
|
||||
|
||||
private readonly int inducedLatency;
|
||||
|
||||
private Container interactivePieces = null!;
|
||||
|
||||
private Button button = null!;
|
||||
|
||||
private long frameCount;
|
||||
|
||||
public LatencyArea(int inducedLatency)
|
||||
{
|
||||
this.inducedLatency = inducedLatency;
|
||||
@ -205,17 +227,26 @@ namespace osu.Game.Screens
|
||||
Colour = overlayColourProvider.Background6,
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
},
|
||||
new LatencyMovableBox
|
||||
interactivePieces = new Container
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
Alpha = 0,
|
||||
Children = new Drawable[]
|
||||
{
|
||||
new LatencyMovableBox
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
},
|
||||
new LatencyCursorContainer
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
},
|
||||
}
|
||||
},
|
||||
new LatencyCursorContainer
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
},
|
||||
new Button
|
||||
button = new Button
|
||||
{
|
||||
Text = "Feels better",
|
||||
Alpha = 0,
|
||||
Y = 20,
|
||||
Width = 0.8f,
|
||||
Anchor = Anchor.TopCentre,
|
||||
@ -226,20 +257,11 @@ namespace osu.Game.Screens
|
||||
|
||||
base.LoadComplete();
|
||||
this.FadeInFromZero(500, Easing.OutQuint);
|
||||
}
|
||||
|
||||
public class Button : SettingsButton
|
||||
{
|
||||
[Resolved]
|
||||
private OverlayColourProvider overlayColourProvider { get; set; } = null!;
|
||||
|
||||
protected override void LoadComplete()
|
||||
using (BeginDelayedSequence(500))
|
||||
{
|
||||
base.LoadComplete();
|
||||
|
||||
Height = 50;
|
||||
SpriteText.Colour = overlayColourProvider.Background6;
|
||||
SpriteText.Font = OsuFont.TorusAlternate.With(size: 34);
|
||||
interactivePieces.FadeIn(500, Easing.OutQuint);
|
||||
button.FadeIn(500, Easing.OutQuint);
|
||||
}
|
||||
}
|
||||
|
||||
@ -255,11 +277,9 @@ namespace osu.Game.Screens
|
||||
base.OnHoverLost(e);
|
||||
}
|
||||
|
||||
private long frameCount;
|
||||
|
||||
public override bool UpdateSubTree()
|
||||
{
|
||||
if (inducedLatency > 0 && ++frameCount % inducedLatency != 0)
|
||||
if (background?.Alpha == 1 && inducedLatency > 0 && ++frameCount % inducedLatency != 0)
|
||||
return false;
|
||||
|
||||
return base.UpdateSubTree();
|
||||
@ -367,6 +387,8 @@ namespace osu.Game.Screens
|
||||
|
||||
protected override void Update()
|
||||
{
|
||||
cursor.Colour = inputManager.CurrentState.Mouse.IsPressed(MouseButton.Left) ? overlayColourProvider.Content1 : overlayColourProvider.Colour2;
|
||||
|
||||
if (IsHovered)
|
||||
{
|
||||
cursor.Position = ToLocalSpace(inputManager.CurrentState.Mouse.Position);
|
||||
@ -381,5 +403,20 @@ namespace osu.Game.Screens
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Button : SettingsButton
|
||||
{
|
||||
[Resolved]
|
||||
private OverlayColourProvider overlayColourProvider { get; set; } = null!;
|
||||
|
||||
protected override void LoadComplete()
|
||||
{
|
||||
base.LoadComplete();
|
||||
|
||||
Height = 100;
|
||||
SpriteText.Colour = overlayColourProvider.Background6;
|
||||
SpriteText.Font = OsuFont.TorusAlternate.With(size: 34);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user