1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-14 19:22:56 +08:00

Add ability to set preview time

This commit is contained in:
cdwcgt 2022-12-16 01:03:30 +09:00
parent 60c8ef3fe5
commit c164744064
No known key found for this signature in database
GPG Key ID: 144396D01095C3A2
4 changed files with 56 additions and 0 deletions

View File

@ -0,0 +1,31 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Game.Graphics;
using osu.Game.Screens.Edit.Components.Timelines.Summary.Visualisations;
namespace osu.Game.Screens.Edit.Components.Timelines.Summary.Parts
{
public partial class PreviewTimePart : TimelinePart
{
protected override void LoadBeatmap(EditorBeatmap beatmap)
{
base.LoadBeatmap(beatmap);
Add(new PreviewTimeVisualisation(beatmap.PreviewTime));
}
private partial class PreviewTimeVisualisation : PointVisualisation
{
public PreviewTimeVisualisation(BindableInt time)
: base(time.Value)
{
time.BindValueChanged(s => X = s.NewValue);
}
[BackgroundDependencyLoader]
private void load(OsuColour colours) => Colour = colours.Lime;
}
}
}

View File

@ -41,6 +41,14 @@ namespace osu.Game.Screens.Edit.Components.Timelines.Summary
RelativeSizeAxes = Axes.Both,
Height = 0.35f
},
new PreviewTimePart
{
Anchor = Anchor.Centre,
Origin = Anchor.BottomCentre,
RelativeSizeAxes = Axes.Both,
Y = -10,
Height = 0.35f
},
new Container
{
Name = "centre line",

View File

@ -322,6 +322,13 @@ namespace osu.Game.Screens.Edit
State = { BindTarget = editorHitMarkers },
}
}
},
new MenuItem("Timing")
{
Items = new MenuItem[]
{
new EditorMenuItem("Set Current Position as Preview Point", MenuItemType.Standard, SetCurrectTimeAsPreview)
}
}
}
},
@ -801,6 +808,11 @@ namespace osu.Game.Screens.Edit
protected void Redo() => changeHandler?.RestoreState(1);
protected void SetCurrectTimeAsPreview()
{
editorBeatmap.PreviewTime.Value = (int)clock.CurrentTime;
}
private void resetTrack(bool seekToStart = false)
{
Beatmap.Value.Track.Stop();

View File

@ -86,6 +86,8 @@ namespace osu.Game.Screens.Edit
[Resolved]
private EditorClock editorClock { get; set; }
public BindableInt PreviewTime;
private readonly IBeatmapProcessor beatmapProcessor;
private readonly Dictionary<HitObject, Bindable<double>> startTimeBindables = new Dictionary<HitObject, Bindable<double>>();
@ -107,6 +109,9 @@ namespace osu.Game.Screens.Edit
foreach (var obj in HitObjects)
trackStartTime(obj);
PreviewTime = new BindableInt(playableBeatmap.Metadata.PreviewTime);
PreviewTime.BindValueChanged(s => this.beatmapInfo.Metadata.PreviewTime = s.NewValue);
}
/// <summary>