]> de.git.xonotic.org Git - voretournament/voretournament.git/blob - data/qcsrc/menu/voret/weaponslist.c
Optimize menu code for my last change
[voretournament/voretournament.git] / data / qcsrc / menu / voret / weaponslist.c
1 #ifdef INTERFACE\r
2 CLASS(VoretWeaponsList) EXTENDS(VoretListBox)\r
3         METHOD(VoretWeaponsList, configureVoretWeaponsList, void(entity))\r
4         METHOD(VoretWeaponsList, toString, string(entity))\r
5         ATTRIB(VoretWeaponsList, rowsPerItem, float, 1)\r
6         METHOD(VoretWeaponsList, draw, void(entity))\r
7         METHOD(VoretWeaponsList, drawListBoxItem, void(entity, float, vector, float))\r
8         METHOD(VoretWeaponsList, resizeNotify, void(entity, vector, vector, vector, vector))\r
9         METHOD(VoretWeaponsList, keyDown, float(entity, float, float, float))\r
10         ATTRIB(VoretWeaponsList, realFontSize, vector, '0 0 0')\r
11         ATTRIB(VoretWeaponsList, realUpperMargin, float, 0)\r
12         METHOD(VoretWeaponsList, mouseDrag, float(entity, vector))\r
13         ATTRIB(VoretWeaponsList, scrollbarWidth, float, 0)\r
14 ENDCLASS(VoretWeaponsList)\r
15 entity makeVoretWeaponsList();\r
16 void WeaponsList_MoveUp_Click(entity btn, entity me);\r
17 void WeaponsList_MoveDown_Click(entity box, entity me);\r
18 #endif\r
19 \r
20 #ifdef IMPLEMENTATION\r
21 entity makeVoretWeaponsList()\r
22 {\r
23         entity me;\r
24         me = spawnVoretWeaponsList();\r
25         me.configureVoretWeaponsList(me);\r
26         return me;\r
27 }\r
28 void configureVoretWeaponsListVoretWeaponsList(entity me)\r
29 {\r
30         me.configureVoretListBox(me);\r
31 }\r
32 void drawVoretWeaponsList(entity me)\r
33 {\r
34         // read in cvar?\r
35         string s, t;\r
36         s = W_NumberWeaponOrder(cvar_string("cl_weaponpriority"));\r
37         t = W_FixWeaponOrder(s, 1);\r
38         if(t != s)\r
39         {\r
40                 print("AUTOFIXED\n");\r
41                 cvar_set("cl_weaponpriority", W_NameWeaponOrder(t));\r
42         }\r
43         me.nItems = tokenize_console(t);\r
44         drawListBox(me);\r
45 }\r
46 void WeaponsList_MoveUp_Click(entity box, entity me)\r
47 {\r
48         if(me.selectedItem > 0)\r
49         {\r
50                 cvar_set("cl_weaponpriority", swapInPriorityList(cvar_string("cl_weaponpriority"), me.selectedItem - 1, me.selectedItem));\r
51                 me.selectedItem -= 1;\r
52         }\r
53 }\r
54 void WeaponsList_MoveDown_Click(entity box, entity me)\r
55 {\r
56         if(me.selectedItem < me.nItems - 1)\r
57         {\r
58                 cvar_set("cl_weaponpriority", swapInPriorityList(cvar_string("cl_weaponpriority"), me.selectedItem, me.selectedItem + 1));\r
59                 me.selectedItem += 1;\r
60         }\r
61 }\r
62 void resizeNotifyVoretWeaponsList(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)\r
63 {\r
64         resizeNotifyVoretListBox(me, relOrigin, relSize, absOrigin, absSize);\r
65 \r
66         me.realFontSize_y = me.fontSize / (absSize_y * me.itemHeight);\r
67         me.realFontSize_x = me.fontSize / (absSize_x * (1 - me.controlWidth));\r
68         me.realUpperMargin = 0.5 * (1 - me.realFontSize_y);\r
69 }\r
70 float mouseDragVoretWeaponsList(entity me, vector pos)\r
71 {\r
72         float f, i;\r
73         i = me.selectedItem;\r
74         f = mouseDragListBox(me, pos);\r
75         if(me.selectedItem != i)\r
76                 cvar_set("cl_weaponpriority", swapInPriorityList(cvar_string("cl_weaponpriority"), me.selectedItem, i));\r
77         return f;\r
78 }\r
79 string toStringVoretWeaponsList(entity me)\r
80 {\r
81         float n, i;\r
82         string s;\r
83         entity e;\r
84         n = tokenize_console(W_NumberWeaponOrder(cvar_string("cl_weaponpriority")));\r
85         s = "";\r
86         for(i = 0; i < n; ++i)\r
87         {\r
88                 e = get_weaponinfo(stof(argv(i)));\r
89                 s = strcat(s, e.message, ", ");\r
90         }\r
91         return substring(s, 0, strlen(s) - 2);\r
92 }\r
93 void drawListBoxItemVoretWeaponsList(entity me, float i, vector absSize, float isSelected)\r
94 {\r
95         entity e;\r
96         if(isSelected)\r
97                 draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);\r
98         e = get_weaponinfo(stof(argv(i)));\r
99         draw_Text(me.realUpperMargin * eY, e.message, me.realFontSize, '1 1 1', SKINALPHA_TEXT, 0);\r
100 }\r
101 \r
102 float keyDownVoretWeaponsList(entity me, float scan, float ascii, float shift)\r
103 {\r
104         if(ascii == 43) // +\r
105         {\r
106                 WeaponsList_MoveUp_Click(NULL, me);\r
107                 return 1;\r
108         }\r
109         else if(scan == 45) // -\r
110         {\r
111                 WeaponsList_MoveDown_Click(NULL, me);\r
112                 return 1;\r
113         }\r
114         else if(keyDownListBox(me, scan, ascii, shift))\r
115                 return 1;\r
116         return 0;\r
117 }\r
118 #endif\r