mirror of
https://github.com/ppy/osu.git
synced 2025-03-10 05:47:21 +08:00
Move DistanceSpacing
out of BeatmapInfo
This commit is contained in:
parent
c216283bf4
commit
3634307d7c
@ -101,7 +101,7 @@ namespace osu.Game.Tests.Beatmaps.Formats
|
|||||||
using (var resStream = TestResources.OpenResource("Soleily - Renatus (Gamu) [Insane].osu"))
|
using (var resStream = TestResources.OpenResource("Soleily - Renatus (Gamu) [Insane].osu"))
|
||||||
using (var stream = new LineBufferedReader(resStream))
|
using (var stream = new LineBufferedReader(resStream))
|
||||||
{
|
{
|
||||||
var beatmapInfo = decoder.Decode(stream).BeatmapInfo;
|
var beatmap = decoder.Decode(stream);
|
||||||
|
|
||||||
int[] expectedBookmarks =
|
int[] expectedBookmarks =
|
||||||
{
|
{
|
||||||
@ -109,13 +109,13 @@ namespace osu.Game.Tests.Beatmaps.Formats
|
|||||||
95901, 106450, 116999, 119637, 130186, 140735, 151285,
|
95901, 106450, 116999, 119637, 130186, 140735, 151285,
|
||||||
161834, 164471, 175020, 185570, 196119, 206669, 209306
|
161834, 164471, 175020, 185570, 196119, 206669, 209306
|
||||||
};
|
};
|
||||||
Assert.AreEqual(expectedBookmarks.Length, beatmapInfo.Bookmarks.Length);
|
Assert.AreEqual(expectedBookmarks.Length, beatmap.BeatmapInfo.Bookmarks.Length);
|
||||||
for (int i = 0; i < expectedBookmarks.Length; i++)
|
for (int i = 0; i < expectedBookmarks.Length; i++)
|
||||||
Assert.AreEqual(expectedBookmarks[i], beatmapInfo.Bookmarks[i]);
|
Assert.AreEqual(expectedBookmarks[i], beatmap.BeatmapInfo.Bookmarks[i]);
|
||||||
Assert.AreEqual(1.8, beatmapInfo.DistanceSpacing);
|
Assert.AreEqual(1.8, beatmap.DistanceSpacing);
|
||||||
Assert.AreEqual(4, beatmapInfo.BeatDivisor);
|
Assert.AreEqual(4, beatmap.BeatmapInfo.BeatDivisor);
|
||||||
Assert.AreEqual(4, beatmapInfo.GridSize);
|
Assert.AreEqual(4, beatmap.BeatmapInfo.GridSize);
|
||||||
Assert.AreEqual(2, beatmapInfo.TimelineZoom);
|
Assert.AreEqual(2, beatmap.BeatmapInfo.TimelineZoom);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ namespace osu.Game.Tests.Beatmaps.Formats
|
|||||||
Assert.AreEqual(expectedBookmarks.Length, beatmapInfo.Bookmarks.Length);
|
Assert.AreEqual(expectedBookmarks.Length, beatmapInfo.Bookmarks.Length);
|
||||||
for (int i = 0; i < expectedBookmarks.Length; i++)
|
for (int i = 0; i < expectedBookmarks.Length; i++)
|
||||||
Assert.AreEqual(expectedBookmarks[i], beatmapInfo.Bookmarks[i]);
|
Assert.AreEqual(expectedBookmarks[i], beatmapInfo.Bookmarks[i]);
|
||||||
Assert.AreEqual(1.8, beatmapInfo.DistanceSpacing);
|
Assert.AreEqual(1.8, beatmap.DistanceSpacing);
|
||||||
Assert.AreEqual(4, beatmapInfo.BeatDivisor);
|
Assert.AreEqual(4, beatmapInfo.BeatDivisor);
|
||||||
Assert.AreEqual(4, beatmapInfo.GridSize);
|
Assert.AreEqual(4, beatmapInfo.GridSize);
|
||||||
Assert.AreEqual(2, beatmapInfo.TimelineZoom);
|
Assert.AreEqual(2, beatmapInfo.TimelineZoom);
|
||||||
|
@ -165,7 +165,7 @@ namespace osu.Game.Tests.Visual.Editing
|
|||||||
{
|
{
|
||||||
double originalSpacing = 0;
|
double originalSpacing = 0;
|
||||||
|
|
||||||
AddStep("retrieve original spacing", () => originalSpacing = editorBeatmap.BeatmapInfo.DistanceSpacing);
|
AddStep("retrieve original spacing", () => originalSpacing = editorBeatmap.DistanceSpacing);
|
||||||
|
|
||||||
AddStep("hold ctrl", () => InputManager.PressKey(Key.LControl));
|
AddStep("hold ctrl", () => InputManager.PressKey(Key.LControl));
|
||||||
AddStep("hold alt", () => InputManager.PressKey(Key.LAlt));
|
AddStep("hold alt", () => InputManager.PressKey(Key.LAlt));
|
||||||
@ -175,7 +175,7 @@ namespace osu.Game.Tests.Visual.Editing
|
|||||||
AddStep("release alt", () => InputManager.ReleaseKey(Key.LAlt));
|
AddStep("release alt", () => InputManager.ReleaseKey(Key.LAlt));
|
||||||
AddStep("release ctrl", () => InputManager.ReleaseKey(Key.LControl));
|
AddStep("release ctrl", () => InputManager.ReleaseKey(Key.LControl));
|
||||||
|
|
||||||
AddAssert("distance spacing increased by 0.5", () => editorBeatmap.BeatmapInfo.DistanceSpacing == originalSpacing + 0.5);
|
AddAssert("distance spacing increased by 0.5", () => editorBeatmap.DistanceSpacing == originalSpacing + 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
public partial class EditorBeatmapContainer : PopoverContainer
|
public partial class EditorBeatmapContainer : PopoverContainer
|
||||||
|
@ -128,6 +128,8 @@ namespace osu.Game.Beatmaps
|
|||||||
|
|
||||||
public bool SamplesMatchPlaybackRate { get; set; } = true;
|
public bool SamplesMatchPlaybackRate { get; set; } = true;
|
||||||
|
|
||||||
|
public double DistanceSpacing { get; set; } = 1.0;
|
||||||
|
|
||||||
IBeatmap IBeatmap.Clone() => Clone();
|
IBeatmap IBeatmap.Clone() => Clone();
|
||||||
|
|
||||||
public Beatmap<T> Clone() => (Beatmap<T>)MemberwiseClone();
|
public Beatmap<T> Clone() => (Beatmap<T>)MemberwiseClone();
|
||||||
|
@ -74,6 +74,7 @@ namespace osu.Game.Beatmaps
|
|||||||
beatmap.WidescreenStoryboard = original.WidescreenStoryboard;
|
beatmap.WidescreenStoryboard = original.WidescreenStoryboard;
|
||||||
beatmap.EpilepsyWarning = original.EpilepsyWarning;
|
beatmap.EpilepsyWarning = original.EpilepsyWarning;
|
||||||
beatmap.SamplesMatchPlaybackRate = original.SamplesMatchPlaybackRate;
|
beatmap.SamplesMatchPlaybackRate = original.SamplesMatchPlaybackRate;
|
||||||
|
beatmap.DistanceSpacing = original.DistanceSpacing;
|
||||||
|
|
||||||
return beatmap;
|
return beatmap;
|
||||||
}
|
}
|
||||||
|
@ -414,7 +414,6 @@ namespace osu.Game.Beatmaps
|
|||||||
Hash = hash,
|
Hash = hash,
|
||||||
DifficultyName = decodedInfo.DifficultyName,
|
DifficultyName = decodedInfo.DifficultyName,
|
||||||
OnlineID = decodedInfo.OnlineID,
|
OnlineID = decodedInfo.OnlineID,
|
||||||
DistanceSpacing = decodedInfo.DistanceSpacing,
|
|
||||||
BeatDivisor = decodedInfo.BeatDivisor,
|
BeatDivisor = decodedInfo.BeatDivisor,
|
||||||
GridSize = decodedInfo.GridSize,
|
GridSize = decodedInfo.GridSize,
|
||||||
TimelineZoom = decodedInfo.TimelineZoom,
|
TimelineZoom = decodedInfo.TimelineZoom,
|
||||||
|
@ -6,14 +6,12 @@ using System.Diagnostics;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using osu.Game.Beatmaps.ControlPoints;
|
|
||||||
using osu.Game.Collections;
|
using osu.Game.Collections;
|
||||||
using osu.Game.Database;
|
using osu.Game.Database;
|
||||||
using osu.Game.Models;
|
using osu.Game.Models;
|
||||||
using osu.Game.Online.API.Requests.Responses;
|
using osu.Game.Online.API.Requests.Responses;
|
||||||
using osu.Game.Overlays.BeatmapSet.Scores;
|
using osu.Game.Overlays.BeatmapSet.Scores;
|
||||||
using osu.Game.Rulesets;
|
using osu.Game.Rulesets;
|
||||||
using osu.Game.Rulesets.Edit;
|
|
||||||
using osu.Game.Scoring;
|
using osu.Game.Scoring;
|
||||||
using Realms;
|
using Realms;
|
||||||
|
|
||||||
@ -143,18 +141,6 @@ namespace osu.Game.Beatmaps
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTimeOffset? LastPlayed { get; set; }
|
public DateTimeOffset? LastPlayed { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The ratio of distance travelled per time unit.
|
|
||||||
/// Generally used to decouple the spacing between hit objects from the enforced "velocity" of the beatmap (see <see cref="DifficultyControlPoint.SliderVelocity"/>).
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// The most common method of understanding is that at a default value of 1.0, the time-to-distance ratio will match the slider velocity of the beatmap
|
|
||||||
/// at the current point in time. Increasing this value will make hit objects more spaced apart when compared to the cursor movement required to track a slider.
|
|
||||||
///
|
|
||||||
/// This is only a hint property, used by the editor in <see cref="IDistanceSnapProvider"/> implementations. It does not directly affect the beatmap or gameplay.
|
|
||||||
/// </remarks>
|
|
||||||
public double DistanceSpacing { get; set; } = 1.0;
|
|
||||||
|
|
||||||
public int BeatDivisor { get; set; } = 4;
|
public int BeatDivisor { get; set; } = 4;
|
||||||
|
|
||||||
public int GridSize { get; set; }
|
public int GridSize { get; set; }
|
||||||
|
@ -329,7 +329,7 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case @"DistanceSpacing":
|
case @"DistanceSpacing":
|
||||||
beatmap.BeatmapInfo.DistanceSpacing = Math.Max(0, Parsing.ParseDouble(pair.Value));
|
beatmap.DistanceSpacing = Math.Max(0, Parsing.ParseDouble(pair.Value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case @"BeatDivisor":
|
case @"BeatDivisor":
|
||||||
|
@ -112,7 +112,7 @@ namespace osu.Game.Beatmaps.Formats
|
|||||||
|
|
||||||
if (beatmap.BeatmapInfo.Bookmarks.Length > 0)
|
if (beatmap.BeatmapInfo.Bookmarks.Length > 0)
|
||||||
writer.WriteLine(FormattableString.Invariant($"Bookmarks: {string.Join(',', beatmap.BeatmapInfo.Bookmarks)}"));
|
writer.WriteLine(FormattableString.Invariant($"Bookmarks: {string.Join(',', beatmap.BeatmapInfo.Bookmarks)}"));
|
||||||
writer.WriteLine(FormattableString.Invariant($"DistanceSpacing: {beatmap.BeatmapInfo.DistanceSpacing}"));
|
writer.WriteLine(FormattableString.Invariant($"DistanceSpacing: {beatmap.DistanceSpacing}"));
|
||||||
writer.WriteLine(FormattableString.Invariant($"BeatDivisor: {beatmap.BeatmapInfo.BeatDivisor}"));
|
writer.WriteLine(FormattableString.Invariant($"BeatDivisor: {beatmap.BeatmapInfo.BeatDivisor}"));
|
||||||
writer.WriteLine(FormattableString.Invariant($"GridSize: {beatmap.BeatmapInfo.GridSize}"));
|
writer.WriteLine(FormattableString.Invariant($"GridSize: {beatmap.BeatmapInfo.GridSize}"));
|
||||||
writer.WriteLine(FormattableString.Invariant($"TimelineZoom: {beatmap.BeatmapInfo.TimelineZoom}"));
|
writer.WriteLine(FormattableString.Invariant($"TimelineZoom: {beatmap.BeatmapInfo.TimelineZoom}"));
|
||||||
|
@ -6,6 +6,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using osu.Game.Beatmaps.ControlPoints;
|
using osu.Game.Beatmaps.ControlPoints;
|
||||||
using osu.Game.Beatmaps.Timing;
|
using osu.Game.Beatmaps.Timing;
|
||||||
|
using osu.Game.Rulesets.Edit;
|
||||||
using osu.Game.Rulesets.Objects;
|
using osu.Game.Rulesets.Objects;
|
||||||
using osu.Game.Rulesets.Scoring;
|
using osu.Game.Rulesets.Scoring;
|
||||||
|
|
||||||
@ -82,6 +83,18 @@ namespace osu.Game.Beatmaps
|
|||||||
|
|
||||||
bool SamplesMatchPlaybackRate { get; internal set; }
|
bool SamplesMatchPlaybackRate { get; internal set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The ratio of distance travelled per time unit.
|
||||||
|
/// Generally used to decouple the spacing between hit objects from the enforced "velocity" of the beatmap (see <see cref="DifficultyControlPoint.SliderVelocity"/>).
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// The most common method of understanding is that at a default value of 1.0, the time-to-distance ratio will match the slider velocity of the beatmap
|
||||||
|
/// at the current point in time. Increasing this value will make hit objects more spaced apart when compared to the cursor movement required to track a slider.
|
||||||
|
///
|
||||||
|
/// This is only a hint property, used by the editor in <see cref="IDistanceSnapProvider"/> implementations. It does not directly affect the beatmap or gameplay.
|
||||||
|
/// </remarks>
|
||||||
|
double DistanceSpacing { get; internal set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a shallow-clone of this beatmap and returns it.
|
/// Creates a shallow-clone of this beatmap and returns it.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -379,6 +379,12 @@ namespace osu.Game.Rulesets.Difficulty
|
|||||||
set => baseBeatmap.SamplesMatchPlaybackRate = value;
|
set => baseBeatmap.SamplesMatchPlaybackRate = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double DistanceSpacing
|
||||||
|
{
|
||||||
|
get => baseBeatmap.DistanceSpacing;
|
||||||
|
set => baseBeatmap.DistanceSpacing = value;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,7 +99,7 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
DistanceSpacingMultiplier.Value = editorBeatmap.BeatmapInfo.DistanceSpacing;
|
DistanceSpacingMultiplier.Value = editorBeatmap.DistanceSpacing;
|
||||||
DistanceSpacingMultiplier.BindValueChanged(multiplier =>
|
DistanceSpacingMultiplier.BindValueChanged(multiplier =>
|
||||||
{
|
{
|
||||||
distanceSpacingSlider.ContractedLabelText = $"D. S. ({multiplier.NewValue:0.##x})";
|
distanceSpacingSlider.ContractedLabelText = $"D. S. ({multiplier.NewValue:0.##x})";
|
||||||
@ -108,7 +108,7 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
if (multiplier.NewValue != multiplier.OldValue)
|
if (multiplier.NewValue != multiplier.OldValue)
|
||||||
onScreenDisplay?.Display(new DistanceSpacingToast(multiplier.NewValue.ToLocalisableString(@"0.##x"), multiplier));
|
onScreenDisplay?.Display(new DistanceSpacingToast(multiplier.NewValue.ToLocalisableString(@"0.##x"), multiplier));
|
||||||
|
|
||||||
editorBeatmap.BeatmapInfo.DistanceSpacing = multiplier.NewValue;
|
editorBeatmap.DistanceSpacing = multiplier.NewValue;
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
DistanceSpacingMultiplier.BindDisabledChanged(disabled => distanceSpacingSlider.Alpha = disabled ? 0 : 1, true);
|
DistanceSpacingMultiplier.BindDisabledChanged(disabled => distanceSpacingSlider.Alpha = disabled ? 0 : 1, true);
|
||||||
|
@ -18,7 +18,7 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
/// A multiplier which changes the ratio of distance travelled per time unit.
|
/// A multiplier which changes the ratio of distance travelled per time unit.
|
||||||
/// Importantly, this is provided for manual usage, and not multiplied into any of the methods exposed by this interface.
|
/// Importantly, this is provided for manual usage, and not multiplied into any of the methods exposed by this interface.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <seealso cref="BeatmapInfo.DistanceSpacing"/>
|
/// <seealso cref="IBeatmap.DistanceSpacing"/>
|
||||||
Bindable<double> DistanceSpacingMultiplier { get; }
|
Bindable<double> DistanceSpacingMultiplier { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -226,6 +226,12 @@ namespace osu.Game.Screens.Edit
|
|||||||
set => PlayableBeatmap.SamplesMatchPlaybackRate = value;
|
set => PlayableBeatmap.SamplesMatchPlaybackRate = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double DistanceSpacing
|
||||||
|
{
|
||||||
|
get => PlayableBeatmap.DistanceSpacing;
|
||||||
|
set => PlayableBeatmap.DistanceSpacing = value;
|
||||||
|
}
|
||||||
|
|
||||||
public IBeatmap Clone() => (EditorBeatmap)MemberwiseClone();
|
public IBeatmap Clone() => (EditorBeatmap)MemberwiseClone();
|
||||||
|
|
||||||
private IList mutableHitObjects => (IList)PlayableBeatmap.HitObjects;
|
private IList mutableHitObjects => (IList)PlayableBeatmap.HitObjects;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user