mirror of
https://github.com/ppy/osu.git
synced 2025-03-28 01:37:46 +08:00
Re-namespace and split out timeline parts from the SummaryTimeline
This commit is contained in:
parent
d86e81f07c
commit
a1f88a17b1
@ -0,0 +1,30 @@
|
|||||||
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Graphics;
|
||||||
|
using osu.Game.Screens.Edit.Components.Timelines.Summary.Visualisations;
|
||||||
|
|
||||||
|
namespace osu.Game.Screens.Edit.Components.Timelines.Summary.Parts
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The part of the timeline that displays bookmarks.
|
||||||
|
/// </summary>
|
||||||
|
internal class BookmarkPart : TimelinePart
|
||||||
|
{
|
||||||
|
protected override void LoadBeatmap(WorkingBeatmap beatmap)
|
||||||
|
{
|
||||||
|
foreach (int bookmark in beatmap.BeatmapInfo.Bookmarks)
|
||||||
|
Add(new BookmarkVisualisation(bookmark));
|
||||||
|
}
|
||||||
|
|
||||||
|
private class BookmarkVisualisation : PointVisualisation
|
||||||
|
{
|
||||||
|
public BookmarkVisualisation(double startTime)
|
||||||
|
: base(startTime)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load(OsuColour colours) => Colour = colours.Blue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Beatmaps.Timing;
|
||||||
|
using osu.Game.Graphics;
|
||||||
|
using osu.Game.Screens.Edit.Components.Timelines.Summary.Visualisations;
|
||||||
|
|
||||||
|
namespace osu.Game.Screens.Edit.Components.Timelines.Summary.Parts
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The part of the timeline that displays breaks in the song.
|
||||||
|
/// </summary>
|
||||||
|
internal class BreakPart : TimelinePart
|
||||||
|
{
|
||||||
|
protected override void LoadBeatmap(WorkingBeatmap beatmap)
|
||||||
|
{
|
||||||
|
foreach (var breakPeriod in beatmap.Beatmap.Breaks)
|
||||||
|
Add(new BreakVisualisation(breakPeriod));
|
||||||
|
}
|
||||||
|
|
||||||
|
private class BreakVisualisation : DurationVisualisation
|
||||||
|
{
|
||||||
|
public BreakVisualisation(BreakPeriod breakPeriod)
|
||||||
|
: base(breakPeriod.StartTime, breakPeriod.EndTime)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load(OsuColour colours) => Colour = colours.Yellow;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
using System.Linq;
|
||||||
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Extensions.IEnumerableExtensions;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Beatmaps.ControlPoints;
|
||||||
|
using osu.Game.Graphics;
|
||||||
|
using osu.Game.Screens.Edit.Components.Timelines.Summary.Visualisations;
|
||||||
|
|
||||||
|
namespace osu.Game.Screens.Edit.Components.Timelines.Summary.Parts
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The part of the timeline that displays the control points.
|
||||||
|
/// </summary>
|
||||||
|
internal class ControlPointPart : TimelinePart
|
||||||
|
{
|
||||||
|
protected override void LoadBeatmap(WorkingBeatmap beatmap)
|
||||||
|
{
|
||||||
|
ControlPointInfo cpi = beatmap.Beatmap.ControlPointInfo;
|
||||||
|
|
||||||
|
cpi.TimingPoints.ForEach(addTimingPoint);
|
||||||
|
|
||||||
|
// Consider all non-timing points as the same type
|
||||||
|
cpi.SoundPoints.Select(c => (ControlPoint)c)
|
||||||
|
.Concat(cpi.EffectPoints)
|
||||||
|
.Concat(cpi.DifficultyPoints)
|
||||||
|
.Distinct()
|
||||||
|
// Non-timing points should not be added where there are timing points
|
||||||
|
.Where(c => cpi.TimingPointAt(c.Time).Time != c.Time)
|
||||||
|
.ForEach(addNonTimingPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addTimingPoint(ControlPoint controlPoint) => Add(new TimingPointVisualisation(controlPoint));
|
||||||
|
private void addNonTimingPoint(ControlPoint controlPoint) => Add(new NonTimingPointVisualisation(controlPoint));
|
||||||
|
|
||||||
|
private class TimingPointVisualisation : ControlPointVisualisation
|
||||||
|
{
|
||||||
|
public TimingPointVisualisation(ControlPoint controlPoint)
|
||||||
|
: base(controlPoint)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load(OsuColour colours) => Colour = colours.YellowDark;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class NonTimingPointVisualisation : ControlPointVisualisation
|
||||||
|
{
|
||||||
|
public NonTimingPointVisualisation(ControlPoint controlPoint)
|
||||||
|
: base(controlPoint)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load(OsuColour colours) => Colour = colours.Green;
|
||||||
|
}
|
||||||
|
|
||||||
|
private abstract class ControlPointVisualisation : PointVisualisation
|
||||||
|
{
|
||||||
|
protected ControlPointVisualisation(ControlPoint controlPoint)
|
||||||
|
: base(controlPoint.Time)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
using System;
|
||||||
|
using OpenTK;
|
||||||
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
|
||||||
|
namespace osu.Game.Screens.Edit.Components.Timelines.Summary.Parts
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a part of the summary timeline..
|
||||||
|
/// </summary>
|
||||||
|
internal abstract class TimelinePart : CompositeDrawable
|
||||||
|
{
|
||||||
|
private readonly Container timeline;
|
||||||
|
|
||||||
|
protected TimelinePart()
|
||||||
|
{
|
||||||
|
AddInternal(timeline = new Container { RelativeSizeAxes = Axes.Both });
|
||||||
|
}
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load(OsuGameBase osuGame)
|
||||||
|
{
|
||||||
|
osuGame.Beatmap.ValueChanged += b =>
|
||||||
|
{
|
||||||
|
timeline.Clear();
|
||||||
|
timeline.RelativeChildSize = new Vector2((float)Math.Max(1, b.Track.Length), 1);
|
||||||
|
LoadBeatmap(b);
|
||||||
|
};
|
||||||
|
|
||||||
|
timeline.RelativeChildSize = new Vector2((float)Math.Max(1, osuGame.Beatmap.Value.Track.Length), 1);
|
||||||
|
LoadBeatmap(osuGame.Beatmap);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void Add(Drawable visualisation) => timeline.Add(visualisation);
|
||||||
|
|
||||||
|
protected abstract void LoadBeatmap(WorkingBeatmap beatmap);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Framework.Graphics.Shapes;
|
||||||
|
|
||||||
|
namespace osu.Game.Screens.Edit.Components.Timelines.Summary.Visualisations
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a spanning point on a <see cref="Timeline"/>.
|
||||||
|
/// </summary>
|
||||||
|
internal class DurationVisualisation : Container
|
||||||
|
{
|
||||||
|
protected DurationVisualisation(double startTime, double endTime)
|
||||||
|
{
|
||||||
|
Masking = true;
|
||||||
|
CornerRadius = 5;
|
||||||
|
|
||||||
|
RelativePositionAxes = Axes.X;
|
||||||
|
RelativeSizeAxes = Axes.Both;
|
||||||
|
X = (float)startTime;
|
||||||
|
Width = (float)(endTime - startTime);
|
||||||
|
|
||||||
|
AddInternal(new Box { RelativeSizeAxes = Axes.Both });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
using OpenTK;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Shapes;
|
||||||
|
|
||||||
|
namespace osu.Game.Screens.Edit.Components.Timelines.Summary.Visualisations
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a singular point on a <see cref="Timeline"/>.
|
||||||
|
/// </summary>
|
||||||
|
internal class PointVisualisation : Box
|
||||||
|
{
|
||||||
|
protected PointVisualisation(double startTime)
|
||||||
|
{
|
||||||
|
Origin = Anchor.TopCentre;
|
||||||
|
|
||||||
|
RelativeSizeAxes = Axes.Y;
|
||||||
|
Width = 1;
|
||||||
|
EdgeSmoothness = new Vector2(1, 0);
|
||||||
|
|
||||||
|
RelativePositionAxes = Axes.X;
|
||||||
|
X = (float)startTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -606,6 +606,12 @@
|
|||||||
<Compile Include="Screens\Direct\OnlineListing.cs" />
|
<Compile Include="Screens\Direct\OnlineListing.cs" />
|
||||||
<Compile Include="Screens\Edit\Editor.cs" />
|
<Compile Include="Screens\Edit\Editor.cs" />
|
||||||
<Compile Include="Screens\Edit\Components\SummaryTimeline.cs" />
|
<Compile Include="Screens\Edit\Components\SummaryTimeline.cs" />
|
||||||
|
<Compile Include="Screens\Edit\Components\Timelines\Summary\Parts\BreakPart.cs" />
|
||||||
|
<Compile Include="Screens\Edit\Components\Timelines\Summary\Parts\BookmarkPart.cs" />
|
||||||
|
<Compile Include="Screens\Edit\Components\Timelines\Summary\Parts\ControlPointPart.cs" />
|
||||||
|
<Compile Include="Screens\Edit\Components\Timelines\Summary\Parts\TimelinePart.cs" />
|
||||||
|
<Compile Include="Screens\Edit\Components\Timelines\Summary\Visualisations\DurationVisualisation.cs" />
|
||||||
|
<Compile Include="Screens\Edit\Components\Timelines\Summary\Visualisations\PointVisualisation.cs" />
|
||||||
<Compile Include="Screens\Edit\Menus\EditorMenuBar.cs" />
|
<Compile Include="Screens\Edit\Menus\EditorMenuBar.cs" />
|
||||||
<Compile Include="Screens\Edit\Menus\EditorMenuBarItem.cs" />
|
<Compile Include="Screens\Edit\Menus\EditorMenuBarItem.cs" />
|
||||||
<Compile Include="Screens\Edit\Menus\EditorMenuItem.cs" />
|
<Compile Include="Screens\Edit\Menus\EditorMenuItem.cs" />
|
||||||
|
Loading…
x
Reference in New Issue
Block a user