]> de.git.xonotic.org Git - voretournament/voretournament.git/blob - data/qcsrc/menu/voret/colorbutton.c
Re-arrange player colors in rainbow order, as done in Xonotic
[voretournament/voretournament.git] / data / qcsrc / menu / voret / colorbutton.c
1 #ifdef INTERFACE\r
2 CLASS(VoretColorButton) EXTENDS(RadioButton)\r
3         METHOD(VoretColorButton, configureVoretColorButton, void(entity, float, float, float))\r
4         METHOD(VoretColorButton, setChecked, void(entity, float))\r
5         METHOD(VoretColorButton, draw, void(entity))\r
6         ATTRIB(VoretColorButton, fontSize, float, SKINFONTSIZE_NORMAL)\r
7         ATTRIB(VoretColorButton, image, string, SKINGFX_COLORBUTTON)\r
8         ATTRIB(VoretColorButton, image2, string, SKINGFX_COLORBUTTON_COLOR)\r
9 \r
10         ATTRIB(VoretColorButton, useDownAsChecked, float, 1)\r
11 \r
12         ATTRIB(VoretColorButton, cvarPart, float, 0)\r
13         ATTRIB(VoretColorButton, cvarName, string, string_null)\r
14         ATTRIB(VoretColorButton, cvarValueFloat, float, 0)\r
15         METHOD(VoretColorButton, loadCvars, void(entity))\r
16         METHOD(VoretColorButton, saveCvars, void(entity))\r
17 ENDCLASS(VoretColorButton)\r
18 entity makeVoretColorButton(float, float, float);\r
19 #endif\r
20 \r
21 #ifdef IMPLEMENTATION\r
22 entity makeVoretColorButton(float theGroup, float theColor, float theValue)\r
23 {\r
24         entity me;\r
25         me = spawnVoretColorButton();\r
26         me.configureVoretColorButton(me, theGroup, theColor, theValue);\r
27         return me;\r
28 }\r
29 void configureVoretColorButtonVoretColorButton(entity me, float theGroup, float theColor, float theValue)\r
30 {\r
31         switch(theValue)\r
32         {\r
33                 // rearrange 1..15 for rainbow order\r
34                 case  1: theValue = 10; break;\r
35                 case  2: theValue =  4; break;\r
36                 case  3: theValue =  1; break;\r
37                 case  4: theValue = 14; break;\r
38                 case  5: theValue = 12; break;\r
39                 case  6: theValue =  7; break;\r
40                 case  7: theValue =  3; break;\r
41                 case  8: theValue =  2; break;\r
42                 case  9: theValue =  6; break;\r
43                 case 10: theValue =  5; break;\r
44                 case 11: theValue = 13; break;\r
45                 case 12: theValue = 11; break;\r
46                 case 13: theValue =  8; break;\r
47                 case 14: theValue =  9; break;\r
48                 case 15: theValue = 15; break;\r
49                 default:\r
50                         // no change\r
51                         break;\r
52         }\r
53         me.cvarName = "_cl_color";\r
54         me.cvarValueFloat = theValue;\r
55         me.cvarPart = theColor;\r
56         me.loadCvars(me);\r
57         me.configureRadioButton(me, string_null, me.fontSize, me.image, theGroup, 0);\r
58         me.srcMulti = 1;\r
59         me.src2 = me.image2;\r
60 }\r
61 void setCheckedVoretColorButton(entity me, float val)\r
62 {\r
63         if(val != me.checked)\r
64         {\r
65                 me.checked = val;\r
66                 me.saveCvars(me);\r
67         }\r
68 }\r
69 void loadCvarsVoretColorButton(entity me)\r
70 {\r
71         if not(me.cvarName)\r
72                 return;\r
73 \r
74         if(me.cvarPart == 1)\r
75                 me.checked = (cvar(me.cvarName) & 240) == me.cvarValueFloat * 16;\r
76         else\r
77                 me.checked = (cvar(me.cvarName) & 15) == me.cvarValueFloat;\r
78 }\r
79 void saveCvarsVoretColorButton(entity me)\r
80 {\r
81         if not(me.cvarName)\r
82                 return;\r
83 \r
84         if(me.checked)\r
85         {\r
86                 if(me.cvarPart == 1)\r
87                         cvar_set(me.cvarName, ftos(cvar(me.cvarName) & 15 + me.cvarValueFloat * 16));\r
88                 else\r
89                         cvar_set(me.cvarName, ftos(cvar(me.cvarName) & 240 + me.cvarValueFloat));\r
90         }\r
91         // TODO on an apply button, read _cl_color and execute the color command for it\r
92 }\r
93 void drawVoretColorButton(entity me)\r
94 {\r
95         me.color2 = colormapPaletteColor(me.cvarValueFloat, me.cvarPart);\r
96         drawCheckBox(me);\r
97 }\r
98 #endif\r