mirror of
https://github.com/All-Of-Us-Mods/MiraAPI.git
synced 2026-10-24 16:46:45 +00:00
Compare commits
5
Commits
id-builder
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b79c14ce50 | ||
|
|
17dafadec8 | ||
|
|
f9274eda09 | ||
|
|
10daf01a55 | ||
|
|
1daffd7560 |
No files matched your search
@@ -104,3 +104,6 @@ dotnet_diagnostic.S1244.severity = none
|
|||||||
|
|
||||||
# S2325: Methods and properties that don't access instance data should be static
|
# S2325: Methods and properties that don't access instance data should be static
|
||||||
dotnet_diagnostic.S2325.severity = none
|
dotnet_diagnostic.S2325.severity = none
|
||||||
|
|
||||||
|
# IDE0005: Using directive is unnecessary.
|
||||||
|
dotnet_diagnostic.IDE0005.severity = warning
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
|
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
|
||||||
|
|
||||||
<VersionPrefix>0.5.0</VersionPrefix>
|
<VersionPrefix>0.6.0</VersionPrefix>
|
||||||
<VersionSuffix>dev</VersionSuffix>
|
<VersionSuffix>dev</VersionSuffix>
|
||||||
|
|
||||||
<Authors>All Of Us, XtraCube, Angxl</Authors>
|
<Authors>All Of Us, XtraCube, Angxl</Authors>
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
using MiraAPI.Utilities.Assets;
|
using System.Reflection;
|
||||||
|
using MiraAPI.Utilities.Assets;
|
||||||
|
|
||||||
namespace MiraAPI.Example;
|
namespace MiraAPI.Example;
|
||||||
|
|
||||||
public static class ExampleAssets
|
public static class ExampleAssets
|
||||||
{
|
{
|
||||||
public static LoadableResourceAsset ExampleButton { get; } = new("MiraAPI.Example.Resources.ExampleButton.png");
|
private static readonly Assembly _assembly = typeof(MiraAssets).Assembly;
|
||||||
public static LoadableResourceAsset CallMeetingButton { get; } = new("MiraAPI.Example.Resources.CallMeeting.png");
|
|
||||||
|
public static LoadableResourceAsset ExampleButton { get; } = new("MiraAPI.Example.Resources.ExampleButton.png", _assembly);
|
||||||
|
public static LoadableResourceAsset CallMeetingButton { get; } = new("MiraAPI.Example.Resources.CallMeeting.png", _assembly);
|
||||||
|
|
||||||
// Credit to EpicHorrors for the teleport button asset.
|
// Credit to EpicHorrors for the teleport button asset.
|
||||||
public static LoadableResourceAsset TeleportButton { get; } = new("MiraAPI.Example.Resources.TeleportButton.png");
|
public static LoadableResourceAsset TeleportButton { get; } = new("MiraAPI.Example.Resources.TeleportButton.png", _assembly);
|
||||||
public static LoadableResourceAsset SharpshootButton { get; } = new("MiraAPI.Example.Resources.SharpshootButton.png");
|
public static LoadableResourceAsset SharpshootButton { get; } = new("MiraAPI.Example.Resources.SharpshootButton.png", _assembly);
|
||||||
public static LoadableResourceAsset Banner { get; } = new("MiraAPI.Example.Resources.FortniteBanner.jpeg");
|
public static LoadableResourceAsset Banner { get; } = new("MiraAPI.Example.Resources.FortniteBanner.jpeg", _assembly);
|
||||||
}
|
}
|
||||||
@@ -31,7 +31,7 @@ public static class ExampleEventHandlers
|
|||||||
|
|
||||||
MiraEventManager.RegisterEventHandler<CompleteTaskEvent>(@event =>
|
MiraEventManager.RegisterEventHandler<CompleteTaskEvent>(@event =>
|
||||||
{
|
{
|
||||||
Logger<ExamplePlugin>.Info($"{@event.Player.Data.PlayerName} completed {@event.Task.TaskType.ToString()}");
|
Logger<ExamplePlugin>.Info($"{@event.Player.Data.PlayerName} completed {@event.Task.TaskType}");
|
||||||
});
|
});
|
||||||
|
|
||||||
// You can also unregister event handlers using the handle returned from RegisterEventHandler.
|
// You can also unregister event handlers using the handle returned from RegisterEventHandler.
|
||||||
@@ -89,7 +89,7 @@ public static class ExampleEventHandlers
|
|||||||
[RegisterEvent]
|
[RegisterEvent]
|
||||||
public static void UpdateSystemEventHandler(UpdateSystemEvent @event)
|
public static void UpdateSystemEventHandler(UpdateSystemEvent @event)
|
||||||
{
|
{
|
||||||
Logger<ExamplePlugin>.Error(@event.SystemType.ToString());
|
Logger<ExamplePlugin>.Error(@event.SystemType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Example event handler
|
// Example event handler
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public static class MiraEventManager
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Error($"Error invoking event handler for {typeof(T).Name}: {ex.ToString()}");
|
Error($"Error invoking event handler for {typeof(T).Name}: {ex}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,7 +65,7 @@ public static class MiraEventManager
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Error($"Error invoking event handler for {type.Name}: {ex.ToString()}");
|
Error($"Error invoking event handler for {type.Name}: {ex}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ public partial class MiraApiPlugin : BasePlugin, IMiraPlugin
|
|||||||
PluginManager = new MiraPluginManager();
|
PluginManager = new MiraPluginManager();
|
||||||
PluginManager.Initialize(this, this);
|
PluginManager.Initialize(this, this);
|
||||||
|
|
||||||
MiraLocaleManager.Register("mira.api");
|
MiraLocaleManager.Register("mira.api", typeof(MiraApiPlugin).Assembly);
|
||||||
LocalizationManager.Register(new MiraLocalizationProvider());
|
LocalizationManager.Register(new MiraLocalizationProvider());
|
||||||
|
|
||||||
IL2CPPChainloader.Instance.Finished +=
|
IL2CPPChainloader.Instance.Finished +=
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public class ModifierComponent(IntPtr cppPtr) : MonoBehaviour(cppPtr)
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Error($"Error while deactivating modifier {modifier.ModifierName}: {e.ToString()}");
|
Error($"Error while deactivating modifier {modifier.ModifierName}: {e}");
|
||||||
}
|
}
|
||||||
|
|
||||||
Modifiers.Remove(modifier);
|
Modifiers.Remove(modifier);
|
||||||
@@ -95,7 +95,7 @@ public class ModifierComponent(IntPtr cppPtr) : MonoBehaviour(cppPtr)
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Error($"Error while activating modifier {modifier.ModifierName}: {e.ToString()}");
|
Error($"Error while activating modifier {modifier.ModifierName}: {e}");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (modifier is TimedModifier { AutoStart: true } timer)
|
if (modifier is TimedModifier { AutoStart: true } timer)
|
||||||
@@ -122,7 +122,7 @@ public class ModifierComponent(IntPtr cppPtr) : MonoBehaviour(cppPtr)
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Error($"Error while (fixed) updating modifier {modifier.ModifierName}: {e.ToString()}");
|
Error($"Error while (fixed) updating modifier {modifier.ModifierName}: {e}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,7 +153,7 @@ public class ModifierComponent(IntPtr cppPtr) : MonoBehaviour(cppPtr)
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Error($"Error while updating modifier {modifier.ModifierName}: {e.ToString()}");
|
Error($"Error while updating modifier {modifier.ModifierName}: {e}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using System.Globalization;
|
using MiraAPI.GameModes;
|
||||||
using MiraAPI.GameModes;
|
|
||||||
using MiraAPI.PluginLoading;
|
using MiraAPI.PluginLoading;
|
||||||
|
|
||||||
namespace MiraAPI.Modifiers.Types;
|
namespace MiraAPI.Modifiers.Types;
|
||||||
|
|||||||
@@ -571,7 +571,7 @@ public static class CustomMurderRpc
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Error($"Error with kill animation: {e.ToString()}");
|
Error($"Error with kill animation: {e}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -705,7 +705,7 @@ public static class CustomMurderRpc
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Error($"Error with kill animation: {e.ToString()}");
|
Error($"Error with kill animation: {e}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -186,9 +186,11 @@ public static class TaskAdderPatches
|
|||||||
systemTypes = SystemTypes.UpperEngine;
|
systemTypes = SystemTypes.UpperEngine;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!folders.TryGetValue(systemTypes.ToString(), out var taskFolder3))
|
var systemType = systemTypes.ToString();
|
||||||
|
|
||||||
|
if (!folders.TryGetValue(systemType, out var taskFolder3))
|
||||||
{
|
{
|
||||||
taskFolder3 = folders[systemTypes.ToString()] = Object.Instantiate(__instance.RootFolderPrefab, __instance.transform);
|
taskFolder3 = folders[systemType] = Object.Instantiate(__instance.RootFolderPrefab, __instance.transform);
|
||||||
taskFolder3.SetFolderColor(TaskFolder.FolderColor.Tan);
|
taskFolder3.SetFolderColor(TaskFolder.FolderColor.Tan);
|
||||||
taskFolder3.gameObject.SetActive(false);
|
taskFolder3.gameObject.SetActive(false);
|
||||||
taskFolder3.FolderName = systemTypes == SystemTypes.UpperEngine
|
taskFolder3.FolderName = systemTypes == SystemTypes.UpperEngine
|
||||||
|
|||||||
@@ -25,6 +25,26 @@ public class MiraPluginInfo
|
|||||||
PluginId = info.Metadata.GUID;
|
PluginId = info.Metadata.GUID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the plugin's ID, as defined in the plugin's BepInEx metadata.
|
||||||
|
/// </summary>
|
||||||
|
public string PluginId { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the plugin's instance as an <see cref="IMiraPlugin"/>.
|
||||||
|
/// </summary>
|
||||||
|
public IMiraPlugin MiraPlugin { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the plugin's BepInEx metadata.
|
||||||
|
/// </summary>
|
||||||
|
public PluginInfo PluginInfo { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the plugin's <see cref="ConfigFile"/>.
|
||||||
|
/// </summary>
|
||||||
|
public ConfigFile PluginConfig { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a <see cref="IReadOnlyCollection{T}"/> of this <see cref="IMiraPlugin"/>'s <see cref="BaseModifier"/>s. This is not safe for <see cref="BaseModifier"/>s with constructors.
|
/// Gets a <see cref="IReadOnlyCollection{T}"/> of this <see cref="IMiraPlugin"/>'s <see cref="BaseModifier"/>s. This is not safe for <see cref="BaseModifier"/>s with constructors.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -45,15 +65,6 @@ public class MiraPluginInfo
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public ReadOnlyDictionary<ushort, RoleBehaviour> Roles { get; private set; } = null!;
|
public ReadOnlyDictionary<ushort, RoleBehaviour> Roles { get; private set; } = null!;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets a read only dictionary of Game Mode IDs and the AbstractGameMode object they are associated with.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>Read only dictionary of IDs and Game Modes.</returns>
|
|
||||||
public ReadOnlyDictionary<uint, AbstractGameMode> GetModes()
|
|
||||||
{
|
|
||||||
return new ReadOnlyDictionary<uint, AbstractGameMode>(GameModes);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a <see cref="IReadOnlyCollection{T}"/> of this <see cref="IMiraPlugin"/>'s <see cref="CustomActionButton"/>.
|
/// Gets a <see cref="IReadOnlyCollection{T}"/> of this <see cref="IMiraPlugin"/>'s <see cref="CustomActionButton"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -74,6 +85,15 @@ public class MiraPluginInfo
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public IReadOnlyCollection<OptionPreset> Presets { get; internal set; } = null!;
|
public IReadOnlyCollection<OptionPreset> Presets { get; internal set; } = null!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a read only dictionary of Game Mode IDs and the AbstractGameMode object they are associated with.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Read only dictionary of IDs and Game Modes.</returns>
|
||||||
|
public ReadOnlyDictionary<uint, AbstractGameMode> GetModes()
|
||||||
|
{
|
||||||
|
return new ReadOnlyDictionary<uint, AbstractGameMode>(GameModes);
|
||||||
|
}
|
||||||
|
|
||||||
internal void SavePublicCollections()
|
internal void SavePublicCollections()
|
||||||
{
|
{
|
||||||
Presets = [.. InternalPresets];
|
Presets = [.. InternalPresets];
|
||||||
@@ -87,39 +107,13 @@ public class MiraPluginInfo
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal List<OptionPreset> InternalPresets { get; } = [];
|
internal List<OptionPreset> InternalPresets { get; } = [];
|
||||||
|
|
||||||
internal List<AbstractOptionGroup> InternalOptionGroups { get; } = [];
|
|
||||||
|
|
||||||
internal List<IModdedOption> InternalOptions { get; } = [];
|
internal List<IModdedOption> InternalOptions { get; } = [];
|
||||||
|
|
||||||
internal List<BaseModifier> InternalModifiers { get; } = [];
|
internal List<BaseModifier> InternalModifiers { get; } = [];
|
||||||
|
internal List<CustomActionButton> InternalButtons { get; } = [];
|
||||||
|
internal List<AbstractOptionGroup> InternalOptionGroups { get; } = [];
|
||||||
|
internal List<MeetingActionButton> InternalMeetingButtons { get; } = [];
|
||||||
|
internal List<TargetedMeetingButton> InternalTargetedMeetingButtons { get; } = [];
|
||||||
|
|
||||||
internal Dictionary<uint, AbstractGameMode> GameModes { get; } = [];
|
internal Dictionary<uint, AbstractGameMode> GameModes { get; } = [];
|
||||||
internal Dictionary<ushort, RoleBehaviour> InternalRoles { get; } = [];
|
internal Dictionary<ushort, RoleBehaviour> InternalRoles { get; } = [];
|
||||||
|
|
||||||
internal List<CustomActionButton> InternalButtons { get; } = [];
|
|
||||||
|
|
||||||
internal List<TargetedMeetingButton> InternalTargetedMeetingButtons { get; } = [];
|
|
||||||
|
|
||||||
internal List<MeetingActionButton> InternalMeetingButtons { get; } = [];
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the plugin's ID, as defined in the plugin's BepInEx metadata.
|
|
||||||
/// </summary>
|
|
||||||
public string PluginId { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the plugin's instance as an <see cref="IMiraPlugin"/>.
|
|
||||||
/// </summary>
|
|
||||||
public IMiraPlugin MiraPlugin { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the plugin's BepInEx metadata.
|
|
||||||
/// </summary>
|
|
||||||
public PluginInfo PluginInfo { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the plugin's <see cref="ConfigFile"/>.
|
|
||||||
/// </summary>
|
|
||||||
public ConfigFile PluginConfig { get; }
|
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,7 @@ using System.Collections.ObjectModel;
|
|||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using BepInEx;
|
||||||
using BepInEx.Configuration;
|
using BepInEx.Configuration;
|
||||||
using BepInEx.Unity.IL2CPP;
|
using BepInEx.Unity.IL2CPP;
|
||||||
using HarmonyLib;
|
using HarmonyLib;
|
||||||
@@ -24,7 +25,6 @@ using MiraAPI.Roles;
|
|||||||
using MiraAPI.Translation;
|
using MiraAPI.Translation;
|
||||||
using MiraAPI.Utilities;
|
using MiraAPI.Utilities;
|
||||||
using Reactor.Networking;
|
using Reactor.Networking;
|
||||||
using Reactor.Utilities;
|
|
||||||
|
|
||||||
namespace MiraAPI.PluginLoading;
|
namespace MiraAPI.PluginLoading;
|
||||||
|
|
||||||
@@ -49,100 +49,14 @@ public sealed class MiraPluginManager
|
|||||||
Instance = this;
|
Instance = this;
|
||||||
CustomGameModeManager.RegisterDefaultMode();
|
CustomGameModeManager.RegisterDefaultMode();
|
||||||
CustomGameModeManager.GetAndSetGameMode();
|
CustomGameModeManager.GetAndSetGameMode();
|
||||||
|
|
||||||
if (IL2CPPChainloader.Instance.Plugins.TryGetValue(MiraApiPlugin.Id, out var newPlugin))
|
if (IL2CPPChainloader.Instance.Plugins.TryGetValue(MiraApiPlugin.Id, out var newPlugin))
|
||||||
{
|
{
|
||||||
var assembly = Assembly.GetCallingAssembly();
|
var info = RegisterPlugin(typeof(MiraPluginManager).Assembly, apiPlugin, newPlugin, miraApiPlugin, true);
|
||||||
var info = new MiraPluginInfo(apiPlugin, newPlugin);
|
|
||||||
var roles = new List<Type>();
|
|
||||||
|
|
||||||
var oldConfigSetting = info.PluginConfig.SaveOnConfigSet;
|
|
||||||
info.PluginConfig.SaveOnConfigSet = false;
|
|
||||||
|
|
||||||
foreach (var type in assembly.GetTypes())
|
|
||||||
{
|
|
||||||
if (type.IsAbstract || type.GetCustomAttribute<MiraIgnoreAttribute>() != null)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var method in AccessTools.GetDeclaredMethods(type))
|
|
||||||
{
|
|
||||||
var eventAttribute = method.GetCustomAttribute<RegisterEventAttribute>();
|
|
||||||
if (eventAttribute == null)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!method.IsStatic)
|
|
||||||
{
|
|
||||||
Error($"Event method {method.Name} in {type.Name} must be static.");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var parameters = method.GetParameters();
|
|
||||||
if (parameters.Length != 1 || !parameters[0].ParameterType.IsSubclassOf(typeof(MiraEvent)))
|
|
||||||
{
|
|
||||||
Error($"Invalid event registration method {method.Name} in {type.Name}");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var paramType = parameters[0].ParameterType;
|
|
||||||
MiraEventManager.RegisterEventHandler(paramType, method, eventAttribute.Priority);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterModifier(type, info))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterOptions(type, info))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterLocalTabs(type, miraApiPlugin))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterRole(type, info, out var role))
|
|
||||||
{
|
|
||||||
roles.Add(role);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterButton(type, info))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterGameOver(type))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterGameModeAttribute(type, info))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
RegisterColorClasses(type);
|
|
||||||
RegisterKeybinds(type, miraApiPlugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
info.PluginConfig.Save();
|
|
||||||
info.PluginConfig.SaveOnConfigSet = oldConfigSetting;
|
|
||||||
MiraApiConfig = info.PluginConfig;
|
MiraApiConfig = info.PluginConfig;
|
||||||
|
|
||||||
info.InternalOptionGroups.Sort((x, y) => x.GroupPriority.CompareTo(y.GroupPriority));
|
|
||||||
QueuedRoleRegistrations.Add(info, roles);
|
|
||||||
|
|
||||||
_registeredPlugins.Add(assembly, info);
|
|
||||||
MiraApiPluginInfo = info;
|
MiraApiPluginInfo = info;
|
||||||
|
|
||||||
info.SavePublicCollections();
|
|
||||||
PresetManager.CreateDefaultPreset(info);
|
|
||||||
PresetManager.LoadPresets(info);
|
|
||||||
Info($"Registering Mira API as mod.");
|
Info($"Registering Mira API as mod.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,110 +67,14 @@ public sealed class MiraPluginManager
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var info = new MiraPluginInfo(miraPlugin, pluginInfo);
|
RegisterPlugin(assembly, miraPlugin, pluginInfo, plugin, false);
|
||||||
var roles = new List<Type>();
|
|
||||||
|
|
||||||
var oldConfigSetting = info.PluginConfig.SaveOnConfigSet;
|
|
||||||
info.PluginConfig.SaveOnConfigSet = false;
|
|
||||||
|
|
||||||
foreach (var type in assembly.GetTypes())
|
|
||||||
{
|
|
||||||
if (type.GetCustomAttribute<MiraIgnoreAttribute>() != null)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var method in AccessTools.GetDeclaredMethods(type))
|
|
||||||
{
|
|
||||||
var eventAttribute = method.GetCustomAttribute<RegisterEventAttribute>();
|
|
||||||
if (eventAttribute == null)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!method.IsStatic)
|
|
||||||
{
|
|
||||||
Error($"Event method {method.Name} in {type.Name} must be static.");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var parameters = method.GetParameters();
|
|
||||||
if (parameters.Length != 1 || !parameters[0].ParameterType.IsSubclassOf(typeof(MiraEvent)))
|
|
||||||
{
|
|
||||||
Error($"Invalid event registration method {method.Name} in {type.Name}");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var paramType = parameters[0].ParameterType;
|
|
||||||
MiraEventManager.RegisterEventHandler(paramType, method, eventAttribute.Priority);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterModifier(type, info))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterOptions(type, info))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterLocalTabs(type, plugin))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterRole(type, info, out var role))
|
|
||||||
{
|
|
||||||
roles.Add(role);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterButton(type, info))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterGameOver(type))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterMeetingAbility(type, info))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterTargetedMeetingAbility(type, info))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RegisterGameModeAttribute(type, info))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
RegisterColorClasses(type);
|
|
||||||
RegisterKeybinds(type, plugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
info.PluginConfig.Save();
|
|
||||||
info.PluginConfig.SaveOnConfigSet = oldConfigSetting;
|
|
||||||
|
|
||||||
info.InternalOptionGroups.Sort((x, y) => x.GroupPriority.CompareTo(y.GroupPriority));
|
|
||||||
QueuedRoleRegistrations.Add(info, roles);
|
|
||||||
|
|
||||||
_registeredPlugins.Add(assembly, info);
|
|
||||||
|
|
||||||
info.SavePublicCollections();
|
|
||||||
PresetManager.CreateDefaultPreset(info);
|
|
||||||
PresetManager.LoadPresets(info);
|
|
||||||
Info($"Registering mod {pluginInfo.Metadata.GUID} with Mira API.");
|
Info($"Registering mod {pluginInfo.Metadata.GUID} with Mira API.");
|
||||||
};
|
};
|
||||||
IL2CPPChainloader.Instance.Finished += PaletteManager.RegisterAllColors;
|
|
||||||
IL2CPPChainloader.Instance.Finished += () =>
|
IL2CPPChainloader.Instance.Finished += () =>
|
||||||
{
|
{
|
||||||
|
PaletteManager.RegisterAllColors();
|
||||||
|
|
||||||
// Save all buttons into a read-only collection for easy access
|
// Save all buttons into a read-only collection for easy access
|
||||||
CustomButtonManager.Buttons = new ReadOnlyCollection<CustomActionButton>(CustomButtonManager.CustomButtons);
|
CustomButtonManager.Buttons = new ReadOnlyCollection<CustomActionButton>(CustomButtonManager.CustomButtons);
|
||||||
CustomButtonManager.EventTypes = new ReadOnlyDictionary<Type, Type>(CustomButtonManager.ButtonEventTypes);
|
CustomButtonManager.EventTypes = new ReadOnlyDictionary<Type, Type>(CustomButtonManager.ButtonEventTypes);
|
||||||
@@ -269,9 +87,101 @@ public sealed class MiraPluginManager
|
|||||||
|
|
||||||
ModifierManager.Modifiers = new ReadOnlyCollection<BaseModifier>(ModifierManager.InternalModifiers);
|
ModifierManager.Modifiers = new ReadOnlyCollection<BaseModifier>(ModifierManager.InternalModifiers);
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
RegisterKeybinds(typeof(MiraGlobalKeybinds), PluginSingleton<MiraApiPlugin>.Instance);
|
private MiraPluginInfo RegisterPlugin(Assembly assembly, IMiraPlugin plugin, PluginInfo pluginInfo, BasePlugin basePlugin, bool isMira)
|
||||||
RegisterLocalTabs(typeof(MiraApiSettings), PluginSingleton<MiraApiPlugin>.Instance);
|
{
|
||||||
|
var info = new MiraPluginInfo(plugin, pluginInfo);
|
||||||
|
var roles = new List<Type>();
|
||||||
|
|
||||||
|
var oldConfigSetting = info.PluginConfig.SaveOnConfigSet;
|
||||||
|
info.PluginConfig.SaveOnConfigSet = false;
|
||||||
|
|
||||||
|
ProcessAssemblyTypes(assembly, info, basePlugin, roles, isMira);
|
||||||
|
|
||||||
|
info.PluginConfig.Save();
|
||||||
|
info.PluginConfig.SaveOnConfigSet = oldConfigSetting;
|
||||||
|
|
||||||
|
info.InternalOptionGroups.Sort((x, y) => x.GroupPriority.CompareTo(y.GroupPriority));
|
||||||
|
QueuedRoleRegistrations.Add(info, roles);
|
||||||
|
_registeredPlugins.Add(assembly, info);
|
||||||
|
|
||||||
|
info.SavePublicCollections();
|
||||||
|
PresetManager.CreateDefaultPreset(info);
|
||||||
|
PresetManager.LoadPresets(info);
|
||||||
|
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ProcessAssemblyTypes(Assembly assembly, MiraPluginInfo info, BasePlugin basePlugin, List<Type> roles, bool isMira)
|
||||||
|
{
|
||||||
|
foreach (var type in assembly.GetTypes())
|
||||||
|
{
|
||||||
|
if ((isMira && type.IsAbstract) || type.GetCustomAttribute<MiraIgnoreAttribute>() != null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
RegisterEvents(type);
|
||||||
|
|
||||||
|
if (RegisterModifier(type, info))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (RegisterOptions(type, info))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (RegisterLocalTabs(type, basePlugin))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (RegisterRole(type, info, out var role))
|
||||||
|
{
|
||||||
|
roles.Add(role);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RegisterButton(type, info))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (RegisterGameOver(type))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (RegisterMeetingAbility(type, info))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (RegisterTargetedMeetingAbility(type, info))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (RegisterGameModeAttribute(type, info))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
RegisterColorClasses(type);
|
||||||
|
RegisterKeybinds(type, basePlugin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void RegisterEvents(Type type)
|
||||||
|
{
|
||||||
|
foreach (var method in AccessTools.GetDeclaredMethods(type))
|
||||||
|
{
|
||||||
|
var eventAttribute = method.GetCustomAttribute<RegisterEventAttribute>();
|
||||||
|
|
||||||
|
if (eventAttribute == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!method.IsStatic)
|
||||||
|
{
|
||||||
|
Error($"Event method {method.Name} in {type.Name} must be static.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var parameters = method.GetParameters();
|
||||||
|
if (parameters.Length != 1 || !parameters[0].ParameterType.IsSubclassOf(typeof(MiraEvent)))
|
||||||
|
{
|
||||||
|
Error($"Invalid event registration method {method.Name} in {type.Name}");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var paramType = parameters[0].ParameterType;
|
||||||
|
MiraEventManager.RegisterEventHandler(paramType, method, eventAttribute.Priority);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -358,7 +268,7 @@ public sealed class MiraPluginManager
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Error($"Failed to register options for {type.Name}: {e.ToString()}");
|
Error($"Failed to register options for {type.Name}: {e}");
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -543,7 +453,7 @@ public sealed class MiraPluginManager
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Error($"Failed to register options for {type.Name}: {e.ToString()}");
|
Error($"Failed to register options for {type.Name}: {e}");
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ public static class MiraLocaleManager
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static Dictionary<MiraLanguage, string> LangCultureList { get; } = new()
|
public static Dictionary<MiraLanguage, string> LangCultureList { get; } = new()
|
||||||
{
|
{
|
||||||
|
// Vanilla
|
||||||
{ MiraLanguage.English, "en-US" },
|
{ MiraLanguage.English, "en-US" },
|
||||||
{ MiraLanguage.Latam, "es-419" },
|
{ MiraLanguage.Latam, "es-419" },
|
||||||
{ MiraLanguage.Brazilian, "pt-BR" },
|
{ MiraLanguage.Brazilian, "pt-BR" },
|
||||||
@@ -88,15 +89,17 @@ public static class MiraLocaleManager
|
|||||||
{ MiraLanguage.SChinese, "zh-CN" },
|
{ MiraLanguage.SChinese, "zh-CN" },
|
||||||
{ MiraLanguage.TChinese, "zh-TW" },
|
{ MiraLanguage.TChinese, "zh-TW" },
|
||||||
{ MiraLanguage.Irish, "ga-IE" },
|
{ MiraLanguage.Irish, "ga-IE" },
|
||||||
{ MiraLanguage.Polish, "pl-PL" }, // Custom
|
|
||||||
{ MiraLanguage.Turkish, "tr-TR" }, // Custom
|
// Custom
|
||||||
{ MiraLanguage.Swedish, "sv-SE" }, // Custom
|
{ MiraLanguage.Polish, "pl-PL" },
|
||||||
{ MiraLanguage.Lithuanian, "lt-LT" }, // Custom
|
{ MiraLanguage.Turkish, "tr-TR" },
|
||||||
{ MiraLanguage.Czech, "cs-CZ" }, // Custom
|
{ MiraLanguage.Swedish, "sv-SE" },
|
||||||
{ MiraLanguage.LChinese, "lzh-CN" }, // Custom
|
{ MiraLanguage.Lithuanian, "lt-LT" },
|
||||||
{ MiraLanguage.Greek, "el-GR" }, // Custom
|
{ MiraLanguage.Czech, "cs-CZ" },
|
||||||
{ MiraLanguage.Arabic, "arb" }, // Custom
|
{ MiraLanguage.LChinese, "lzh-CN" },
|
||||||
{ MiraLanguage.Hebrew, "heb" }, // Custom
|
{ MiraLanguage.Greek, "el-GR" },
|
||||||
|
{ MiraLanguage.Arabic, "arb" },
|
||||||
|
{ MiraLanguage.Hebrew, "heb" },
|
||||||
};
|
};
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -123,26 +126,49 @@ public static class MiraLocaleManager
|
|||||||
/// Call once per mod during plugin Load().
|
/// Call once per mod during plugin Load().
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="modGuid">The mod GUID (e.g., "mira.example").</param>
|
/// <param name="modGuid">The mod GUID (e.g., "mira.example").</param>
|
||||||
|
[Obsolete("Pass typeof(YourPlugin).Assembly directly to Register for better performance.")]
|
||||||
public static void Register(string modGuid)
|
public static void Register(string modGuid)
|
||||||
{
|
{
|
||||||
var callingAssembly = Assembly.GetCallingAssembly();
|
var callingAssembly = Assembly.GetCallingAssembly();
|
||||||
|
|
||||||
LoadInternalStrings(callingAssembly, callingAssembly.GetName().Name!, modGuid);
|
LoadInternalStrings(callingAssembly, callingAssembly.GetName().Name!, modGuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Registers translations for a mod.
|
||||||
|
/// Call once per mod during plugin Load().
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="modGuid">The mod GUID (e.g., "mira.example").</param>
|
||||||
|
/// <param name="assembly">The <see cref="Assembly"/> to load the strings from.</param>
|
||||||
|
public static void Register(string modGuid, Assembly assembly)
|
||||||
|
{
|
||||||
|
LoadInternalStrings(assembly, assembly.GetName().Name!, modGuid);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Registers translations for a mod.
|
/// Registers translations for a mod.
|
||||||
/// Call once per mod during plugin Load().
|
/// Call once per mod during plugin Load().
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="modGuid">The mod GUID (e.g., "mira.example").</param>
|
/// <param name="modGuid">The mod GUID (e.g., "mira.example").</param>
|
||||||
/// <param name="internalName">The mod's root namespace (e.g., "mira.api").</param>
|
/// <param name="internalName">The mod's root namespace (e.g., "mira.api").</param>
|
||||||
|
[Obsolete("Pass typeof(YourPlugin).Assembly directly to Register for better performance.")]
|
||||||
public static void Register(string modGuid, string internalName)
|
public static void Register(string modGuid, string internalName)
|
||||||
{
|
{
|
||||||
var callingAssembly = Assembly.GetCallingAssembly();
|
var callingAssembly = Assembly.GetCallingAssembly();
|
||||||
|
|
||||||
LoadInternalStrings(callingAssembly, internalName, modGuid);
|
LoadInternalStrings(callingAssembly, internalName, modGuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Registers translations for a mod.
|
||||||
|
/// Call once per mod during plugin Load().
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="modGuid">The mod GUID (e.g., "mira.example").</param>
|
||||||
|
/// <param name="internalName">The mod's root namespace (e.g., "mira.api").</param>
|
||||||
|
/// <param name="assembly">The <see cref="Assembly"/> to load the strings from.</param>
|
||||||
|
public static void Register(string modGuid, string internalName, Assembly assembly)
|
||||||
|
{
|
||||||
|
LoadInternalStrings(assembly, internalName, modGuid);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Translates a key into the current language.
|
/// Translates a key into the current language.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using System;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
@@ -6,17 +7,39 @@ namespace MiraAPI.Utilities.Assets;
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// A utility class for loading .WAV audio assets from the DLL's embedded resources.
|
/// A utility class for loading .WAV audio assets from the DLL's embedded resources.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="path">The path of the wave file.</param>
|
public class LoadableAudioResourceAsset : LoadableAsset<AudioClip>
|
||||||
public class LoadableAudioResourceAsset(string path) : LoadableAsset<AudioClip>
|
|
||||||
{
|
{
|
||||||
private readonly Assembly _assembly = Assembly.GetCallingAssembly();
|
private readonly string _path;
|
||||||
|
private readonly Assembly _assembly;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="LoadableAudioResourceAsset"/> class with the provided resource path and the assembly containing the asset.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="path">The path of the wave file.</param>
|
||||||
|
/// <param name="assembly">The <see cref="Assembly"/> containing the asset.</param>
|
||||||
|
public LoadableAudioResourceAsset(string path, Assembly assembly)
|
||||||
|
{
|
||||||
|
_path = path;
|
||||||
|
_assembly = assembly;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="LoadableAudioResourceAsset"/> class with the provided resource path.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="path">The path of the wave file.</param>
|
||||||
|
[Obsolete("Pass typeof(YourPlugin).Assembly directly to the constructor for better performance.")]
|
||||||
|
public LoadableAudioResourceAsset(string path)
|
||||||
|
{
|
||||||
|
_path = path;
|
||||||
|
_assembly = Assembly.GetCallingAssembly();
|
||||||
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override AudioClip LoadAsset()
|
public override AudioClip LoadAsset()
|
||||||
{
|
{
|
||||||
if (!LoadedAsset)
|
if (!LoadedAsset)
|
||||||
{
|
{
|
||||||
LoadedAsset = AudioTools.LoadAudioFromResources(path, _assembly);
|
LoadedAsset = AudioTools.LoadAudioFromResources(_path, _assembly);
|
||||||
}
|
}
|
||||||
|
|
||||||
return LoadedAsset!;
|
return LoadedAsset!;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Reflection;
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace MiraAPI.Utilities.Assets;
|
namespace MiraAPI.Utilities.Assets;
|
||||||
@@ -6,18 +7,44 @@ namespace MiraAPI.Utilities.Assets;
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// A utility class for loading assets from embedded resources.
|
/// A utility class for loading assets from embedded resources.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="path">The path to the embedded resource.</param>
|
public class LoadableResourceAsset : LoadableAsset<Sprite>
|
||||||
/// <param name="pixelsPerUnit">The pixels per unit for the loaded sprite.</param>
|
|
||||||
public class LoadableResourceAsset(string path, float pixelsPerUnit = 100f) : LoadableAsset<Sprite>
|
|
||||||
{
|
{
|
||||||
private readonly Assembly _assembly = Assembly.GetCallingAssembly();
|
private readonly string _path;
|
||||||
|
private readonly float _pixelsPerUnit;
|
||||||
|
private readonly Assembly _assembly;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="LoadableResourceAsset"/> class with the provided resource path and the assembly containing the asset.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="path">The path to the embedded resource.</param>
|
||||||
|
/// <param name="assembly">The <see cref="Assembly"/> containing the asset.</param>
|
||||||
|
/// <param name="pixelsPerUnit">The pixels per unit for the loaded sprite.</param>
|
||||||
|
public LoadableResourceAsset(string path, Assembly assembly, float pixelsPerUnit = 100f)
|
||||||
|
{
|
||||||
|
_path = path;
|
||||||
|
_assembly = assembly;
|
||||||
|
_pixelsPerUnit = pixelsPerUnit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="LoadableResourceAsset"/> class with the provided resource path and the assembly containing the asset.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="path">The path to the embedded resource.</param>
|
||||||
|
/// <param name="pixelsPerUnit">The pixels per unit for the loaded sprite.</param>
|
||||||
|
[Obsolete("Pass typeof(YourPlugin).Assembly directly to the constructor for better performance.")]
|
||||||
|
public LoadableResourceAsset(string path, float pixelsPerUnit = 100f)
|
||||||
|
{
|
||||||
|
_path = path;
|
||||||
|
_pixelsPerUnit = pixelsPerUnit;
|
||||||
|
_assembly = Assembly.GetCallingAssembly();
|
||||||
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override Sprite LoadAsset()
|
public override Sprite LoadAsset()
|
||||||
{
|
{
|
||||||
if (!LoadedAsset)
|
if (!LoadedAsset)
|
||||||
{
|
{
|
||||||
LoadedAsset = SpriteTools.LoadSpriteFromPath(path, _assembly, pixelsPerUnit);
|
LoadedAsset = SpriteTools.LoadSpriteFromPath(_path, _assembly, _pixelsPerUnit);
|
||||||
}
|
}
|
||||||
|
|
||||||
return LoadedAsset!;
|
return LoadedAsset!;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Reactor.Utilities;
|
using System.Reflection;
|
||||||
|
using Reactor.Utilities;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace MiraAPI.Utilities.Assets;
|
namespace MiraAPI.Utilities.Assets;
|
||||||
@@ -8,11 +9,13 @@ namespace MiraAPI.Utilities.Assets;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static class MiraAssets
|
public static class MiraAssets
|
||||||
{
|
{
|
||||||
|
private static readonly Assembly _assembly = typeof(MiraAssets).Assembly;
|
||||||
|
|
||||||
static MiraAssets()
|
static MiraAssets()
|
||||||
{
|
{
|
||||||
var boxTex = SpriteTools.LoadTextureFromResourcePath(
|
var boxTex = SpriteTools.LoadTextureFromResourcePath(
|
||||||
"MiraAPI.Resources.RoundedBox.png",
|
"MiraAPI.Resources.RoundedBox.png",
|
||||||
System.Reflection.Assembly.GetExecutingAssembly());
|
_assembly);
|
||||||
var boxSprite = Sprite.Create(
|
var boxSprite = Sprite.Create(
|
||||||
boxTex,
|
boxTex,
|
||||||
new Rect(0, 0, boxTex.width, boxTex.height),
|
new Rect(0, 0, boxTex.width, boxTex.height),
|
||||||
@@ -58,7 +61,7 @@ public static class MiraAssets
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the empty <see cref="Sprite"/> asset.
|
/// Gets the empty <see cref="Sprite"/> asset.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset Empty { get; } = new("MiraAPI.Resources.Empty.png");
|
public static LoadableResourceAsset Empty { get; } = new("MiraAPI.Resources.Empty.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the RoundedBox <see cref="Sprite"/>, which is a rounded rectangle used for UI elements.
|
/// Gets the RoundedBox <see cref="Sprite"/>, which is a rounded rectangle used for UI elements.
|
||||||
@@ -68,312 +71,312 @@ public static class MiraAssets
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the Next Button sprite.
|
/// Gets the Next Button sprite.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset NextButton { get; } = new("MiraAPI.Resources.NextButton.png");
|
public static LoadableResourceAsset NextButton { get; } = new("MiraAPI.Resources.NextButton.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the Mira settings icon.
|
/// Gets the Mira settings icon.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset SettingsIcon { get; } = new("MiraAPI.Resources.Settings.png");
|
public static LoadableResourceAsset SettingsIcon { get; } = new("MiraAPI.Resources.Settings.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the highlighted Next Button sprite.
|
/// Gets the highlighted Next Button sprite.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset NextButtonActive { get; } = new("MiraAPI.Resources.NextButtonActive.png");
|
public static LoadableResourceAsset NextButtonActive { get; } = new("MiraAPI.Resources.NextButtonActive.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the Cog icon used in Role Settings Menu.
|
/// Gets the Cog icon used in Role Settings Menu.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset Cog { get; } = new("MiraAPI.Resources.Cog.png");
|
public static LoadableResourceAsset Cog { get; } = new("MiraAPI.Resources.Cog.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the Checkmark Box used in the Settings Menu.
|
/// Gets the Checkmark Box used in the Settings Menu.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset CheckmarkBox { get; } = new("MiraAPI.Resources.CheckMarkBox.png");
|
public static LoadableResourceAsset CheckmarkBox { get; } = new("MiraAPI.Resources.CheckMarkBox.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the Reset Box used in the Settings Menu.
|
/// Gets the Reset Box used in the Settings Menu.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset ResetButton { get; } = new("MiraAPI.Resources.ResetButton.png");
|
public static LoadableResourceAsset ResetButton { get; } = new("MiraAPI.Resources.ResetButton.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the Checkmark used in the Settings Menu.
|
/// Gets the Checkmark used in the Settings Menu.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset Checkmark { get; } = new("MiraAPI.Resources.Checkmark.png");
|
public static LoadableResourceAsset Checkmark { get; } = new("MiraAPI.Resources.Checkmark.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the white CategoryHeader used in the Settings Menu.
|
/// Gets the white CategoryHeader used in the Settings Menu.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset CategoryHeader { get; } = new("MiraAPI.Resources.CategoryHeader.png");
|
public static LoadableResourceAsset CategoryHeader { get; } = new("MiraAPI.Resources.CategoryHeader.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the Keybind icons.
|
/// Gets the sprite used for the Keybind icons.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset KeybindButton { get; } = new("MiraAPI.Resources.KeybindButton.png");
|
public static LoadableResourceAsset KeybindButton { get; } = new("MiraAPI.Resources.KeybindButton.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for crewmate role files in TaskAdderGame.
|
/// Gets the sprite used for crewmate role files in TaskAdderGame.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset CrewmateFile { get; } = new("MiraAPI.Resources.CrewmateFile.png");
|
public static LoadableResourceAsset CrewmateFile { get; } = new("MiraAPI.Resources.CrewmateFile.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for impostor role files in TaskAdderGame.
|
/// Gets the sprite used for impostor role files in TaskAdderGame.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset ImpostorFile { get; } = new("MiraAPI.Resources.ImpostorFile.png");
|
public static LoadableResourceAsset ImpostorFile { get; } = new("MiraAPI.Resources.ImpostorFile.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for custom team role files in TaskAdderGame.
|
/// Gets the sprite used for custom team role files in TaskAdderGame.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset CustomTeamFile { get; } = new("MiraAPI.Resources.CustomFile.png");
|
public static LoadableResourceAsset CustomTeamFile { get; } = new("MiraAPI.Resources.CustomFile.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for modifier file in TaskAdderGame.
|
/// Gets the sprite used for modifier file in TaskAdderGame.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset ModifierFile { get; } = new("MiraAPI.Resources.ModifierFile.png");
|
public static LoadableResourceAsset ModifierFile { get; } = new("MiraAPI.Resources.ModifierFile.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the Classic gamemode.
|
/// Gets the sprite used for the Classic gamemode.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset ClassicGamemodeIcon { get; } = new("MiraAPI.Resources.ClassicGamemodeIcon.png");
|
public static LoadableResourceAsset ClassicGamemodeIcon { get; } = new("MiraAPI.Resources.ClassicGamemodeIcon.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the Hide n Seek gamemode.
|
/// Gets the sprite used for the Hide n Seek gamemode.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset HnSGamemodeIcon { get; } = new("MiraAPI.Resources.HnSGamemodeIcon.png");
|
public static LoadableResourceAsset HnSGamemodeIcon { get; } = new("MiraAPI.Resources.HnSGamemodeIcon.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for timed modifier file in TaskAdderGame.
|
/// Gets the sprite used for timed modifier file in TaskAdderGame.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset TimedModifierFile { get; } = new("MiraAPI.Resources.TimedModifierFile.png");
|
public static LoadableResourceAsset TimedModifierFile { get; } = new("MiraAPI.Resources.TimedModifierFile.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the new chat button while hovering.
|
/// Gets the sprite used for the new chat button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset ChatHoverSprite { get; } = new("MiraAPI.Resources.NormalChatHover.png");
|
public static LoadableResourceAsset ChatHoverSprite { get; } = new("MiraAPI.Resources.NormalChatHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the new chat button while hovering.
|
/// Gets the sprite used for the new chat button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset ChatIdleSprite { get; } = new("MiraAPI.Resources.NormalChatIdle.png");
|
public static LoadableResourceAsset ChatIdleSprite { get; } = new("MiraAPI.Resources.NormalChatIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the new chat button while hovering.
|
/// Gets the sprite used for the new chat button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset ChatOpenSprite { get; } = new("MiraAPI.Resources.NormalChatOpen.png");
|
public static LoadableResourceAsset ChatOpenSprite { get; } = new("MiraAPI.Resources.NormalChatOpen.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for players button while hovering.
|
/// Gets the sprite used for players button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset WikiPlayersButtonHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarPlayersButtonHover.png");
|
public static LoadableResourceAsset WikiPlayersButtonHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarPlayersButtonHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the players button while hovering.
|
/// Gets the sprite used for the players button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset WikiPlayersButtonIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarPlayersButtonIdle.png");
|
public static LoadableResourceAsset WikiPlayersButtonIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarPlayersButtonIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the players button while hovering.
|
/// Gets the sprite used for the players button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset WikiPlayersButtonOpenSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarPlayersButtonOpen.png");
|
public static LoadableResourceAsset WikiPlayersButtonOpenSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarPlayersButtonOpen.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the settings button while hovering.
|
/// Gets the sprite used for the settings button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset WikiSettingsButtonHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarSettingsButtonHover.png");
|
public static LoadableResourceAsset WikiSettingsButtonHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarSettingsButtonHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the settings button while hovering.
|
/// Gets the sprite used for the settings button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset WikiSettingsButtonIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarSettingsButtonIdle.png");
|
public static LoadableResourceAsset WikiSettingsButtonIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarSettingsButtonIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the settings button while hovering.
|
/// Gets the sprite used for the settings button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset WikiSettingsButtonOpenSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarSettingsButtonOpen.png");
|
public static LoadableResourceAsset WikiSettingsButtonOpenSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarSettingsButtonOpen.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset WikiRolesButtonHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarRolesButtonHover.png");
|
public static LoadableResourceAsset WikiRolesButtonHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarRolesButtonHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset WikiRolesButtonIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarRolesButtonIdle.png");
|
public static LoadableResourceAsset WikiRolesButtonIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarRolesButtonIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset WikiRolesButtonOpenSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarRolesButtonOpen.png");
|
public static LoadableResourceAsset WikiRolesButtonOpenSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarRolesButtonOpen.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the modifiers button while hovering.
|
/// Gets the sprite used for the modifiers button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset WikiModifiersButtonHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarModifiersButtonHover.png");
|
public static LoadableResourceAsset WikiModifiersButtonHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarModifiersButtonHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the modifiers button while hovering.
|
/// Gets the sprite used for the modifiers button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset WikiModifiersButtonIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarModifiersButtonIdle.png");
|
public static LoadableResourceAsset WikiModifiersButtonIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarModifiersButtonIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the modifiers button while hovering.
|
/// Gets the sprite used for the modifiers button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset WikiModifiersButtonOpenSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarModifiersButtonOpen.png");
|
public static LoadableResourceAsset WikiModifiersButtonOpenSprite { get; } = new("MiraAPI.Resources.Wiki.SidebarModifiersButtonOpen.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset GroupCountHoverSprite { get; } = new("MiraAPI.Resources.Wiki.GroupCountHover.png");
|
public static LoadableResourceAsset GroupCountHoverSprite { get; } = new("MiraAPI.Resources.Wiki.GroupCountHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset GroupCountIdleSprite { get; } = new("MiraAPI.Resources.Wiki.GroupCountIdle.png");
|
public static LoadableResourceAsset GroupCountIdleSprite { get; } = new("MiraAPI.Resources.Wiki.GroupCountIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset GroupFactionHoverSprite { get; } = new("MiraAPI.Resources.Wiki.GroupFactionHover.png");
|
public static LoadableResourceAsset GroupFactionHoverSprite { get; } = new("MiraAPI.Resources.Wiki.GroupFactionHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset GroupFactionIdleSprite { get; } = new("MiraAPI.Resources.Wiki.GroupFactionIdle.png");
|
public static LoadableResourceAsset GroupFactionIdleSprite { get; } = new("MiraAPI.Resources.Wiki.GroupFactionIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset GroupNoneHoverSprite { get; } = new("MiraAPI.Resources.Wiki.GroupNoneHover.png");
|
public static LoadableResourceAsset GroupNoneHoverSprite { get; } = new("MiraAPI.Resources.Wiki.GroupNoneHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset GroupNoneIdleSprite { get; } = new("MiraAPI.Resources.Wiki.GroupNoneIdle.png");
|
public static LoadableResourceAsset GroupNoneIdleSprite { get; } = new("MiraAPI.Resources.Wiki.GroupNoneIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset SearchClearHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SearchClearHover.png");
|
public static LoadableResourceAsset SearchClearHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SearchClearHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset SearchClearIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SearchClearIdle.png");
|
public static LoadableResourceAsset SearchClearIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SearchClearIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset SearchIconHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SearchIconHover.png");
|
public static LoadableResourceAsset SearchIconHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SearchIconHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset SearchIconIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SearchIconIdle.png");
|
public static LoadableResourceAsset SearchIconIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SearchIconIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset SortingAzHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SortingAzHover.png");
|
public static LoadableResourceAsset SortingAzHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SortingAzHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset SortingAzIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SortingAzIdle.png");
|
public static LoadableResourceAsset SortingAzIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SortingAzIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset SortingZaHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SortingZaHover.png");
|
public static LoadableResourceAsset SortingZaHoverSprite { get; } = new("MiraAPI.Resources.Wiki.SortingZaHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset SortingZaIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SortingZaIdle.png");
|
public static LoadableResourceAsset SortingZaIdleSprite { get; } = new("MiraAPI.Resources.Wiki.SortingZaIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset VisibleAllHoverSprite { get; } = new("MiraAPI.Resources.Wiki.VisibleAllHover.png");
|
public static LoadableResourceAsset VisibleAllHoverSprite { get; } = new("MiraAPI.Resources.Wiki.VisibleAllHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset VisibleAllIdleSprite { get; } = new("MiraAPI.Resources.Wiki.VisibleAllIdle.png");
|
public static LoadableResourceAsset VisibleAllIdleSprite { get; } = new("MiraAPI.Resources.Wiki.VisibleAllIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset VisibleOffHoverSprite { get; } = new("MiraAPI.Resources.Wiki.VisibleOffHover.png");
|
public static LoadableResourceAsset VisibleOffHoverSprite { get; } = new("MiraAPI.Resources.Wiki.VisibleOffHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset VisibleOffIdleSprite { get; } = new("MiraAPI.Resources.Wiki.VisibleOffIdle.png");
|
public static LoadableResourceAsset VisibleOffIdleSprite { get; } = new("MiraAPI.Resources.Wiki.VisibleOffIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset VisibleOnHoverSprite { get; } = new("MiraAPI.Resources.Wiki.VisibleOnHover.png");
|
public static LoadableResourceAsset VisibleOnHoverSprite { get; } = new("MiraAPI.Resources.Wiki.VisibleOnHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the roles button while hovering.
|
/// Gets the sprite used for the roles button while hovering.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset VisibleOnIdleSprite { get; } = new("MiraAPI.Resources.Wiki.VisibleOnIdle.png");
|
public static LoadableResourceAsset VisibleOnIdleSprite { get; } = new("MiraAPI.Resources.Wiki.VisibleOnIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for crewmates.
|
/// Gets the sprite used for crewmates.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset IconCrewmate { get; } = new("MiraAPI.Resources.Wiki.IconCrewmate.png");
|
public static LoadableResourceAsset IconCrewmate { get; } = new("MiraAPI.Resources.Wiki.IconCrewmate.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for impostors.
|
/// Gets the sprite used for impostors.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset IconImpostor { get; } = new("MiraAPI.Resources.Wiki.IconImpostor.png");
|
public static LoadableResourceAsset IconImpostor { get; } = new("MiraAPI.Resources.Wiki.IconImpostor.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for neutrals.
|
/// Gets the sprite used for neutrals.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset IconNeutral { get; } = new("MiraAPI.Resources.Wiki.IconNeutral.png");
|
public static LoadableResourceAsset IconNeutral { get; } = new("MiraAPI.Resources.Wiki.IconNeutral.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for the player list.
|
/// Gets the sprite used for the player list.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset IconPlayerList { get; } = new("MiraAPI.Resources.Wiki.IconPlayerList.png");
|
public static LoadableResourceAsset IconPlayerList { get; } = new("MiraAPI.Resources.Wiki.IconPlayerList.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for settings.
|
/// Gets the sprite used for settings.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset IconSettings { get; } = new("MiraAPI.Resources.Wiki.IconSettings.png");
|
public static LoadableResourceAsset IconSettings { get; } = new("MiraAPI.Resources.Wiki.IconSettings.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used for terminology.
|
/// Gets the sprite used for terminology.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset IconTerminology { get; } = new("MiraAPI.Resources.Wiki.IconTerminology.png");
|
public static LoadableResourceAsset IconTerminology { get; } = new("MiraAPI.Resources.Wiki.IconTerminology.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the Page switching sprite.
|
/// Gets the Page switching sprite.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset PageLeftHover { get; } = new("MiraAPI.Resources.Wiki.PageLeftHover.png");
|
public static LoadableResourceAsset PageLeftHover { get; } = new("MiraAPI.Resources.Wiki.PageLeftHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the Page switching sprite.
|
/// Gets the Page switching sprite.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset PageLeftIdle { get; } = new("MiraAPI.Resources.Wiki.PageLeftIdle.png");
|
public static LoadableResourceAsset PageLeftIdle { get; } = new("MiraAPI.Resources.Wiki.PageLeftIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the Page switching sprite.
|
/// Gets the Page switching sprite.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset PageRightHover { get; } = new("MiraAPI.Resources.Wiki.PageRightHover.png");
|
public static LoadableResourceAsset PageRightHover { get; } = new("MiraAPI.Resources.Wiki.PageRightHover.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the Page switching sprite.
|
/// Gets the Page switching sprite.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset PageRightIdle { get; } = new("MiraAPI.Resources.Wiki.PageRightIdle.png");
|
public static LoadableResourceAsset PageRightIdle { get; } = new("MiraAPI.Resources.Wiki.PageRightIdle.png", _assembly);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sprite used below the tab icons in the wiki.
|
/// Gets the sprite used below the tab icons in the wiki.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static LoadableResourceAsset TabButtonContainer { get; } = new("MiraAPI.Resources.Wiki.TabButtonContainer.png");
|
public static LoadableResourceAsset TabButtonContainer { get; } = new("MiraAPI.Resources.Wiki.TabButtonContainer.png", _assembly);
|
||||||
|
|
||||||
internal static LoadableResourceAsset BlankSprite { get; } = new("MiraAPI.Resources.BlankSprite.png");
|
internal static LoadableResourceAsset BlankSprite { get; } = new("MiraAPI.Resources.BlankSprite.png", _assembly);
|
||||||
}
|
}
|
||||||
@@ -492,16 +492,29 @@ public static class Extensions
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a proper string for an <see cref="Enum"/>. (with spaces).
|
/// Gets a proper string for an <see cref="Enum"/> (with spaces).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="enum">The <see cref="Enum"/> you would like to change.</param>
|
/// <param name="enum">The <see cref="Enum"/> you would like to change.</param>
|
||||||
/// <returns>A proper string for the <see cref="Enum"/>.</returns>
|
/// <returns>A proper string for the provided <see cref="Enum"/>.</returns>
|
||||||
public static string ToDisplayString(this Enum @enum)
|
public static string ToDisplayString(this Enum @enum)
|
||||||
{
|
{
|
||||||
var regex = new Regex(@"([^\^])([A-Z][a-z$])", default, Regex.InfiniteMatchTimeout);
|
var regex = new Regex(@"([^\^])([A-Z][a-z$])", default, Regex.InfiniteMatchTimeout);
|
||||||
return regex.Replace(@enum.ToString(), m => $"{m.Groups[1].Value} {m.Groups[2].Value}");
|
return regex.Replace(@enum.ToString(), m => $"{m.Groups[1].Value} {m.Groups[2].Value}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a proper string for a(n) <typeparamref name="T"/> value (with spaces).
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">The type of the enum value.</typeparam>
|
||||||
|
/// <param name="enum">The <typeparamref name="T"/> enum value you would like to change.</param>
|
||||||
|
/// <returns>A proper string for the provided <typeparamref name="T"/> value.</returns>
|
||||||
|
public static string ToDisplayString<T>(this T @enum)
|
||||||
|
where T : struct, Enum
|
||||||
|
{
|
||||||
|
var regex = new Regex(@"([^\^])([A-Z][a-z$])", default, Regex.InfiniteMatchTimeout);
|
||||||
|
return regex.Replace(@enum.ToString(), m => $"{m.Groups[1].Value} {m.Groups[2].Value}");
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the constructors of a type that match the specified arguments.
|
/// Gets the constructors of a type that match the specified arguments.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Reference in new issue
Block a user