mirror of
https://github.com/ppy/osu.git
synced 2025-01-13 02:32:55 +08:00
Merge pull request #26060 from jeenyuhs/adjust_beatmap_length_according_to_rate
Adjust BeatmapInfoWedge's beatmap length field according to mod rate
This commit is contained in:
commit
fc56188b95
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
@ -14,6 +15,7 @@ using osu.Framework.Graphics.UserInterface;
|
|||||||
using osu.Framework.Testing;
|
using osu.Framework.Testing;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Beatmaps.ControlPoints;
|
using osu.Game.Beatmaps.ControlPoints;
|
||||||
|
using osu.Game.Extensions;
|
||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
using osu.Game.Resources.Localisation.Web;
|
using osu.Game.Resources.Localisation.Web;
|
||||||
using osu.Game.Rulesets;
|
using osu.Game.Rulesets;
|
||||||
@ -194,6 +196,36 @@ namespace osu.Game.Tests.Visual.SongSelect
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestCase]
|
||||||
|
public void TestLengthUpdates()
|
||||||
|
{
|
||||||
|
IBeatmap beatmap = createTestBeatmap(new OsuRuleset().RulesetInfo);
|
||||||
|
double drain = beatmap.CalculateDrainLength();
|
||||||
|
beatmap.BeatmapInfo.Length = drain;
|
||||||
|
|
||||||
|
OsuModDoubleTime doubleTime = null;
|
||||||
|
|
||||||
|
selectBeatmap(beatmap);
|
||||||
|
checkDisplayedLength(drain);
|
||||||
|
|
||||||
|
AddStep("select DT", () => SelectedMods.Value = new[] { doubleTime = new OsuModDoubleTime() });
|
||||||
|
checkDisplayedLength(Math.Round(drain / 1.5f));
|
||||||
|
|
||||||
|
AddStep("change DT rate", () => doubleTime.SpeedChange.Value = 2);
|
||||||
|
checkDisplayedLength(Math.Round(drain / 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkDisplayedLength(double drain)
|
||||||
|
{
|
||||||
|
var displayedLength = drain.ToFormattedDuration();
|
||||||
|
|
||||||
|
AddUntilStep($"check map drain ({displayedLength})", () =>
|
||||||
|
{
|
||||||
|
var label = infoWedge.DisplayedContent.ChildrenOfType<BeatmapInfoWedge.WedgeInfoText.InfoLabel>().Single(l => l.Statistic.Name == BeatmapsetsStrings.ShowStatsTotalLength(displayedLength));
|
||||||
|
return label.Statistic.Content == displayedLength.ToString();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private void setRuleset(RulesetInfo rulesetInfo)
|
private void setRuleset(RulesetInfo rulesetInfo)
|
||||||
{
|
{
|
||||||
Container containerBefore = null;
|
Container containerBefore = null;
|
||||||
|
@ -161,6 +161,7 @@ namespace osu.Game.Screens.Select
|
|||||||
private ILocalisedBindableString artistBinding;
|
private ILocalisedBindableString artistBinding;
|
||||||
private FillFlowContainer infoLabelContainer;
|
private FillFlowContainer infoLabelContainer;
|
||||||
private Container bpmLabelContainer;
|
private Container bpmLabelContainer;
|
||||||
|
private Container lengthLabelContainer;
|
||||||
|
|
||||||
private readonly WorkingBeatmap working;
|
private readonly WorkingBeatmap working;
|
||||||
private readonly RulesetInfo ruleset;
|
private readonly RulesetInfo ruleset;
|
||||||
@ -341,10 +342,10 @@ namespace osu.Game.Screens.Select
|
|||||||
{
|
{
|
||||||
settingChangeTracker?.Dispose();
|
settingChangeTracker?.Dispose();
|
||||||
|
|
||||||
refreshBPMLabel();
|
refreshBPMAndLengthLabel();
|
||||||
|
|
||||||
settingChangeTracker = new ModSettingChangeTracker(m.NewValue);
|
settingChangeTracker = new ModSettingChangeTracker(m.NewValue);
|
||||||
settingChangeTracker.SettingChanged += _ => refreshBPMLabel();
|
settingChangeTracker.SettingChanged += _ => refreshBPMAndLengthLabel();
|
||||||
}, true);
|
}, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -370,12 +371,10 @@ namespace osu.Game.Screens.Select
|
|||||||
|
|
||||||
infoLabelContainer.Children = new Drawable[]
|
infoLabelContainer.Children = new Drawable[]
|
||||||
{
|
{
|
||||||
new InfoLabel(new BeatmapStatistic
|
lengthLabelContainer = new Container
|
||||||
{
|
{
|
||||||
Name = BeatmapsetsStrings.ShowStatsTotalLength(playableBeatmap.CalculateDrainLength().ToFormattedDuration()),
|
AutoSizeAxes = Axes.Both,
|
||||||
CreateIcon = () => new BeatmapStatisticIcon(BeatmapStatisticsIconType.Length),
|
},
|
||||||
Content = working.BeatmapInfo.Length.ToFormattedDuration().ToString(),
|
|
||||||
}),
|
|
||||||
bpmLabelContainer = new Container
|
bpmLabelContainer = new Container
|
||||||
{
|
{
|
||||||
AutoSizeAxes = Axes.Both,
|
AutoSizeAxes = Axes.Both,
|
||||||
@ -394,7 +393,7 @@ namespace osu.Game.Screens.Select
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refreshBPMLabel()
|
private void refreshBPMAndLengthLabel()
|
||||||
{
|
{
|
||||||
var beatmap = working.Beatmap;
|
var beatmap = working.Beatmap;
|
||||||
|
|
||||||
@ -420,6 +419,16 @@ namespace osu.Game.Screens.Select
|
|||||||
CreateIcon = () => new BeatmapStatisticIcon(BeatmapStatisticsIconType.Bpm),
|
CreateIcon = () => new BeatmapStatisticIcon(BeatmapStatisticsIconType.Bpm),
|
||||||
Content = labelText
|
Content = labelText
|
||||||
});
|
});
|
||||||
|
|
||||||
|
double drainLength = Math.Round(beatmap.CalculateDrainLength() / rate);
|
||||||
|
double hitLength = Math.Round(beatmap.BeatmapInfo.Length / rate);
|
||||||
|
|
||||||
|
lengthLabelContainer.Child = new InfoLabel(new BeatmapStatistic
|
||||||
|
{
|
||||||
|
Name = BeatmapsetsStrings.ShowStatsTotalLength(drainLength.ToFormattedDuration()),
|
||||||
|
CreateIcon = () => new BeatmapStatisticIcon(BeatmapStatisticsIconType.Length),
|
||||||
|
Content = hitLength.ToFormattedDuration().ToString(),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private Drawable getMapper(BeatmapMetadata metadata)
|
private Drawable getMapper(BeatmapMetadata metadata)
|
||||||
|
Loading…
Reference in New Issue
Block a user