]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/xonotic/weaponslist.qc
Merge branch 'master' into mirio/balance
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / weaponslist.qc
1 #ifndef WEAPONSLIST_H
2 #define WEAPONSLIST_H
3 #include "listbox.qc"
4 CLASS(XonoticWeaponsList, XonoticListBox)
5         METHOD(XonoticWeaponsList, configureXonoticWeaponsList, void(entity));
6         METHOD(XonoticWeaponsList, toString, string(entity));
7         ATTRIB(XonoticWeaponsList, rowsPerItem, float, 1)
8         METHOD(XonoticWeaponsList, draw, void(entity));
9         METHOD(XonoticWeaponsList, drawListBoxItem, void(entity, int, vector, bool, bool));
10         METHOD(XonoticWeaponsList, resizeNotify, void(entity, vector, vector, vector, vector));
11         METHOD(XonoticWeaponsList, keyDown, float(entity, float, float, float));
12         ATTRIB(XonoticWeaponsList, realFontSize, vector, '0 0 0')
13         ATTRIB(XonoticWeaponsList, realUpperMargin, float, 0)
14         METHOD(XonoticWeaponsList, mouseDrag, float(entity, vector));
15
16         ATTRIB(XonoticWeaponsList, applyButton, entity, NULL)
17 ENDCLASS(XonoticWeaponsList)
18 entity makeXonoticWeaponsList();
19 void WeaponsList_MoveUp_Click(entity btn, entity me);
20 void WeaponsList_MoveDown_Click(entity box, entity me);
21 #endif
22
23 #ifdef IMPLEMENTATION
24 entity makeXonoticWeaponsList()
25 {
26         entity me;
27         me = NEW(XonoticWeaponsList);
28         me.configureXonoticWeaponsList(me);
29         return me;
30 }
31 void XonoticWeaponsList_configureXonoticWeaponsList(entity me)
32 {
33         me.configureXonoticListBox(me);
34 }
35 void XonoticWeaponsList_draw(entity me)
36 {
37         // read in cvar?
38         string s, t;
39         s = W_NumberWeaponOrder(cvar_string("cl_weaponpriority"));
40         t = W_FixWeaponOrder(s, 1);
41         if(t != s)
42                 cvar_set("cl_weaponpriority", W_NameWeaponOrder(t));
43         me.nItems = tokenize_console(t);
44         SUPER(XonoticWeaponsList).draw(me);
45 }
46 void WeaponsList_MoveUp_Click(entity box, entity me)
47 {
48         if(me.selectedItem > 0)
49         {
50                 cvar_set("cl_weaponpriority", swapInPriorityList(cvar_string("cl_weaponpriority"), me.selectedItem - 1, me.selectedItem));
51                 me.setSelected(me, me.selectedItem - 1);
52         }
53 }
54 void WeaponsList_MoveDown_Click(entity box, entity me)
55 {
56         if(me.selectedItem < me.nItems - 1)
57         {
58                 cvar_set("cl_weaponpriority", swapInPriorityList(cvar_string("cl_weaponpriority"), me.selectedItem, me.selectedItem + 1));
59                 me.setSelected(me, me.selectedItem + 1);
60         }
61 }
62 void XonoticWeaponsList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
63 {
64         SUPER(XonoticWeaponsList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
65
66         me.realFontSize_y = me.fontSize / (absSize.y * me.itemHeight);
67         me.realFontSize_x = me.fontSize / (absSize.x * (1 - me.controlWidth));
68         me.realUpperMargin = 0.5 * (1 - me.realFontSize.y);
69 }
70 float XonoticWeaponsList_mouseDrag(entity me, vector pos)
71 {
72         int i = me.selectedItem;
73         float f = SUPER(XonoticWeaponsList).mouseDrag(me, pos);
74
75         if(me.pressed != 1) // don't change priority if the person is just scrolling
76         {
77                 if(me.selectedItem != i)
78                 {
79                         if(me.applyButton)
80                                 me.applyButton.disabled = false;
81                         cvar_set("cl_weaponpriority", swapInPriorityList(cvar_string("cl_weaponpriority"), me.selectedItem, i));
82                 }
83         }
84
85         return f;
86 }
87 string XonoticWeaponsList_toString(entity me)
88 {
89         float n, i;
90         string s;
91         entity e;
92         n = tokenize_console(W_NumberWeaponOrder(cvar_string("cl_weaponpriority")));
93         s = "";
94         for(i = 0; i < n; ++i)
95         {
96                 e = Weapons_from(stof(argv(i)));
97                 s = strcat(s, e.m_name, ", ");
98         }
99         return substring(s, 0, strlen(s) - 2);
100 }
101 void XonoticWeaponsList_drawListBoxItem(entity me, int i, vector absSize, bool isSelected, bool isFocused)
102 {
103         entity e;
104         if(isSelected)
105                 draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
106         else if(isFocused)
107         {
108                 me.focusedItemAlpha = getFadedAlpha(me.focusedItemAlpha, SKINALPHA_LISTBOX_FOCUSED, SKINFADEALPHA_LISTBOX_FOCUSED);
109                 draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_FOCUSED, me.focusedItemAlpha);
110         }
111         e = Weapons_from(stof(argv(i)));
112         string msg = e.m_name;
113         if(e.spawnflags & WEP_FLAG_MUTATORBLOCKED)
114                 msg = strcat(msg, "*");
115
116         vector save_fontscale = draw_fontscale;
117         float f = draw_CondensedFontFactor(msg, false, me.realFontSize, 1);
118         draw_fontscale.x *= f;
119         vector fs = me.realFontSize;
120         fs.x *= f;
121         draw_Text(me.realUpperMargin * eY, msg, fs, SKINCOLOR_TEXT, SKINALPHA_TEXT, 0);
122         draw_fontscale = save_fontscale;
123 }
124
125 float XonoticWeaponsList_keyDown(entity me, float scan, float ascii, float shift)
126 {
127         if(ascii == 43) // +
128         {
129                 WeaponsList_MoveUp_Click(NULL, me);
130                 return 1;
131         }
132         else if(ascii == 45) // -
133         {
134                 WeaponsList_MoveDown_Click(NULL, me);
135                 return 1;
136         }
137         else if(SUPER(XonoticWeaponsList).keyDown(me, scan, ascii, shift))
138                 return 1;
139         return 0;
140 }
141 #endif