private IBindable <string>?getManiaImage(LegacyManiaSkinConfiguration source, string lookup) => source.ImageLookups.TryGetValue(lookup, out string image) ? new Bindable <string>(image) : null;
private IBindable <TValue>?lookupForMania <TValue>(LegacyManiaSkinConfigurationLookup maniaLookup) { if (!maniaConfigurations.TryGetValue(maniaLookup.Keys, out var existing)) { maniaConfigurations[maniaLookup.Keys] = existing = new LegacyManiaSkinConfiguration(maniaLookup.Keys); } switch (maniaLookup.Lookup) { case LegacyManiaSkinConfigurationLookups.ColumnWidth: Debug.Assert(maniaLookup.TargetColumn != null); return(SkinUtils.As <TValue>(new Bindable <float>(existing.ColumnWidth[maniaLookup.TargetColumn.Value]))); case LegacyManiaSkinConfigurationLookups.ColumnSpacing: Debug.Assert(maniaLookup.TargetColumn != null); return(SkinUtils.As <TValue>(new Bindable <float>(existing.ColumnSpacing[maniaLookup.TargetColumn.Value]))); case LegacyManiaSkinConfigurationLookups.HitPosition: return(SkinUtils.As <TValue>(new Bindable <float>(existing.HitPosition))); case LegacyManiaSkinConfigurationLookups.ScorePosition: return(SkinUtils.As <TValue>(new Bindable <float>(existing.ScorePosition))); case LegacyManiaSkinConfigurationLookups.LightPosition: return(SkinUtils.As <TValue>(new Bindable <float>(existing.LightPosition))); case LegacyManiaSkinConfigurationLookups.ShowJudgementLine: return(SkinUtils.As <TValue>(new Bindable <bool>(existing.ShowJudgementLine))); case LegacyManiaSkinConfigurationLookups.ExplosionImage: return(SkinUtils.As <TValue>(getManiaImage(existing, "LightingN"))); case LegacyManiaSkinConfigurationLookups.ExplosionScale: Debug.Assert(maniaLookup.TargetColumn != null); if (GetConfig <SkinConfiguration.LegacySetting, decimal>(SkinConfiguration.LegacySetting.Version)?.Value < 2.5m) { return(SkinUtils.As <TValue>(new Bindable <float>(1))); } if (existing.ExplosionWidth[maniaLookup.TargetColumn.Value] != 0) { return(SkinUtils.As <TValue>(new Bindable <float>(existing.ExplosionWidth[maniaLookup.TargetColumn.Value] / LegacyManiaSkinConfiguration.DEFAULT_COLUMN_SIZE))); } return(SkinUtils.As <TValue>(new Bindable <float>(existing.ColumnWidth[maniaLookup.TargetColumn.Value] / LegacyManiaSkinConfiguration.DEFAULT_COLUMN_SIZE))); case LegacyManiaSkinConfigurationLookups.ColumnLineColour: return(SkinUtils.As <TValue>(getCustomColour(existing, "ColourColumnLine"))); case LegacyManiaSkinConfigurationLookups.JudgementLineColour: return(SkinUtils.As <TValue>(getCustomColour(existing, "ColourJudgementLine"))); case LegacyManiaSkinConfigurationLookups.ColumnBackgroundColour: Debug.Assert(maniaLookup.TargetColumn != null); return(SkinUtils.As <TValue>(getCustomColour(existing, $"Colour{maniaLookup.TargetColumn + 1}"))); case LegacyManiaSkinConfigurationLookups.ColumnLightColour: Debug.Assert(maniaLookup.TargetColumn != null); return(SkinUtils.As <TValue>(getCustomColour(existing, $"ColourLight{maniaLookup.TargetColumn + 1}"))); case LegacyManiaSkinConfigurationLookups.MinimumColumnWidth: return(SkinUtils.As <TValue>(new Bindable <float>(existing.MinimumColumnWidth))); case LegacyManiaSkinConfigurationLookups.NoteImage: Debug.Assert(maniaLookup.TargetColumn != null); return(SkinUtils.As <TValue>(getManiaImage(existing, $"NoteImage{maniaLookup.TargetColumn}"))); case LegacyManiaSkinConfigurationLookups.HoldNoteHeadImage: Debug.Assert(maniaLookup.TargetColumn != null); return(SkinUtils.As <TValue>(getManiaImage(existing, $"NoteImage{maniaLookup.TargetColumn}H"))); case LegacyManiaSkinConfigurationLookups.HoldNoteTailImage: Debug.Assert(maniaLookup.TargetColumn != null); return(SkinUtils.As <TValue>(getManiaImage(existing, $"NoteImage{maniaLookup.TargetColumn}T"))); case LegacyManiaSkinConfigurationLookups.HoldNoteBodyImage: Debug.Assert(maniaLookup.TargetColumn != null); return(SkinUtils.As <TValue>(getManiaImage(existing, $"NoteImage{maniaLookup.TargetColumn}L"))); case LegacyManiaSkinConfigurationLookups.HoldNoteLightImage: return(SkinUtils.As <TValue>(getManiaImage(existing, "LightingL"))); case LegacyManiaSkinConfigurationLookups.HoldNoteLightScale: Debug.Assert(maniaLookup.TargetColumn != null); if (GetConfig <SkinConfiguration.LegacySetting, decimal>(SkinConfiguration.LegacySetting.Version)?.Value < 2.5m) { return(SkinUtils.As <TValue>(new Bindable <float>(1))); } if (existing.HoldNoteLightWidth[maniaLookup.TargetColumn.Value] != 0) { return(SkinUtils.As <TValue>(new Bindable <float>(existing.HoldNoteLightWidth[maniaLookup.TargetColumn.Value] / LegacyManiaSkinConfiguration.DEFAULT_COLUMN_SIZE))); } return(SkinUtils.As <TValue>(new Bindable <float>(existing.ColumnWidth[maniaLookup.TargetColumn.Value] / LegacyManiaSkinConfiguration.DEFAULT_COLUMN_SIZE))); case LegacyManiaSkinConfigurationLookups.KeyImage: Debug.Assert(maniaLookup.TargetColumn != null); return(SkinUtils.As <TValue>(getManiaImage(existing, $"KeyImage{maniaLookup.TargetColumn}"))); case LegacyManiaSkinConfigurationLookups.KeyImageDown: Debug.Assert(maniaLookup.TargetColumn != null); return(SkinUtils.As <TValue>(getManiaImage(existing, $"KeyImage{maniaLookup.TargetColumn}D"))); case LegacyManiaSkinConfigurationLookups.LeftStageImage: return(SkinUtils.As <TValue>(getManiaImage(existing, "StageLeft"))); case LegacyManiaSkinConfigurationLookups.RightStageImage: return(SkinUtils.As <TValue>(getManiaImage(existing, "StageRight"))); case LegacyManiaSkinConfigurationLookups.BottomStageImage: return(SkinUtils.As <TValue>(getManiaImage(existing, "StageBottom"))); case LegacyManiaSkinConfigurationLookups.LightImage: return(SkinUtils.As <TValue>(getManiaImage(existing, "StageLight"))); case LegacyManiaSkinConfigurationLookups.HitTargetImage: return(SkinUtils.As <TValue>(getManiaImage(existing, "StageHint"))); case LegacyManiaSkinConfigurationLookups.LeftLineWidth: Debug.Assert(maniaLookup.TargetColumn != null); return(SkinUtils.As <TValue>(new Bindable <float>(existing.ColumnLineWidth[maniaLookup.TargetColumn.Value]))); case LegacyManiaSkinConfigurationLookups.RightLineWidth: Debug.Assert(maniaLookup.TargetColumn != null); return(SkinUtils.As <TValue>(new Bindable <float>(existing.ColumnLineWidth[maniaLookup.TargetColumn.Value + 1]))); case LegacyManiaSkinConfigurationLookups.Hit0: case LegacyManiaSkinConfigurationLookups.Hit50: case LegacyManiaSkinConfigurationLookups.Hit100: case LegacyManiaSkinConfigurationLookups.Hit200: case LegacyManiaSkinConfigurationLookups.Hit300: case LegacyManiaSkinConfigurationLookups.Hit300g: return(SkinUtils.As <TValue>(getManiaImage(existing, maniaLookup.Lookup.ToString()))); case LegacyManiaSkinConfigurationLookups.KeysUnderNotes: return(SkinUtils.As <TValue>(new Bindable <bool>(existing.KeysUnderNotes))); } return(null); }