Make note height scale by minimum column width

This commit is contained in:
smoogipoo 2020-04-07 16:07:18 +09:00
parent 1a1301b7fc
commit 3ecb99462f
5 changed files with 26 additions and 3 deletions

View File

@ -20,6 +20,8 @@ public class LegacyNotePiece : LegacyManiaColumnElement
private Container directionContainer; private Container directionContainer;
private Sprite noteSprite; private Sprite noteSprite;
private float? minimumColumnWidth;
public LegacyNotePiece() public LegacyNotePiece()
{ {
RelativeSizeAxes = Axes.X; RelativeSizeAxes = Axes.X;
@ -29,6 +31,8 @@ public LegacyNotePiece()
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(ISkinSource skin, IScrollingInfo scrollingInfo) private void load(ISkinSource skin, IScrollingInfo scrollingInfo)
{ {
minimumColumnWidth = skin.GetConfig<ManiaSkinConfigurationLookup, float>(new ManiaSkinConfigurationLookup(LegacyManiaSkinConfigurationLookups.MinimumColumnWidth))?.Value;
InternalChild = directionContainer = new Container InternalChild = directionContainer = new Container
{ {
Origin = Anchor.BottomCentre, Origin = Anchor.BottomCentre,
@ -47,8 +51,10 @@ protected override void Update()
if (noteSprite.Texture != null) if (noteSprite.Texture != null)
{ {
var scale = DrawWidth / noteSprite.Texture.DisplayWidth; // The height is scaled to the minimum column width, if provided.
noteSprite.Scale = new Vector2(scale); float minimumWidth = minimumColumnWidth ?? DrawWidth;
noteSprite.Scale = Vector2.Divide(new Vector2(DrawWidth, minimumWidth), noteSprite.Texture.DisplayWidth);
} }
} }

View File

@ -3,6 +3,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using osu.Game.Beatmaps.Formats; using osu.Game.Beatmaps.Formats;
using osuTK.Graphics; using osuTK.Graphics;
@ -45,5 +46,13 @@ public LegacyManiaSkinConfiguration(int keys)
ColumnLineWidth.AsSpan().Fill(2); ColumnLineWidth.AsSpan().Fill(2);
ColumnWidth.AsSpan().Fill(DEFAULT_COLUMN_SIZE); ColumnWidth.AsSpan().Fill(DEFAULT_COLUMN_SIZE);
} }
private float? minimumColumnWidth;
public float MinimumColumnWidth
{
get => minimumColumnWidth ?? ColumnWidth.Min();
set => minimumColumnWidth = value;
}
} }
} }

View File

@ -36,6 +36,7 @@ public enum LegacyManiaSkinConfigurationLookups
HoldNoteBodyImage, HoldNoteBodyImage,
ExplosionImage, ExplosionImage,
ExplosionScale, ExplosionScale,
ColumnLineColour ColumnLineColour,
MinimumColumnWidth
} }
} }

View File

@ -106,6 +106,10 @@ private void flushPendingLines()
case "LightingNWidth": case "LightingNWidth":
parseArrayValue(pair.Value, currentConfig.ExplosionWidth); parseArrayValue(pair.Value, currentConfig.ExplosionWidth);
break; break;
case "WidthForNoteHeightScale":
currentConfig.MinimumColumnWidth = float.Parse(pair.Value, CultureInfo.InvariantCulture) * LegacyManiaSkinConfiguration.POSITION_SCALE_FACTOR;
break;
} }
} }

View File

@ -207,6 +207,9 @@ private IBindable<TValue> lookupForMania<TValue>(LegacyManiaSkinConfigurationLoo
case LegacyManiaSkinConfigurationLookups.ColumnLineColour: case LegacyManiaSkinConfigurationLookups.ColumnLineColour:
return SkinUtils.As<TValue>(getCustomColour(existing, "ColourColumnLine")); return SkinUtils.As<TValue>(getCustomColour(existing, "ColourColumnLine"));
case LegacyManiaSkinConfigurationLookups.MinimumColumnWidth:
return SkinUtils.As<TValue>(new Bindable<float>(existing.MinimumColumnWidth));
} }
return null; return null;