using System; namespace BizHawk.Client.ApiHawk { /// /// This class holds logic interaction for the BizHawkExternalToolUsageAttribute /// This attribute helps ApiHawk to know how a tool can be enabled or not /// [AttributeUsage(AttributeTargets.Assembly)] public sealed class BizHawkExternalToolUsageAttribute : Attribute { #region cTor(s) /// /// Initialize a new instance of /// /// i.e. what your external tool is for /// that your external tool is used for /// The game hash, unique game ID (see in the game database) public BizHawkExternalToolUsageAttribute(BizHawkExternalToolUsage usage, CoreSystem system, string gameHash) { if (usage == BizHawkExternalToolUsage.EmulatorSpecific && system == CoreSystem.Null) { throw new InvalidOperationException("A system must be set"); } if (usage == BizHawkExternalToolUsage.GameSpecific && gameHash.Trim() == "") { throw new InvalidOperationException("A game hash must be set"); } ToolUsage = usage; System = system; GameHash = gameHash; } /// /// Initialize a new instance of /// /// i.e. what your external tool is for /// that your external tool is used for public BizHawkExternalToolUsageAttribute(BizHawkExternalToolUsage usage, CoreSystem system) :this(usage, system, "") {} /// /// Initialize a new instance of /// public BizHawkExternalToolUsageAttribute() :this(BizHawkExternalToolUsage.Global, CoreSystem.Null, "") { } #endregion #region Properties /// /// Gets the specific system used by the external tool /// public CoreSystem System { get; } /// /// Gets the specific game (hash) used by the external tool /// public string GameHash { get; } /// /// Gets the tool usage /// public BizHawkExternalToolUsage ToolUsage { get; } #endregion } }