Plugins: Define IPlugin and IPluginOption interfaces
This commit is contained in:
16
Il2CppInspector.Common/Plugins/API/V100/Hooks.cs
Normal file
16
Il2CppInspector.Common/Plugins/API/V100/Hooks.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
Copyright 2020 Katy Coe - http://www.djkaty.com - https://github.com/djkaty
|
||||
|
||||
All rights reserved.
|
||||
*/
|
||||
|
||||
namespace Il2CppInspector.PluginAPI.V100
|
||||
{
|
||||
/// <summary>
|
||||
/// Process global-metadata.dat after it has been loaded into a Metadata object
|
||||
/// </summary>
|
||||
public interface IPostProcessMetadata
|
||||
{
|
||||
void PostProcessMetadata(Metadata metadata);
|
||||
}
|
||||
}
|
||||
47
Il2CppInspector.Common/Plugins/API/V100/IPlugin.cs
Normal file
47
Il2CppInspector.Common/Plugins/API/V100/IPlugin.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
Copyright 2020 Katy Coe - http://www.djkaty.com - https://github.com/djkaty
|
||||
|
||||
All rights reserved.
|
||||
*/
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Il2CppInspector.PluginAPI.V100
|
||||
{
|
||||
/// <summary>
|
||||
/// Core interface that all plugins must implement
|
||||
/// </summary>
|
||||
public interface IPlugin
|
||||
{
|
||||
/// <summary>
|
||||
/// Plugin name for CLI and unique ID
|
||||
/// </summary>
|
||||
public string Id { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Human-readable plugin name
|
||||
/// </summary>
|
||||
public string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Nickname of the plugiin author
|
||||
/// </summary>
|
||||
public string Author { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Human-readable version string for the plugin
|
||||
/// Always use lexical order: version string may be used for updates
|
||||
/// </summary>
|
||||
public string Version { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Description of the plugin
|
||||
/// </summary>
|
||||
public string Description { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Plugin options
|
||||
/// </summary>
|
||||
public List<IPluginOption> Options { get; }
|
||||
}
|
||||
}
|
||||
154
Il2CppInspector.Common/Plugins/API/V100/IPluginOption.cs
Normal file
154
Il2CppInspector.Common/Plugins/API/V100/IPluginOption.cs
Normal file
@@ -0,0 +1,154 @@
|
||||
/*
|
||||
Copyright 2020 Katy Coe - http://www.djkaty.com - https://github.com/djkaty
|
||||
|
||||
All rights reserved.
|
||||
*/
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Il2CppInspector.PluginAPI.V100
|
||||
{
|
||||
/// <summary>
|
||||
/// Interface representing a plugin option
|
||||
/// </summary>
|
||||
public interface IPluginOption
|
||||
{
|
||||
/// <summary>
|
||||
/// Option name for CLI and unique ID
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Option description for GUI
|
||||
/// </summary>
|
||||
public string Description { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// True if the setting is required for the plugin to function, false if optional
|
||||
/// Optional by default
|
||||
/// </summary>
|
||||
public bool Required { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The default value of the option, if any
|
||||
/// Becomes the current value of the option when supplied by the user
|
||||
/// </summary>
|
||||
public object Value { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Defines how to display lists of choices in the GUI
|
||||
/// Dropdown for a dropdown box, List for a list of radio buttons
|
||||
/// </summary>
|
||||
public enum PluginOptionChoiceStyle
|
||||
{
|
||||
Dropdown,
|
||||
List
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Defines how to display and parse numbers in the CLI and GUI
|
||||
/// Decimal for regular numbers, Hex for hexadecimal strings
|
||||
/// </summary>
|
||||
public enum PluginOptionNumberStyle
|
||||
{
|
||||
Decimal,
|
||||
Hex
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The base option from which all other options are derived
|
||||
/// </summary>
|
||||
public abstract class PluginOption<T> : IPluginOption
|
||||
{
|
||||
/// <summary>
|
||||
/// The name of the option as it will be supplied in an argument on the command-line
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// A description of what the option does
|
||||
/// </summary>
|
||||
public string Description { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// True if the option must be specified, false if optional
|
||||
/// </summary>
|
||||
public bool Required { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// When created, the default value of the option
|
||||
/// During plugin execution, the current value of the option
|
||||
/// </summary>
|
||||
object IPluginOption.Value { get => Value; set => Value = (T) value; }
|
||||
public T Value { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Numeric type option (for internal use only)
|
||||
/// </summary>
|
||||
public interface IPluginOptionNumber
|
||||
{
|
||||
/// <summary>
|
||||
/// The style of the number
|
||||
/// </summary>
|
||||
public PluginOptionNumberStyle Style { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The value of the number
|
||||
/// </summary>
|
||||
object Value { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Option representing a text string
|
||||
/// </summary>
|
||||
public class PluginOptionText : PluginOption<string> { }
|
||||
|
||||
/// <summary>
|
||||
/// Option representing a file path
|
||||
/// </summary>
|
||||
public class PluginOptionFilePath : PluginOption<string> { }
|
||||
|
||||
/// <summary>
|
||||
/// And option representing boolean true or false (yes/no, on/off etc.)
|
||||
/// </summary>
|
||||
public class PluginOptionBoolean : PluginOption<bool> { }
|
||||
|
||||
/// <summary>
|
||||
/// Option representing a number
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The type of the number</typeparam>
|
||||
public class PluginOptionNumber<T> : PluginOption<T>, IPluginOptionNumber where T : struct
|
||||
{
|
||||
/// <summary>
|
||||
/// Decimal for normal numbers
|
||||
/// Hex to display and parse numbers as hex in the CLI and GUI
|
||||
/// </summary>
|
||||
public PluginOptionNumberStyle Style { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The value of the number
|
||||
/// </summary>
|
||||
object IPluginOptionNumber.Value { get => Value; set => Value = (T) value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Option representing a single choice from a list of choices
|
||||
/// </summary>
|
||||
public class PluginOptionChoice<T> : PluginOption<T>
|
||||
{
|
||||
/// <summary>
|
||||
/// List of items to choose from
|
||||
/// The Keys are the actual values and those supplied via the CLI
|
||||
/// The Values are descriptions of each value shown in the GUI
|
||||
/// </summary>
|
||||
public Dictionary<T, string> Choices { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Dropdown to display the list as a drop-down box in the GUI
|
||||
/// List to display the list as a set of grouped radio buttons in the GUI
|
||||
/// </summary>
|
||||
public PluginOptionChoiceStyle Style { get; set; }
|
||||
}
|
||||
}
|
||||
30
Il2CppInspector.Common/Plugins/API/V101/Adapter.cs
Normal file
30
Il2CppInspector.Common/Plugins/API/V101/Adapter.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
Copyright 2020 Katy Coe - http://www.djkaty.com - https://github.com/djkaty
|
||||
|
||||
All rights reserved.
|
||||
*/
|
||||
|
||||
/// This is an example for future use of how to enable backwards-compatibility
|
||||
/// by allowing newer versions of Il2CppInspector to load plugins made with older API versions
|
||||
|
||||
using System.Collections.Generic;
|
||||
/*
|
||||
namespace Il2CppInspector.PluginAPI.V101
|
||||
{
|
||||
/// <summary>
|
||||
/// Converts a V100 plugin to a V101 plugin
|
||||
/// </summary>
|
||||
public class Adapter : IPlugin
|
||||
{
|
||||
private V100.IPlugin plugin;
|
||||
public Adapter(V100.IPlugin plugin) => this.plugin = plugin;
|
||||
|
||||
// Fill in missing interface contract
|
||||
public string Id => plugin.Id;
|
||||
public string Name => plugin.Name;
|
||||
public string Version => plugin.Version;
|
||||
public string Description => plugin.Description;
|
||||
public List<V100.IPluginOption> Options => plugin.Options;
|
||||
}
|
||||
}
|
||||
*/
|
||||
25
Il2CppInspector.Common/Plugins/API/V101/IPlugin.cs
Normal file
25
Il2CppInspector.Common/Plugins/API/V101/IPlugin.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
Copyright 2020 Katy Coe - http://www.djkaty.com - https://github.com/djkaty
|
||||
|
||||
All rights reserved.
|
||||
*/
|
||||
|
||||
/// This is an example for future use of how to create a new backwards-compatible API version
|
||||
|
||||
using System.Collections.Generic;
|
||||
/*
|
||||
namespace Il2CppInspector.PluginAPI.V101
|
||||
{
|
||||
/// <summary>
|
||||
/// Core interface that all plugins must implement
|
||||
/// </summary>
|
||||
public interface IPlugin : V100.IPlugin
|
||||
{
|
||||
/// <summary>
|
||||
/// Human-readable version string
|
||||
/// Used for plugin selection and updates
|
||||
/// </summary>
|
||||
public string SoneNewProperty { get; }
|
||||
}
|
||||
}
|
||||
*/
|
||||
Reference in New Issue
Block a user