Add method to get stage from column index

This commit is contained in:
Dean Herbert
2022-10-06 14:51:17 +09:00
parent eea3d5adb8
commit dee01abab1
6 changed files with 37 additions and 13 deletions

View File

@ -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 osu.Game.Beatmaps; using osu.Game.Beatmaps;
@ -60,5 +61,18 @@ namespace osu.Game.Rulesets.Mania.Beatmaps
}, },
}; };
} }
public StageDefinition GetStageForColumnIndex(int column)
{
foreach (var stage in Stages)
{
if (column < stage.Columns)
return stage;
column -= stage.Columns;
}
throw new ArgumentOutOfRangeException(nameof(column), "Provided index exceeds all available stages");
}
} }
} }

View File

@ -69,10 +69,10 @@ namespace osu.Game.Rulesets.Mania
switch (skin) switch (skin)
{ {
case TrianglesSkin: case TrianglesSkin:
return new ManiaTrianglesSkinTransformer(skin); return new ManiaTrianglesSkinTransformer(skin, beatmap);
case ArgonSkin: case ArgonSkin:
return new ManiaArgonSkinTransformer(skin); return new ManiaArgonSkinTransformer(skin, beatmap);
case DefaultLegacySkin: case DefaultLegacySkin:
return new ManiaClassicSkinTransformer(skin, beatmap); return new ManiaClassicSkinTransformer(skin, beatmap);

View File

@ -4,6 +4,8 @@
using osu.Framework.Bindables; using osu.Framework.Bindables;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Utils; using osu.Framework.Utils;
using osu.Game.Beatmaps;
using osu.Game.Rulesets.Mania.Beatmaps;
using osu.Game.Skinning; using osu.Game.Skinning;
using osuTK.Graphics; using osuTK.Graphics;
@ -11,9 +13,12 @@ namespace osu.Game.Rulesets.Mania.Skinning.Argon
{ {
public class ManiaArgonSkinTransformer : SkinTransformer public class ManiaArgonSkinTransformer : SkinTransformer
{ {
public ManiaArgonSkinTransformer(ISkin skin) private readonly ManiaBeatmap beatmap;
public ManiaArgonSkinTransformer(ISkin skin, IBeatmap beatmap)
: base(skin) : base(skin)
{ {
this.beatmap = (ManiaBeatmap)beatmap;
} }
public override Drawable? GetDrawableComponent(ISkinComponent component) public override Drawable? GetDrawableComponent(ISkinComponent component)
@ -44,7 +49,10 @@ namespace osu.Game.Rulesets.Mania.Skinning.Argon
switch (maniaLookup.Lookup) switch (maniaLookup.Lookup)
{ {
case LegacyManiaSkinConfigurationLookups.ColumnBackgroundColour: case LegacyManiaSkinConfigurationLookups.ColumnBackgroundColour:
if (maniaLookup.StageDefinition.IsSpecialColumn(maniaLookup.ColumnIndex ?? 0)) int column = maniaLookup.ColumnIndex ?? 0;
var stage = beatmap.GetStageForColumnIndex(column);
if (stage.IsSpecialColumn(column))
return SkinUtils.As<TValue>(new Bindable<Color4>(Color4.Yellow)); return SkinUtils.As<TValue>(new Bindable<Color4>(Color4.Yellow));
// TODO: Add actual colours. // TODO: Add actual colours.

View File

@ -3,6 +3,8 @@
using System; using System;
using osu.Framework.Bindables; using osu.Framework.Bindables;
using osu.Game.Beatmaps;
using osu.Game.Rulesets.Mania.Beatmaps;
using osu.Game.Skinning; using osu.Game.Skinning;
using osuTK.Graphics; using osuTK.Graphics;
@ -10,9 +12,12 @@ namespace osu.Game.Rulesets.Mania.Skinning.Default
{ {
public class ManiaTrianglesSkinTransformer : SkinTransformer public class ManiaTrianglesSkinTransformer : SkinTransformer
{ {
public ManiaTrianglesSkinTransformer(ISkin skin) private readonly ManiaBeatmap beatmap;
public ManiaTrianglesSkinTransformer(ISkin skin, IBeatmap beatmap)
: base(skin) : base(skin)
{ {
this.beatmap = (ManiaBeatmap)beatmap;
} }
private readonly Color4 colourEven = new Color4(6, 84, 0, 255); private readonly Color4 colourEven = new Color4(6, 84, 0, 255);
@ -28,10 +33,12 @@ namespace osu.Game.Rulesets.Mania.Skinning.Default
case LegacyManiaSkinConfigurationLookups.ColumnBackgroundColour: case LegacyManiaSkinConfigurationLookups.ColumnBackgroundColour:
int column = maniaLookup.ColumnIndex ?? 0; int column = maniaLookup.ColumnIndex ?? 0;
if (maniaLookup.StageDefinition.IsSpecialColumn(column)) var stage = beatmap.GetStageForColumnIndex(column);
if (stage.IsSpecialColumn(column))
return SkinUtils.As<TValue>(new Bindable<Color4>(colourSpecial)); return SkinUtils.As<TValue>(new Bindable<Color4>(colourSpecial));
int distanceToEdge = Math.Min(column, (maniaLookup.StageDefinition.Columns - 1) - column); int distanceToEdge = Math.Min(column, (stage.Columns - 1) - column);
return SkinUtils.As<TValue>(new Bindable<Color4>(distanceToEdge % 2 == 0 ? colourOdd : colourEven)); return SkinUtils.As<TValue>(new Bindable<Color4>(distanceToEdge % 2 == 0 ? colourOdd : colourEven));
} }
} }

View File

@ -8,7 +8,6 @@ using System.Collections.Generic;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
using osu.Framework.Bindables; using osu.Framework.Bindables;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Utils;
using osu.Game.Audio; using osu.Game.Audio;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Mania.Beatmaps;

View File

@ -11,7 +11,6 @@ using osu.Framework.Graphics.Pooling;
using osu.Framework.Input.Bindings; using osu.Framework.Input.Bindings;
using osu.Framework.Input.Events; using osu.Framework.Input.Events;
using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Judgements;
using osu.Game.Rulesets.Mania.Beatmaps;
using osu.Game.Rulesets.Mania.Objects; using osu.Game.Rulesets.Mania.Objects;
using osu.Game.Rulesets.Mania.Objects.Drawables; using osu.Game.Rulesets.Mania.Objects.Drawables;
using osu.Game.Rulesets.Mania.Skinning; using osu.Game.Rulesets.Mania.Skinning;
@ -68,9 +67,6 @@ namespace osu.Game.Rulesets.Mania.UI
[Resolved] [Resolved]
private ISkinSource skin { get; set; } private ISkinSource skin { get; set; }
[Resolved]
private StageDefinition stageDefinition { get; set; }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load() private void load()
{ {
@ -116,7 +112,7 @@ namespace osu.Game.Rulesets.Mania.UI
private void onSourceChanged() private void onSourceChanged()
{ {
AccentColour.Value = skin.GetManiaSkinConfig<Color4>(LegacyManiaSkinConfigurationLookups.ColumnBackgroundColour, stageDefinition, Index)?.Value ?? Color4.Black; AccentColour.Value = skin.GetManiaSkinConfig<Color4>(LegacyManiaSkinConfigurationLookups.ColumnBackgroundColour, Index)?.Value ?? Color4.Black;
} }
protected override void LoadComplete() protected override void LoadComplete()