mirror of
https://github.com/ppy/osu.git
synced 2024-11-08 11:27:44 +08:00
Merge pull request #18117 from peppy/distance-snap-grid-current-tiume
Highlight distance snap grid rings that are close to the current time value
This commit is contained in:
commit
e8518a3a1a
@ -2,11 +2,15 @@
|
|||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Extensions.Color4Extensions;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Shapes;
|
using osu.Framework.Graphics.Shapes;
|
||||||
using osu.Framework.Graphics.UserInterface;
|
using osu.Framework.Graphics.UserInterface;
|
||||||
|
using osu.Game.Rulesets.Edit;
|
||||||
using osu.Game.Rulesets.Objects;
|
using osu.Game.Rulesets.Objects;
|
||||||
using osuTK;
|
using osuTK;
|
||||||
|
using osuTK.Graphics;
|
||||||
|
|
||||||
namespace osu.Game.Screens.Edit.Compose.Components
|
namespace osu.Game.Screens.Edit.Compose.Components
|
||||||
{
|
{
|
||||||
@ -51,14 +55,12 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
|||||||
{
|
{
|
||||||
float diameter = (i + 1) * DistanceBetweenTicks * 2;
|
float diameter = (i + 1) * DistanceBetweenTicks * 2;
|
||||||
|
|
||||||
AddInternal(new CircularProgress
|
AddInternal(new Ring(ReferenceObject, GetColourForIndexFromPlacement(i))
|
||||||
{
|
{
|
||||||
Origin = Anchor.Centre,
|
|
||||||
Position = StartPosition,
|
Position = StartPosition,
|
||||||
Current = { Value = 1 },
|
Origin = Anchor.Centre,
|
||||||
Size = new Vector2(diameter),
|
Size = new Vector2(diameter),
|
||||||
InnerRadius = 4 * 1f / diameter,
|
InnerRadius = 4 * 1f / diameter,
|
||||||
Colour = GetColourForIndexFromPlacement(i)
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -100,5 +102,45 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
|||||||
|
|
||||||
return (snappedPosition, snappedTime);
|
return (snappedPosition, snappedTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class Ring : CircularProgress
|
||||||
|
{
|
||||||
|
[Resolved]
|
||||||
|
private IDistanceSnapProvider snapProvider { get; set; }
|
||||||
|
|
||||||
|
[Resolved(canBeNull: true)]
|
||||||
|
private EditorClock editorClock { get; set; }
|
||||||
|
|
||||||
|
private readonly HitObject referenceObject;
|
||||||
|
|
||||||
|
private readonly Color4 baseColour;
|
||||||
|
|
||||||
|
public Ring(HitObject referenceObject, Color4 baseColour)
|
||||||
|
{
|
||||||
|
this.referenceObject = referenceObject;
|
||||||
|
|
||||||
|
Colour = this.baseColour = baseColour;
|
||||||
|
|
||||||
|
Current.Value = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Update()
|
||||||
|
{
|
||||||
|
base.Update();
|
||||||
|
|
||||||
|
if (editorClock == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
float distanceSpacingMultiplier = (float)snapProvider.DistanceSpacingMultiplier.Value;
|
||||||
|
double timeFromReferencePoint = editorClock.CurrentTime - referenceObject.GetEndTime();
|
||||||
|
|
||||||
|
float distanceForCurrentTime = snapProvider.DurationToDistance(referenceObject, timeFromReferencePoint)
|
||||||
|
* distanceSpacingMultiplier;
|
||||||
|
|
||||||
|
float timeBasedAlpha = 1 - Math.Clamp(Math.Abs(distanceForCurrentTime - Size.X / 2) / 30, 0, 1);
|
||||||
|
|
||||||
|
Colour = baseColour.Opacity(Math.Max(baseColour.A, timeBasedAlpha));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,14 +4,15 @@
|
|||||||
using System;
|
using System;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
|
using osu.Framework.Extensions.Color4Extensions;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Colour;
|
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Layout;
|
using osu.Framework.Layout;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Rulesets.Edit;
|
using osu.Game.Rulesets.Edit;
|
||||||
using osu.Game.Rulesets.Objects;
|
using osu.Game.Rulesets.Objects;
|
||||||
using osuTK;
|
using osuTK;
|
||||||
|
using osuTK.Graphics;
|
||||||
|
|
||||||
namespace osu.Game.Screens.Edit.Compose.Components
|
namespace osu.Game.Screens.Edit.Compose.Components
|
||||||
{
|
{
|
||||||
@ -135,7 +136,7 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="placementIndex">The 0-based beat index from the point of placement.</param>
|
/// <param name="placementIndex">The 0-based beat index from the point of placement.</param>
|
||||||
/// <returns>The applicable colour.</returns>
|
/// <returns>The applicable colour.</returns>
|
||||||
protected ColourInfo GetColourForIndexFromPlacement(int placementIndex)
|
protected Color4 GetColourForIndexFromPlacement(int placementIndex)
|
||||||
{
|
{
|
||||||
var timingPoint = Beatmap.ControlPointInfo.TimingPointAt(StartTime);
|
var timingPoint = Beatmap.ControlPointInfo.TimingPointAt(StartTime);
|
||||||
double beatLength = timingPoint.BeatLength / beatDivisor.Value;
|
double beatLength = timingPoint.BeatLength / beatDivisor.Value;
|
||||||
@ -144,7 +145,7 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
|||||||
var colour = BindableBeatDivisor.GetColourFor(BindableBeatDivisor.GetDivisorForBeatIndex(beatIndex + placementIndex + 1, beatDivisor.Value), Colours);
|
var colour = BindableBeatDivisor.GetColourFor(BindableBeatDivisor.GetDivisorForBeatIndex(beatIndex + placementIndex + 1, beatDivisor.Value), Colours);
|
||||||
|
|
||||||
int repeatIndex = placementIndex / beatDivisor.Value;
|
int repeatIndex = placementIndex / beatDivisor.Value;
|
||||||
return ColourInfo.SingleColour(colour).MultiplyAlpha(0.5f / (repeatIndex + 1));
|
return colour.Opacity(0.5f / (repeatIndex + 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user