mirror of
https://github.com/ppy/osu.git
synced 2025-01-28 02:43:19 +08:00
Remove dependency on game-wide audio
This commit is contained in:
parent
d46739ff0b
commit
5c7d29cd31
@ -4,14 +4,11 @@
|
|||||||
#nullable enable
|
#nullable enable
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using osu.Framework.Audio.Track;
|
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Shapes;
|
using osu.Framework.Graphics.Shapes;
|
||||||
using osu.Framework.Input.Events;
|
using osu.Framework.Input.Events;
|
||||||
using osu.Game.Beatmaps.ControlPoints;
|
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Graphics.Containers;
|
|
||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
using osu.Game.Rulesets.Objects;
|
using osu.Game.Rulesets.Objects;
|
||||||
using osu.Game.Rulesets.Scoring;
|
using osu.Game.Rulesets.Scoring;
|
||||||
@ -20,7 +17,7 @@ using osuTK.Graphics;
|
|||||||
|
|
||||||
namespace osu.Game.Screens.Utility
|
namespace osu.Game.Screens.Utility
|
||||||
{
|
{
|
||||||
public class CircleGameplay : BeatSyncedContainer
|
public class CircleGameplay : CompositeDrawable
|
||||||
{
|
{
|
||||||
private int nextLocation;
|
private int nextLocation;
|
||||||
|
|
||||||
@ -28,6 +25,12 @@ namespace osu.Game.Screens.Utility
|
|||||||
|
|
||||||
private readonly List<HitEvent> hitEvents = new List<HitEvent>();
|
private readonly List<HitEvent> hitEvents = new List<HitEvent>();
|
||||||
|
|
||||||
|
private int? lastGeneratedBeat;
|
||||||
|
|
||||||
|
private const double beat_length = 500;
|
||||||
|
private const double approach_rate_milliseconds = 100;
|
||||||
|
private const float spacing = 0.1f;
|
||||||
|
|
||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
@ -43,16 +46,26 @@ namespace osu.Game.Screens.Utility
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnNewBeat(int beatIndex, TimingControlPoint timingPoint, EffectControlPoint effectPoint, ChannelAmplitudes amplitudes)
|
protected override void Update()
|
||||||
{
|
{
|
||||||
base.OnNewBeat(beatIndex, timingPoint, effectPoint, amplitudes);
|
base.Update();
|
||||||
|
|
||||||
|
int nextBeat = (int)(Clock.CurrentTime / beat_length);
|
||||||
|
|
||||||
|
if (lastGeneratedBeat == null || nextBeat != lastGeneratedBeat)
|
||||||
|
{
|
||||||
|
// generate four beats ahead to allow time for beats to display.
|
||||||
|
newBeat(nextBeat + 4);
|
||||||
|
lastGeneratedBeat = nextBeat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void newBeat(int index)
|
||||||
|
{
|
||||||
nextLocation++;
|
nextLocation++;
|
||||||
|
|
||||||
Vector2 location;
|
Vector2 location;
|
||||||
|
|
||||||
const float spacing = 0.1f;
|
|
||||||
|
|
||||||
const float spacing_low = 0.5f - spacing;
|
const float spacing_low = 0.5f - spacing;
|
||||||
const float spacing_high = 0.5f + spacing;
|
const float spacing_high = 0.5f + spacing;
|
||||||
|
|
||||||
@ -75,7 +88,7 @@ namespace osu.Game.Screens.Utility
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
AddInternal(new SampleHitCircle(Clock.CurrentTime + timingPoint.BeatLength)
|
AddInternal(new SampleHitCircle(index * beat_length)
|
||||||
{
|
{
|
||||||
RelativePositionAxes = Axes.Both,
|
RelativePositionAxes = Axes.Both,
|
||||||
Position = location,
|
Position = location,
|
||||||
@ -113,6 +126,8 @@ namespace osu.Game.Screens.Utility
|
|||||||
|
|
||||||
AutoSizeAxes = Axes.Both;
|
AutoSizeAxes = Axes.Both;
|
||||||
|
|
||||||
|
AlwaysPresent = true;
|
||||||
|
|
||||||
InternalChildren = new Drawable[]
|
InternalChildren = new Drawable[]
|
||||||
{
|
{
|
||||||
circle = new Circle
|
circle = new Circle
|
||||||
@ -171,9 +186,10 @@ namespace osu.Game.Screens.Utility
|
|||||||
{
|
{
|
||||||
base.Update();
|
base.Update();
|
||||||
|
|
||||||
approach.Scale = new Vector2((float)MathHelper.Clamp((HitTime - Clock.CurrentTime) / 60, 1, 100));
|
approach.Scale = new Vector2(1 + (float)MathHelper.Clamp((HitTime - Clock.CurrentTime) / approach_rate_milliseconds, 0, 100));
|
||||||
|
Alpha = (float)MathHelper.Clamp((Clock.CurrentTime - HitTime + 600) / 400, 0, 1);
|
||||||
|
|
||||||
if (Clock.CurrentTime > HitTime + 80)
|
if (Clock.CurrentTime > HitTime + 200)
|
||||||
Expire();
|
Expire();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user