]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/xonotic/keybinder.c
Merge branch 'master' of git://de.git.xonotic.org/xonotic/xonotic-data.pk3dir
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / keybinder.c
index 2eb51755dca6027427873bc4aabe7719fac22f3c..1107e60abc6b3296e77dd9582bbe6613a267ef32 100644 (file)
@@ -33,6 +33,8 @@ void KeyBinder_Bind_Edit(entity btn, entity me);
 
 #ifdef IMPLEMENTATION
 
+string KEY_NOT_BOUND_CMD = "// not bound";
+
 #define MAX_KEYS_PER_FUNCTION 2
 #define MAX_KEYBINDS 256
 string Xonotic_KeyBinds_Functions[MAX_KEYBINDS];
@@ -45,7 +47,7 @@ void Xonotic_KeyBinds_Read()
        string s;
 
        Xonotic_KeyBinds_Count = 0;
-       fh = fopen("keybinds.txt", FILE_READ);
+       fh = fopen(language_filename("keybinds.txt"), FILE_READ);
        if(fh < 0)
                return;
        while((s = fgets(fh)))
@@ -68,6 +70,17 @@ entity makeXonoticKeyBinder()
        me.configureXonoticKeyBinder(me);
        return me;
 }
+void replace_bind(string from, string to)
+{
+       float n, j, k;
+       n = tokenize(findkeysforcommand(from, 0)); // uses '...' strings
+       for(j = 0; j < n; ++j)
+       {
+               k = stof(argv(j));
+               if(k != -1)
+                       localcmd("\nbind \"", keynumtostring(k), "\" \"", to, "\"\n");
+       }
+}
 void XonoticKeyBinder_configureXonoticKeyBinder(entity me)
 {
        me.configureXonoticListBox(me);
@@ -75,6 +88,18 @@ void XonoticKeyBinder_configureXonoticKeyBinder(entity me)
                Xonotic_KeyBinds_Read();
        me.nItems = Xonotic_KeyBinds_Count;
        me.setSelected(me, 0);
+
+       // TEMP: Xonotic 0.1 to later
+       replace_bind("impulse 1", "weapon_group_1");
+       replace_bind("impulse 2", "weapon_group_2");
+       replace_bind("impulse 3", "weapon_group_3");
+       replace_bind("impulse 4", "weapon_group_4");
+       replace_bind("impulse 5", "weapon_group_5");
+       replace_bind("impulse 6", "weapon_group_6");
+       replace_bind("impulse 7", "weapon_group_7");
+       replace_bind("impulse 8", "weapon_group_8");
+       replace_bind("impulse 9", "weapon_group_9");
+       replace_bind("impulse 14", "weapon_group_0");
 }
 void XonoticKeyBinder_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
 {
@@ -116,7 +141,7 @@ void XonoticKeyBinder_keyGrabbed(entity me, float key, float ascii)
        if(func == "")
                return;
 
-       n = tokenize(findkeysforcommand(func)); // uses '...' strings
+       n = tokenize(findkeysforcommand(func, 0)); // uses '...' strings
        nvalid = 0;
        for(j = 0; j < n; ++j)
        {
@@ -130,10 +155,12 @@ void XonoticKeyBinder_keyGrabbed(entity me, float key, float ascii)
                {
                        k = stof(argv(j));
                        if(k != -1)
-                               localcmd("\nunbind \"", keynumtostring(k), "\"\n");
+                               //localcmd("\nunbind \"", keynumtostring(k), "\"\n");
+                               localcmd("\nbind \"", keynumtostring(k), "\" \"", KEY_NOT_BOUND_CMD, "\"\n");
                }
        }
        localcmd("\nbind \"", keynumtostring(key), "\" \"", func, "\"\n");
+       localcmd("-zoom\n"); // to make sure we aren't in togglezoom'd state
 }
 void XonoticKeyBinder_editUserbind(entity me, string theName, string theCommandPress, string theCommandRelease)
 {
@@ -186,14 +213,15 @@ void KeyBinder_Bind_Clear(entity btn, entity me)
        if(func == "")
                return;
 
-       n = tokenize(findkeysforcommand(func)); // uses '...' strings
+       n = tokenize(findkeysforcommand(func, 0)); // uses '...' strings
        for(j = 0; j < n; ++j)
        {
                k = stof(argv(j));
                if(k != -1)
-                       localcmd("\nunbind \"", keynumtostring(k), "\"\n");
+                       //localcmd("\nunbind \"", keynumtostring(k), "\"\n");
+                       localcmd("\nbind \"", keynumtostring(k), "\" \"", KEY_NOT_BOUND_CMD, "\"\n");
        }
-
+       localcmd("-zoom\n"); // to make sure we aren't in togglezoom'd state
 }
 void XonoticKeyBinder_clickListBoxItem(entity me, float i, vector where)
 {
@@ -240,10 +268,12 @@ float XonoticKeyBinder_keyDown(entity me, float key, float ascii, float shift)
        switch(key)
        {
                case K_ENTER:
+               case K_KP_ENTER:
                case K_SPACE:
                        KeyBinder_Bind_Change(me, me);
                        break;
                case K_DEL:
+               case K_KP_DEL:
                case K_BACKSPACE:
                        KeyBinder_Bind_Clear(me, me);
                        break;
@@ -301,7 +331,7 @@ void XonoticKeyBinder_drawListBoxItem(entity me, float i, vector absSize, float
        draw_Text(me.realUpperMargin * eY + extraMargin * eX, s, me.realFontSize, theColor, theAlpha, 0);
        if(func != "")
        {
-               n = tokenize(findkeysforcommand(func)); // uses '...' strings
+               n = tokenize(findkeysforcommand(func, 0)); // uses '...' strings
                s = "";
                for(j = 0; j < n; ++j)
                {