]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/xonotic/weaponslist.c
rebrand nexuiz -> xonotic, will fix possible mess later
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / weaponslist.c
diff --git a/qcsrc/menu/xonotic/weaponslist.c b/qcsrc/menu/xonotic/weaponslist.c
new file mode 100644 (file)
index 0000000..012f7bc
--- /dev/null
@@ -0,0 +1,118 @@
+#ifdef INTERFACE
+CLASS(XonoticWeaponsList) EXTENDS(XonoticListBox)
+       METHOD(XonoticWeaponsList, configureXonoticWeaponsList, void(entity))
+       METHOD(XonoticWeaponsList, toString, string(entity))
+       ATTRIB(XonoticWeaponsList, rowsPerItem, float, 1)
+       METHOD(XonoticWeaponsList, draw, void(entity))
+       METHOD(XonoticWeaponsList, drawListBoxItem, void(entity, float, vector, float))
+       METHOD(XonoticWeaponsList, resizeNotify, void(entity, vector, vector, vector, vector))
+       METHOD(XonoticWeaponsList, keyDown, float(entity, float, float, float))
+       ATTRIB(XonoticWeaponsList, realFontSize, vector, '0 0 0')
+       ATTRIB(XonoticWeaponsList, realUpperMargin, float, 0)
+       METHOD(XonoticWeaponsList, mouseDrag, float(entity, vector))
+       ATTRIB(XonoticWeaponsList, scrollbarWidth, float, 0)
+ENDCLASS(XonoticWeaponsList)
+entity makeXonoticWeaponsList();
+void WeaponsList_MoveUp_Click(entity btn, entity me);
+void WeaponsList_MoveDown_Click(entity box, entity me);
+#endif
+
+#ifdef IMPLEMENTATION
+entity makeXonoticWeaponsList()
+{
+       entity me;
+       me = spawnXonoticWeaponsList();
+       me.configureXonoticWeaponsList(me);
+       return me;
+}
+void configureXonoticWeaponsListXonoticWeaponsList(entity me)
+{
+       me.configureXonoticListBox(me);
+}
+void drawXonoticWeaponsList(entity me)
+{
+       // read in cvar?
+       string s, t;
+       s = W_NumberWeaponOrder(cvar_string("cl_weaponpriority"));
+       t = W_FixWeaponOrder(s, 1);
+       if(t != s)
+       {
+               print("AUTOFIXED\n");
+               cvar_set("cl_weaponpriority", W_NameWeaponOrder(t));
+       }
+       me.nItems = tokenize_console(t);
+       drawListBox(me);
+}
+void WeaponsList_MoveUp_Click(entity box, entity me)
+{
+       if(me.selectedItem > 0)
+       {
+               cvar_set("cl_weaponpriority", swapInPriorityList(cvar_string("cl_weaponpriority"), me.selectedItem - 1, me.selectedItem));
+               me.selectedItem -= 1;
+       }
+}
+void WeaponsList_MoveDown_Click(entity box, entity me)
+{
+       if(me.selectedItem < me.nItems - 1)
+       {
+               cvar_set("cl_weaponpriority", swapInPriorityList(cvar_string("cl_weaponpriority"), me.selectedItem, me.selectedItem + 1));
+               me.selectedItem += 1;
+       }
+}
+void resizeNotifyXonoticWeaponsList(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
+{
+       resizeNotifyXonoticListBox(me, relOrigin, relSize, absOrigin, absSize);
+
+       me.realFontSize_y = me.fontSize / (absSize_y * me.itemHeight);
+       me.realFontSize_x = me.fontSize / (absSize_x * (1 - me.controlWidth));
+       me.realUpperMargin = 0.5 * (1 - me.realFontSize_y);
+}
+float mouseDragXonoticWeaponsList(entity me, vector pos)
+{
+       float f, i;
+       i = me.selectedItem;
+       f = mouseDragListBox(me, pos);
+       if(me.selectedItem != i)
+               cvar_set("cl_weaponpriority", swapInPriorityList(cvar_string("cl_weaponpriority"), me.selectedItem, i));
+       return f;
+}
+string toStringXonoticWeaponsList(entity me)
+{
+       float n, i;
+       string s;
+       entity e;
+       n = tokenize_console(W_NumberWeaponOrder(cvar_string("cl_weaponpriority")));
+       s = "";
+       for(i = 0; i < n; ++i)
+       {
+               e = get_weaponinfo(stof(argv(i)));
+               s = strcat(s, e.message, ", ");
+       }
+       return substring(s, 0, strlen(s) - 2);
+}
+void drawListBoxItemXonoticWeaponsList(entity me, float i, vector absSize, float isSelected)
+{
+       entity e;
+       if(isSelected)
+               draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
+       e = get_weaponinfo(stof(argv(i)));
+       draw_Text(me.realUpperMargin * eY, e.message, me.realFontSize, '1 1 1', SKINALPHA_TEXT, 0);
+}
+
+float keyDownXonoticWeaponsList(entity me, float scan, float ascii, float shift)
+{
+       if(ascii == 43) // +
+       {
+               WeaponsList_MoveUp_Click(NULL, me);
+               return 1;
+       }
+       else if(scan == 45) // -
+       {
+               WeaponsList_MoveDown_Click(NULL, me);
+               return 1;
+       }
+       else if(keyDownListBox(me, scan, ascii, shift))
+               return 1;
+       return 0;
+}
+#endif