diff --git a/MiraAPI/Keybinds/BaseKeybind.cs b/MiraAPI/Keybinds/BaseKeybind.cs index e4e6ac8..525ffef 100644 --- a/MiraAPI/Keybinds/BaseKeybind.cs +++ b/MiraAPI/Keybinds/BaseKeybind.cs @@ -69,4 +69,4 @@ public class BaseKeybind { Handler -= action; } -} \ No newline at end of file +} diff --git a/MiraAPI/Keybinds/MiraKeybind.cs b/MiraAPI/Keybinds/MiraKeybind.cs index 52d64a1..0ce47ea 100644 --- a/MiraAPI/Keybinds/MiraKeybind.cs +++ b/MiraAPI/Keybinds/MiraKeybind.cs @@ -9,7 +9,7 @@ namespace MiraAPI.Keybinds; public class MiraKeybind : BaseKeybind { /// - /// Gets name of the keybind + /// Gets name of the keybind. /// public string Name { get; } diff --git a/MiraAPI/MiraApiSettings.cs b/MiraAPI/MiraApiSettings.cs index 397caa6..60e5e6a 100644 --- a/MiraAPI/MiraApiSettings.cs +++ b/MiraAPI/MiraApiSettings.cs @@ -6,7 +6,7 @@ using MiraAPI.Utilities.Assets; namespace MiraAPI; /// -/// Mira API Config File Handler +/// Mira API Config File Handler. /// public class MiraApiSettings(ConfigFile config) : LocalSettingsTab(config) { @@ -39,4 +39,16 @@ public class MiraApiSettings(ConfigFile config) : LocalSettingsTab(config) /// [LocalToggleSetting] public ConfigEntry PrettyTaskAdder { get; private set; } = config.Bind("Freeplay", "Pretty Task Laptop", true); + + /// + /// Gets whether to show the red flash from sabotages. + /// + [LocalToggleSetting] + public ConfigEntry EnableSabotageFlashes { get; private set; } = config.Bind("Accessibility", "Enable Sabotage Flashes", true); + + /// + /// Gets whether to enable the sabotage sound effects or not. + /// + [LocalToggleSetting] + public ConfigEntry EnableSabotageBlares { get; private set; } = config.Bind("Accessibility", "Enable Sabotage Blare", true); } diff --git a/MiraAPI/Patches/Accessibility/HudManagerFlashPatches.cs b/MiraAPI/Patches/Accessibility/HudManagerFlashPatches.cs new file mode 100644 index 0000000..e3d3ab4 --- /dev/null +++ b/MiraAPI/Patches/Accessibility/HudManagerFlashPatches.cs @@ -0,0 +1,63 @@ +using System.Collections; +using BepInEx.Unity.IL2CPP.Utils.Collections; +using HarmonyLib; +using MiraAPI.LocalSettings; +using UnityEngine; + +namespace MiraAPI.Patches.Accessibility; +[HarmonyPatch] +public static class HudManagerFlashPatches +{ + [HarmonyPatch(typeof(HudManager), nameof(HudManager.StartReactorFlash))] + [HarmonyPrefix] + public static bool ReactorFlashPrefix(HudManager __instance) + { + if (__instance.ReactorFlash == null) + { + __instance.ReactorFlash = __instance.StartCoroutine(CoReactorFlash().WrapToIl2Cpp()); + } + + return false; + } + [HarmonyPatch(typeof(HudManager), nameof(HudManager.StartOxyFlash))] + [HarmonyPrefix] + public static bool OxygenFlashPrefix(HudManager __instance) + { + if (__instance.OxyFlash == null) + { + __instance.OxyFlash = __instance.StartCoroutine(CoReactorFlash().WrapToIl2Cpp()); + } + + return false; + } + public static IEnumerator CoReactorFlash() + { + if (!HudManager.InstanceExists) + { + yield break; + } + var hudManager = HudManager.Instance; + WaitForSeconds wait = new WaitForSeconds(1f); + bool light = false; + + hudManager.FullScreen.color = new Color(1f, 0f, 0f, 0.37254903f); + while (true) + { + var settins = LocalSettingsTabSingleton.Instance; + hudManager.FullScreen.gameObject.SetActive(settins.EnableSabotageFlashes.Value && !hudManager.FullScreen.gameObject.activeSelf); + if (settins.EnableSabotageBlares.Value) + { + SoundManager.Instance.PlaySound(ShipStatus.Instance.SabotageSound, false, 1f, null); + } + if (hudManager.lightFlashHandle == null) + { + hudManager.lightFlashHandle = DestroyableSingleton.Instance.AllocateLight(); + hudManager.lightFlashHandle.color = new Color(1f, 0f, 0f, 1f); + hudManager.lightFlashHandle.intensity = 1f; + } + light = !light; + hudManager.lightFlashHandle.color.SetAlpha(light ? 1f : 0f); + yield return wait; + } + } +} diff --git a/MiraAPI/Patches/Roles/LogicRoleSelectionHnsPatch.cs b/MiraAPI/Patches/Roles/LogicRoleSelectionHnsPatch.cs index 4a9547b..c3ed277 100644 --- a/MiraAPI/Patches/Roles/LogicRoleSelectionHnsPatch.cs +++ b/MiraAPI/Patches/Roles/LogicRoleSelectionHnsPatch.cs @@ -39,7 +39,7 @@ public static class LogicRoleSelectionHnsPatch foreach (RoleManager.RoleAssignmentData roleAssignmentData in guaranteedRoles.Select((x) => new RoleManager.RoleAssignmentData(x, roleOptions.GetNumPerGame(x.Role), 100))) { - for (;;) + while (true) { RoleManager.RoleAssignmentData roleAssignmentData2 = roleAssignmentData; int count = roleAssignmentData2.Count; @@ -122,7 +122,7 @@ public static class LogicRoleSelectionHnsPatch foreach (RoleManager.RoleAssignmentData roleAssignmentData in guaranteedRoles.Select((x) => new RoleManager.RoleAssignmentData(x, roleOptions.GetNumPerGame(x.Role), 100))) { - for (;;) + while (true) { RoleManager.RoleAssignmentData roleAssignmentData2 = roleAssignmentData; int count = roleAssignmentData2.Count; diff --git a/MiraAPI/Patches/Roles/LogicRoleSelectionNormalPatch.cs b/MiraAPI/Patches/Roles/LogicRoleSelectionNormalPatch.cs index 0d00008..b0540bb 100644 --- a/MiraAPI/Patches/Roles/LogicRoleSelectionNormalPatch.cs +++ b/MiraAPI/Patches/Roles/LogicRoleSelectionNormalPatch.cs @@ -36,7 +36,7 @@ public static class LogicRoleSelectionNormalPatch foreach (RoleManager.RoleAssignmentData roleAssignmentData in guaranteedRoles.Select((x) => new RoleManager.RoleAssignmentData(x, roleOptions.GetNumPerGame(x.Role), 100))) { - for (;;) + while (true) { RoleManager.RoleAssignmentData roleAssignmentData2 = roleAssignmentData; int count = roleAssignmentData2.Count;