From 513be01c02a2402bbf928ce430617fb01ee8709a Mon Sep 17 00:00:00 2001
From: WanderingPixel <126269533+WanderingPix@users.noreply.github.com>
Date: Sat, 9 Aug 2025 22:12:15 +0100
Subject: [PATCH] Add Keybind icons for custom buttons
---
MiraAPI/Hud/CustomActionButton.cs | 17 ++++++++++++++++-
MiraAPI/Resources/KeybindButton.png | Bin 0 -> 3418 bytes
MiraAPI/Utilities/Assets/MiraAssets.cs | 5 +++++
3 files changed, 21 insertions(+), 1 deletion(-)
create mode 100644 MiraAPI/Resources/KeybindButton.png
diff --git a/MiraAPI/Hud/CustomActionButton.cs b/MiraAPI/Hud/CustomActionButton.cs
index ac48c4a..78fa114 100644
--- a/MiraAPI/Hud/CustomActionButton.cs
+++ b/MiraAPI/Hud/CustomActionButton.cs
@@ -1,11 +1,14 @@
using System;
using System.Globalization;
+using System.Linq;
using MiraAPI.Events;
using MiraAPI.Events.Mira;
+using MiraAPI.Keybinds;
using MiraAPI.Patches;
using MiraAPI.Utilities;
using MiraAPI.Utilities.Assets;
using Rewired;
+using TMPro;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
@@ -120,6 +123,11 @@ public abstract class CustomActionButton
///
public ActionButton? Button { get; set; }
+ ///
+ /// Gets the gameObject used for the keybind icon.
+ ///
+ public GameObject KeybindIcon { get; set; }
+
///
/// The method used to create the button.
///
@@ -191,6 +199,13 @@ public abstract class CustomActionButton
}
}
}));
+
+ KeybindIcon = Object.Instantiate(Button.usesRemainingSprite.gameObject, Button.transform);
+ KeybindIcon.GetComponent().sprite = MiraAssets.KeybindButton.LoadAsset();
+ KeybindIcon.transform.GetChild(0).GetComponent().text =
+ KeybindManager.GetEntries().First(x => x.Id == $"{Name}_Keybind").Key.ToString();
+ KeybindIcon.name = "KeybindIcon";
+ KeybindIcon.transform.localPosition = new(0.341f, 0.374f, -0.1f);
}
///
@@ -558,4 +573,4 @@ public abstract class CustomActionButton : CustomActionButton where T : MonoB
Target = null;
SetOutline(false);
}
-}
+}
\ No newline at end of file
diff --git a/MiraAPI/Resources/KeybindButton.png b/MiraAPI/Resources/KeybindButton.png
new file mode 100644
index 0000000000000000000000000000000000000000..e537b3b5eb9228e966561af347d06adc898296e4
GIT binary patch
literal 3418
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
HAujemkRu07
literal 0
HcmV?d00001
diff --git a/MiraAPI/Utilities/Assets/MiraAssets.cs b/MiraAPI/Utilities/Assets/MiraAssets.cs
index 1bd130a..148c65a 100644
--- a/MiraAPI/Utilities/Assets/MiraAssets.cs
+++ b/MiraAPI/Utilities/Assets/MiraAssets.cs
@@ -94,4 +94,9 @@ public static class MiraAssets
/// Gets the white CategoryHeader used in the Settings Menu.
///
public static LoadableResourceAsset CategoryHeader { get; } = new("MiraAPI.Resources.CategoryHeader.png");
+
+ ///
+ /// Gets the sprite used for the Keybind icons.
+ ///
+ public static LoadableResourceAsset KeybindButton { get; } = new("MiraAPI.Resources.KeybindButton.png");
}