diff --git a/osu.Game/Skinning/SerialisedDrawableInfo.cs b/osu.Game/Skinning/SerialisedDrawableInfo.cs
index 12f6d3ac7e..686fff1e8b 100644
--- a/osu.Game/Skinning/SerialisedDrawableInfo.cs
+++ b/osu.Game/Skinning/SerialisedDrawableInfo.cs
@@ -11,6 +11,7 @@ using osu.Framework.Graphics.Containers;
using osu.Framework.Logging;
using osu.Game.Configuration;
using osu.Game.Extensions;
+using osu.Game.Rulesets;
using osuTK;
namespace osu.Game.Skinning
@@ -100,13 +101,18 @@ namespace osu.Game.Skinning
}
}
- public static Type[] GetAllAvailableDrawables()
+ ///
+ /// Retrieve all types available which support serialisation.
+ ///
+ /// The ruleset to filter results to. If null, global components will be returned instead.
+ public static Type[] GetAllAvailableDrawables(RulesetInfo? ruleset = null)
{
- return typeof(OsuGame).Assembly.GetTypes()
- .Where(t => !t.IsInterface && !t.IsAbstract)
- .Where(t => typeof(ISerialisableDrawable).IsAssignableFrom(t))
- .OrderBy(t => t.Name)
- .ToArray();
+ return (ruleset?.CreateInstance().GetType() ?? typeof(OsuGame))
+ .Assembly.GetTypes()
+ .Where(t => !t.IsInterface && !t.IsAbstract)
+ .Where(t => typeof(ISerialisableDrawable).IsAssignableFrom(t))
+ .OrderBy(t => t.Name)
+ .ToArray();
}
}
}