public void addGlobalKeyAction(String name, KeyCodes k1, KeyCodes? k2 = null, KeyCodes? k3 = null, Action OnPress = null, Action OnRelease = null, Action OnHold = null)
        {
            KeyBundle keyBundle;
            if (k2 == null) keyBundle = new KeyBundle(k1);
            else if (k3 == null) keyBundle = new KeyBundle((KeyCodes)k2, k1);
            else keyBundle = new KeyBundle((KeyCodes)k3, (KeyCodes)k2, k1);

            var keyAction = new KeyAction(name, OnPress, new HashSet<KeyBundle>() { keyBundle });

            keyAction.releaseAction = OnRelease;
            keyAction.holdAction = OnHold;

            Keybinds.Add(keyBundle, keyAction);
        }
 public void Add(string name, KeyBundle bundle, Action action, Action holdAction = null)
 {
     KeyAction ka = new KeyAction(name, action, new HashSet<KeyBundle>() { bundle });
     Keybinds.Add(bundle, ka);
 }
        public void Add(string name, HashSet<KeyBundle> bundles, Action action)
        {
            KeyAction ka = new KeyAction(name, action, bundles);

            foreach(KeyBundle b in bundles)
            {
                Keybinds.Add(b, ka);
            }
        }
        protected void addProcessKeyAction(String name, KeyCodes k1, KeyCodes? k2 = null, KeyCodes? k3 = null, Action OnPress = null, Action OnRelease = null, Action OnHold = null)
        {
            KeyBundle keyBundle;
            if (k2 == null) keyBundle = new KeyBundle(k1);
            else if (k3 == null) keyBundle = new KeyBundle((KeyCodes)k2, k1);
            else keyBundle = new KeyBundle((KeyCodes)k3, (KeyCodes) k2, k1);

            var keyAction = new KeyAction(name, OnPress, new HashSet<KeyBundle>() { keyBundle });

            keyAction.releaseAction = OnRelease;
            keyAction.holdAction = OnHold;

            processKeyActions.Add(keyAction, keyBundle);
        }