Skip to content

Commit

Permalink
Implement beat-synchronized animation in skip overlay
Browse files Browse the repository at this point in the history
  • Loading branch information
nekupaw committed Sep 13, 2024
1 parent 8d920ef commit 11a8fff
Showing 1 changed file with 19 additions and 6 deletions.
25 changes: 19 additions & 6 deletions osu.Game/Screens/Play/SkipOverlay.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@
using osu.Framework.Allocation;
using osu.Framework.Audio;
using osu.Framework.Audio.Sample;
using osu.Framework.Audio.Track;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Input.Bindings;
using osu.Framework.Input.Events;
using osu.Framework.Utils;
using osu.Game.Beatmaps.ControlPoints;
using osu.Game.Graphics;
using osu.Game.Graphics.Containers;
using osu.Game.Graphics.Sprites;
Expand All @@ -26,7 +28,7 @@

namespace osu.Game.Screens.Play
{
public partial class SkipOverlay : CompositeDrawable, IKeyBindingHandler<GlobalAction>
public partial class SkipOverlay : BeatSyncedContainer, IKeyBindingHandler<GlobalAction>
{
/// <summary>
/// The total number of successful skips performed by this overlay.
Expand All @@ -36,10 +38,9 @@ public partial class SkipOverlay : CompositeDrawable, IKeyBindingHandler<GlobalA
private readonly double startTime;

public Action RequestSkip;

private Button button;
private ButtonContainer buttonContainer;
private Box remainingTimeBox;
private Circle remainingTimeBox;

private FadeContainer fadeContainer;
private double displayTime;
Expand Down Expand Up @@ -87,13 +88,14 @@ private void load(OsuColour colours)
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
},
remainingTimeBox = new Box
remainingTimeBox = new Circle
{
Height = 5,
RelativeSizeAxes = Axes.X,
Colour = colours.Yellow,
Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre,
Colour = colours.Yellow,
RelativeSizeAxes = Axes.X,
Masking = true,
}
}
}
Expand Down Expand Up @@ -210,6 +212,17 @@ public void OnReleased(KeyBindingReleaseEvent<GlobalAction> e)
{
}

protected override void OnNewBeat(int beatIndex, TimingControlPoint timingPoint, EffectControlPoint effectPoint, ChannelAmplitudes amplitudes)
{
base.OnNewBeat(beatIndex, timingPoint, effectPoint, amplitudes);

if (fadeOutBeginTime <= gameplayClock.CurrentTime)
return;

float progress = (float)(gameplayClock.CurrentTime - displayTime) / (float)(fadeOutBeginTime - displayTime);
remainingTimeBox.ResizeWidthTo(Math.Max(0, (float)(1 - progress)), timingPoint.BeatLength * 2, Easing.OutQuint);
}

public partial class FadeContainer : Container, IStateful<Visibility>
{
[CanBeNull]
Expand Down

0 comments on commit 11a8fff

Please sign in to comment.