// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using System.Collections.Generic; using System.Linq; using osu.Game.Beatmaps.Formats; using osuTK.Graphics; namespace osu.Game.Skinning { public class LegacyManiaSkinConfiguration : IHasCustomColours { /// /// Conversion factor from converting legacy positioning values (based in x480 dimensions) to x768. /// public const float POSITION_SCALE_FACTOR = 1.6f; /// /// Size of a legacy column in the default skin, used for determining relative scale factors. /// public const float DEFAULT_COLUMN_SIZE = 30 * POSITION_SCALE_FACTOR; public readonly int Keys; public Dictionary CustomColours { get; set; } = new Dictionary(); public Dictionary ImageLookups = new Dictionary(); public readonly float[] ColumnLineWidth; public readonly float[] ColumnSpacing; public readonly float[] ColumnWidth; public readonly float[] ExplosionWidth; public float HitPosition = (480 - 402) * POSITION_SCALE_FACTOR; public float LightPosition = (480 - 413) * POSITION_SCALE_FACTOR; public bool ShowJudgementLine = true; public LegacyManiaSkinConfiguration(int keys) { Keys = keys; ColumnLineWidth = new float[keys + 1]; ColumnSpacing = new float[keys - 1]; ColumnWidth = new float[keys]; ExplosionWidth = new float[keys]; ColumnLineWidth.AsSpan().Fill(2); ColumnWidth.AsSpan().Fill(DEFAULT_COLUMN_SIZE); } private float? minimumColumnWidth; public float MinimumColumnWidth { get => minimumColumnWidth ?? ColumnWidth.Min(); set => minimumColumnWidth = value; } } }