// 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 osu.Game.Database; #nullable enable namespace osu.Game.Rulesets { /// /// A representation of a ruleset's metadata. /// public interface IRulesetInfo : IHasOnlineID { /// /// The user-exposed name of this ruleset. /// string Name { get; } /// /// An acronym defined by the ruleset that can be used as a permanent identifier. /// string ShortName { get; } /// /// A string representation of this ruleset, to be used with reflection to instantiate the ruleset represented by this metadata. /// string InstantiationInfo { get; } public Ruleset? CreateInstance() { var type = Type.GetType(InstantiationInfo); if (type == null) return null; var ruleset = Activator.CreateInstance(type) as Ruleset; // overwrite the pre-populated RulesetInfo with a potentially database attached copy. // TODO: figure if we still want/need this after switching to realm. // ruleset.RulesetInfo = this; return ruleset; } } }