1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-13 15:43:22 +08:00

Merge branch 'master' into mod-overlay/localisation-strings

This commit is contained in:
Salman Ahmed 2022-05-07 12:13:28 +03:00 committed by GitHub
commit a44e21d1b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 7 deletions

View File

@ -2,11 +2,15 @@
// See the LICENCE file in the repository root for full licence text.
using System;
using osu.Framework.Allocation;
using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Shapes;
using osu.Framework.Graphics.UserInterface;
using osu.Game.Rulesets.Edit;
using osu.Game.Rulesets.Objects;
using osuTK;
using osuTK.Graphics;
namespace osu.Game.Screens.Edit.Compose.Components
{
@ -51,14 +55,12 @@ namespace osu.Game.Screens.Edit.Compose.Components
{
float diameter = (i + 1) * DistanceBetweenTicks * 2;
AddInternal(new CircularProgress
AddInternal(new Ring(ReferenceObject, GetColourForIndexFromPlacement(i))
{
Origin = Anchor.Centre,
Position = StartPosition,
Current = { Value = 1 },
Origin = Anchor.Centre,
Size = new Vector2(diameter),
InnerRadius = 4 * 1f / diameter,
Colour = GetColourForIndexFromPlacement(i)
});
}
}
@ -100,5 +102,45 @@ namespace osu.Game.Screens.Edit.Compose.Components
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));
}
}
}
}

View File

@ -4,14 +4,15 @@
using System;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Colour;
using osu.Framework.Graphics.Containers;
using osu.Framework.Layout;
using osu.Game.Graphics;
using osu.Game.Rulesets.Edit;
using osu.Game.Rulesets.Objects;
using osuTK;
using osuTK.Graphics;
namespace osu.Game.Screens.Edit.Compose.Components
{
@ -135,7 +136,7 @@ namespace osu.Game.Screens.Edit.Compose.Components
/// </summary>
/// <param name="placementIndex">The 0-based beat index from the point of placement.</param>
/// <returns>The applicable colour.</returns>
protected ColourInfo GetColourForIndexFromPlacement(int placementIndex)
protected Color4 GetColourForIndexFromPlacement(int placementIndex)
{
var timingPoint = Beatmap.ControlPointInfo.TimingPointAt(StartTime);
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);
int repeatIndex = placementIndex / beatDivisor.Value;
return ColourInfo.SingleColour(colour).MultiplyAlpha(0.5f / (repeatIndex + 1));
return colour.Opacity(0.5f / (repeatIndex + 1));
}
}
}