1
0
mirror of https://github.com/ppy/osu.git synced 2025-03-15 17:47:18 +08:00

Fix regression in legacy dual stage handling logic

This commit is contained in:
Dean Herbert 2022-10-05 19:21:38 +09:00
parent 2ae1aef0be
commit 3947011baf
4 changed files with 19 additions and 12 deletions

View File

@ -71,11 +71,11 @@ namespace osu.Game.Rulesets.Mania
case TrianglesSkin:
return new ManiaTrianglesSkinTransformer(skin);
case LegacySkin:
return new ManiaLegacySkinTransformer(skin);
case ArgonSkin:
return new ManiaArgonSkinTransformer(skin);
case LegacySkin:
return new ManiaLegacySkinTransformer(skin, beatmap);
}
return null;

View File

@ -9,6 +9,7 @@ using osu.Framework.Audio.Sample;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Game.Audio;
using osu.Game.Beatmaps;
using osu.Game.Rulesets.Mania.Beatmaps;
using osu.Game.Rulesets.Objects.Legacy;
using osu.Game.Rulesets.Scoring;
@ -56,9 +57,13 @@ namespace osu.Game.Rulesets.Mania.Skinning.Legacy
/// </summary>
private readonly Lazy<bool> hasKeyTexture;
public ManiaLegacySkinTransformer(ISkin skin)
private readonly ManiaBeatmap beatmap;
public ManiaLegacySkinTransformer(ISkin skin, IBeatmap beatmap)
: base(skin)
{
this.beatmap = (ManiaBeatmap)beatmap;
isLegacySkin = new Lazy<bool>(() => GetConfig<SkinConfiguration.LegacySetting, decimal>(SkinConfiguration.LegacySetting.Version) != null);
hasKeyTexture = new Lazy<bool>(() =>
{
@ -144,7 +149,7 @@ namespace osu.Game.Rulesets.Mania.Skinning.Legacy
public override IBindable<TValue> GetConfig<TLookup, TValue>(TLookup lookup)
{
if (lookup is ManiaSkinConfigurationLookup maniaLookup)
return base.GetConfig<LegacyManiaSkinConfigurationLookup, TValue>(new LegacyManiaSkinConfigurationLookup(maniaLookup.StageDefinition.Columns, maniaLookup.Lookup, maniaLookup.ColumnIndex));
return base.GetConfig<LegacyManiaSkinConfigurationLookup, TValue>(new LegacyManiaSkinConfigurationLookup(beatmap.TotalColumns, maniaLookup.Lookup, maniaLookup.ColumnIndex));
return base.GetConfig<TLookup, TValue>(lookup);
}

View File

@ -1,19 +1,21 @@
// 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.
#nullable disable
namespace osu.Game.Skinning
{
public class LegacyManiaSkinConfigurationLookup
{
public readonly int Keys;
/// <summary>
/// Total columns across all stages.
/// </summary>
public readonly int TotalColumns;
public readonly LegacyManiaSkinConfigurationLookups Lookup;
public readonly int? TargetColumn;
public LegacyManiaSkinConfigurationLookup(int keys, LegacyManiaSkinConfigurationLookups lookup, int? targetColumn = null)
public LegacyManiaSkinConfigurationLookup(int totalColumns, LegacyManiaSkinConfigurationLookups lookup, int? targetColumn = null)
{
Keys = keys;
TotalColumns = totalColumns;
Lookup = lookup;
TargetColumn = targetColumn;
}

View File

@ -128,8 +128,8 @@ namespace osu.Game.Skinning
private IBindable<TValue>? lookupForMania<TValue>(LegacyManiaSkinConfigurationLookup maniaLookup)
{
if (!maniaConfigurations.TryGetValue(maniaLookup.Keys, out var existing))
maniaConfigurations[maniaLookup.Keys] = existing = new LegacyManiaSkinConfiguration(maniaLookup.Keys);
if (!maniaConfigurations.TryGetValue(maniaLookup.TotalColumns, out var existing))
maniaConfigurations[maniaLookup.TotalColumns] = existing = new LegacyManiaSkinConfiguration(maniaLookup.TotalColumns);
switch (maniaLookup.Lookup)
{