diff --git a/MiraAPI.Example/ExampleColors.cs b/MiraAPI.Example/ExampleColors.cs
index 6833d3c..d61eb49 100644
--- a/MiraAPI.Example/ExampleColors.cs
+++ b/MiraAPI.Example/ExampleColors.cs
@@ -6,7 +6,10 @@ namespace MiraAPI.Example;
[RegisterCustomColors]
public static class ExampleColors
{
- public static CustomColor Cerulean { get; } = new("Cerulean", new Color(0.0f, 0.48f, 0.65f));
+ public static CustomColor Cerulean { get; } = new("Cerulean", new Color(0.0f, 0.48f, 0.65f))
+ {
+ ColorBrightness = CustomColorBrightness.Lighter,
+ };
public static CustomColor Rose { get; } = new("Rose", new Color(0.98f, 0.26f, 0.62f));
diff --git a/MiraAPI/Colors/CustomColor.cs b/MiraAPI/Colors/CustomColor.cs
index 7bbe87a..89663d1 100644
--- a/MiraAPI/Colors/CustomColor.cs
+++ b/MiraAPI/Colors/CustomColor.cs
@@ -13,19 +13,24 @@ namespace MiraAPI.Colors;
public sealed class CustomColor(StringNames name, Color32 mainColor, Color32 shadowColor)
{
///
- /// Gets the main color.
+ /// Gets or sets the main color.
///
- public Color32 MainColor { get; } = mainColor;
+ public Color32 MainColor { get; set; } = mainColor;
///
- /// Gets the shadow color.
+ /// Gets or sets the shadow color.
///
- public Color32 ShadowColor { get; } = shadowColor;
+ public Color32 ShadowColor { get; set; } = shadowColor;
///
- /// Gets the name of the color.
+ /// Gets or sets the name of the color.
///
- public StringNames Name { get; } = name;
+ public StringNames Name { get; set; } = name;
+
+ ///
+ /// Gets or sets whether the color is lighter or darker. Can be used to help with colorblind stuff.
+ ///
+ public CustomColorBrightness ColorBrightness { get; set; } = CustomColorBrightness.Darker;
///
public CustomColor(StringNames name, Color32 mainColor) : this(name, mainColor, mainColor.GetShadowColor(60))
@@ -42,3 +47,19 @@ public sealed class CustomColor(StringNames name, Color32 mainColor, Color32 sha
{
}
}
+
+///
+/// Can be used to help with colorblind stuff.
+///
+public enum CustomColorBrightness
+{
+ ///
+ /// A lighter color.
+ ///
+ Lighter,
+
+ ///
+ /// A darker color.
+ ///
+ Darker,
+}
diff --git a/MiraAPI/Patches/ChatControllerPatch.cs b/MiraAPI/Patches/ChatControllerPatch.cs
new file mode 100644
index 0000000..0108ece
--- /dev/null
+++ b/MiraAPI/Patches/ChatControllerPatch.cs
@@ -0,0 +1,34 @@
+using HarmonyLib;
+using UnityEngine;
+
+namespace MiraAPI.Patches;
+
+///
+/// Allows players to paste text into chat.
+/// Source: https://github.com/CallOfCreator/NewMod/blob/main/NewMod/Patches/ClipboardPatch.cs
+///
+[HarmonyPatch(typeof(ChatController), nameof(ChatController.Update))]
+public static class ChatControllerPatch
+{
+ public static void Prefix(ChatController __instance)
+ {
+ if (!HudManager.Instance.Chat.IsOpenOrOpening) return;
+
+ var ctrlPressed = Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl);
+
+ if (!ctrlPressed || !Input.GetKeyDown(KeyCode.V)) return;
+
+ var clipboard = GUIUtility.systemCopyBuffer;
+
+ if (string.IsNullOrWhiteSpace(clipboard)) return;
+ clipboard = clipboard.Replace("<", string.Empty)
+ .Replace(">", string.Empty)
+ .Replace("\r", string.Empty);
+
+ if (!Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.RightShift))
+ clipboard = clipboard.Replace("\n", string.Empty);
+
+ __instance.freeChatField.textArea.SetText(__instance.freeChatField.textArea.text + clipboard);
+ }
+}
+
diff --git a/MiraAPI/Patches/Menu/HatsTabPatches.cs b/MiraAPI/Patches/Menu/HatsTabPatches.cs
index daf87b1..f985027 100644
--- a/MiraAPI/Patches/Menu/HatsTabPatches.cs
+++ b/MiraAPI/Patches/Menu/HatsTabPatches.cs
@@ -114,7 +114,7 @@ public static class HatsTabPatches
yield return null;
}
- __instance.scroller.ContentYBounds.max = -(__instance.YStart - (hatIndex + 1) / __instance.NumPerRow * __instance.YOffset) - 3f;
+ __instance.SetScrollerBounds();
yield return new WaitForSeconds(0.01f);
}
__instance.currentHatIsEquipped = true;
diff --git a/MiraAPI/Patches/Menu/NameplatesTabPatches.cs b/MiraAPI/Patches/Menu/NameplatesTabPatches.cs
index d66c8f3..bb5482a 100644
--- a/MiraAPI/Patches/Menu/NameplatesTabPatches.cs
+++ b/MiraAPI/Patches/Menu/NameplatesTabPatches.cs
@@ -91,7 +91,7 @@ public static class NameplatesTabPatches
hatIndex += 1;
}
- __instance.scroller.ContentYBounds.max = -(__instance.YStart - (hatIndex + 1) / __instance.NumPerRow * __instance.YOffset) - 3f;
+ __instance.SetScrollerBounds();
__instance.currentNameplateIsEquipped = true;
}
diff --git a/MiraAPI/Patches/Menu/SkinsTabPatches.cs b/MiraAPI/Patches/Menu/SkinsTabPatches.cs
index b102fb1..2e9ef2e 100644
--- a/MiraAPI/Patches/Menu/SkinsTabPatches.cs
+++ b/MiraAPI/Patches/Menu/SkinsTabPatches.cs
@@ -94,7 +94,7 @@ public static class SkinsTabPatches
hatIndex += 1;
}
- __instance.scroller.ContentYBounds.max = -(__instance.YStart - (hatIndex + 1) / __instance.NumPerRow * __instance.YOffset) - 3f;
+ __instance.SetScrollerBounds();
__instance.currentSkinIsEquipped = true;
}
diff --git a/MiraAPI/Patches/Menu/VisorsTabPatches.cs b/MiraAPI/Patches/Menu/VisorsTabPatches.cs
index 81845c6..d88cdab 100644
--- a/MiraAPI/Patches/Menu/VisorsTabPatches.cs
+++ b/MiraAPI/Patches/Menu/VisorsTabPatches.cs
@@ -90,7 +90,7 @@ public static class VisorsTabPatches
hatIndex += 1;
}
- __instance.scroller.ContentYBounds.max = -(__instance.YStart - (hatIndex + 1) / __instance.NumPerRow * __instance.YOffset) - 3f;
+ __instance.SetScrollerBounds();
__instance.currentVisorIsEquipped = true;
}