Skip to content

Commit

Permalink
Fix deserialise failing with some old skins
Browse files Browse the repository at this point in the history
  • Loading branch information
peppy committed Aug 23, 2024
1 parent 3943fe9 commit 885d832
Showing 1 changed file with 24 additions and 0 deletions.
24 changes: 24 additions & 0 deletions osu.Game/Skinning/Skin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -248,9 +248,33 @@ public void UpdateDrawableTarget(SkinnableContainer targetContainer)
applyMigration(layout, target, i);

layout.Version = SkinLayoutInfo.LATEST_VERSION;

foreach (var kvp in layout.DrawableInfo.ToArray())
{
foreach (var di in kvp.Value)
{
if (!isValidDrawable(di))
layout.DrawableInfo[kvp.Key] = kvp.Value.Where(i => i.Type != di.Type).ToArray();
}
}

return layout;
}

private bool isValidDrawable(SerialisedDrawableInfo di)
{
if (!typeof(ISerialisableDrawable).IsAssignableFrom(di.Type))
return false;

foreach (var child in di.Children)
{
if (!isValidDrawable(child))
return false;
}

return true;
}

private void applyMigration(SkinLayoutInfo layout, GlobalSkinnableContainers target, int version)
{
switch (version)
Expand Down

0 comments on commit 885d832

Please sign in to comment.