86 lines
2.3 KiB
C#
86 lines
2.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class HotkeyManager : MonoBehaviour
|
|
{
|
|
// Singleton instance
|
|
public static HotkeyManager Instance;
|
|
private readonly Dictionary<string, KeyCode> actionKeys = new();
|
|
|
|
// Dictionary to store key mappings and their actions
|
|
private readonly Dictionary<KeyCode, Action> hotkeyActions = new();
|
|
|
|
|
|
private void Awake()
|
|
{
|
|
// Implement singleton pattern
|
|
if (Instance == null)
|
|
Instance = this;
|
|
else
|
|
Destroy(gameObject);
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
// Check for key presses and invoke corresponding actions
|
|
foreach (var hotkey in hotkeyActions)
|
|
if (Input.GetKeyDown(hotkey.Key))
|
|
hotkey.Value?.Invoke();
|
|
}
|
|
|
|
// Method to register a new hotkey
|
|
public void RegisterHotkey(string actionName, KeyCode key, Action action)
|
|
{
|
|
Debug.Log("Registering Hot Key: " + actionName);
|
|
if (actionKeys.ContainsKey(actionName)) UnregisterHotkey(actionKeys[actionName], action);
|
|
|
|
actionKeys[actionName] = key;
|
|
|
|
if (hotkeyActions.ContainsKey(key))
|
|
hotkeyActions[key] += action;
|
|
else
|
|
hotkeyActions[key] = action;
|
|
}
|
|
|
|
// Method to unregister a hotkey
|
|
public void UnregisterHotkey(KeyCode key, Action action)
|
|
{
|
|
if (hotkeyActions.ContainsKey(key))
|
|
{
|
|
hotkeyActions[key] -= action;
|
|
if (hotkeyActions[key] == null) hotkeyActions.Remove(key);
|
|
}
|
|
}
|
|
|
|
|
|
public KeyCode GetHotkey(string actionName)
|
|
{
|
|
return actionKeys.ContainsKey(actionName) ? actionKeys[actionName] : KeyCode.None;
|
|
}
|
|
|
|
public Dictionary<string, KeyCode> GetAllHotkeys()
|
|
{
|
|
return new Dictionary<string, KeyCode>(actionKeys);
|
|
}
|
|
|
|
public void UpdateHotkey(string actionName, KeyCode newKey)
|
|
{
|
|
if (actionKeys.ContainsKey(actionName))
|
|
{
|
|
var oldKey = actionKeys[actionName];
|
|
if (hotkeyActions.ContainsKey(oldKey))
|
|
{
|
|
var action = hotkeyActions[oldKey];
|
|
hotkeyActions.Remove(oldKey);
|
|
RegisterHotkey(actionName, newKey, action);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Method to clear all hotkeys
|
|
public void ClearHotkeys()
|
|
{
|
|
hotkeyActions.Clear();
|
|
}
|
|
} |