diff --git a/MiraAPI.Example/Buttons/ThinkButton.cs b/MiraAPI.Example/Buttons/ThinkButton.cs index 505365d..b1d7164 100644 --- a/MiraAPI.Example/Buttons/ThinkButton.cs +++ b/MiraAPI.Example/Buttons/ThinkButton.cs @@ -10,6 +10,8 @@ public class ThinkButton : CustomActionButton public override float Cooldown => 15f; public override float EffectDuration => 10f; public override bool EffectCancelable => true; + public override int MaxUses => 1; + public override ButtonUsesMode UsesMode => ButtonUsesMode.PerRound; public override LoadableAsset Sprite => ExampleAssets.ExampleButton; protected override void OnClick() { diff --git a/MiraAPI/Hud/ButtonUsesMode.cs b/MiraAPI/Hud/ButtonUsesMode.cs new file mode 100644 index 0000000..2c43300 --- /dev/null +++ b/MiraAPI/Hud/ButtonUsesMode.cs @@ -0,0 +1,17 @@ +namespace MiraAPI.Hud; + +/// +/// The uses mode for custom buttons. +/// +public enum ButtonUsesMode +{ + /// + /// Uses per game. + /// + PerGame, + + /// + /// Uses per round. + /// + PerRound, +} diff --git a/MiraAPI/Hud/CustomActionButton.cs b/MiraAPI/Hud/CustomActionButton.cs index 4985aab..1c93188 100644 --- a/MiraAPI/Hud/CustomActionButton.cs +++ b/MiraAPI/Hud/CustomActionButton.cs @@ -66,6 +66,11 @@ public abstract class CustomActionButton /// public virtual int MaxUses => 0; + /// + /// Gets the value indicating uses mode. + /// + public virtual ButtonUsesMode UsesMode => ButtonUsesMode.PerGame; + /// /// Gets the current key binding for this button. If null, no keybind will be added. /// diff --git a/MiraAPI/Patches/Hud/ButtonResetPatches.cs b/MiraAPI/Patches/Hud/ButtonResetPatches.cs index 29b190d..b6f88f4 100644 --- a/MiraAPI/Patches/Hud/ButtonResetPatches.cs +++ b/MiraAPI/Patches/Hud/ButtonResetPatches.cs @@ -20,6 +20,11 @@ public static class ButtonResetPatches { Logger.Error($"Error resetting cooldown and effect for button {customActionButton.GetType().Name}: {ex}"); } + + if (customActionButton.UsesMode == ButtonUsesMode.PerRound) + { + customActionButton.SetUses(customActionButton.MaxUses); + } } } }