diff --git a/MiraAPI.Example/Options/Roles/TeleporterOptions.cs b/MiraAPI.Example/Options/Roles/TeleporterOptions.cs index b6d02a4..d05569b 100644 --- a/MiraAPI.Example/Options/Roles/TeleporterOptions.cs +++ b/MiraAPI.Example/Options/Roles/TeleporterOptions.cs @@ -6,7 +6,7 @@ using MiraAPI.Utilities; namespace MiraAPI.Example.Options.Roles; -public class TeleporterOptions : AbstractOptionGroup +public class TeleporterOptions : AbstractRoleOptionGroup { public override string GroupName => "Teleporter"; diff --git a/MiraAPI/GameOptions/AbstractOptionGroup.cs b/MiraAPI/GameOptions/AbstractOptionGroup.cs index 07d008a..8be08c6 100644 --- a/MiraAPI/GameOptions/AbstractOptionGroup.cs +++ b/MiraAPI/GameOptions/AbstractOptionGroup.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Linq; using Il2CppInterop.Runtime.Attributes; using MiraAPI.Modifiers; +using MiraAPI.Roles; using TMPro; using UnityEngine; @@ -79,9 +81,7 @@ public abstract class AbstractOptionGroup : AbstractOptionGroup where T : IOp /// public override Type OptionableType => typeof(T); - /// - /// Gets a value indicating which menu the group is in. - /// + /// public override MenuCategory ParentMenu { get @@ -100,6 +100,33 @@ public abstract class AbstractOptionGroup : AbstractOptionGroup where T : IOp } } +/// +/// Base class for option groups. An option group is a collection of options that are displayed together in the options menu. +/// +/// The custom role that the group is for. +public abstract class AbstractRoleOptionGroup() : AbstractOptionGroup where T : ICustomRole +{ + /// + public override Type OptionableType => typeof(T); + + /// + public override MenuCategory ParentMenu => MenuCategory.Roles; + + /// + public override OptionNotifConfiguration Configuration + { + get + { + var role = CustomRoleManager.CustomMiraRoles.FirstOrDefault(x => x.GetType() == OptionableType); + if (role == null) + { + return new(new Color(0.7333f, 0.7333f, 0.7333f, 1)); + } + return new(role.RoleColor, role.Configuration.IconTmp); + } + } +} + /// /// Menu categories for option groups. ///