]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/xonotic/colorbutton.qc
Merge branch 'master' into TimePath/vehicles_cleanup
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / colorbutton.qc
1 #ifndef COLORBUTTON_H
2 #define COLORBUTTON_H
3 #include "../item/radiobutton.qc"
4 CLASS(XonoticColorButton, RadioButton)
5         METHOD(XonoticColorButton, configureXonoticColorButton, void(entity, float, float, float));
6         METHOD(XonoticColorButton, setChecked, void(entity, float));
7         METHOD(XonoticColorButton, draw, void(entity));
8         ATTRIB(XonoticColorButton, fontSize, float, 0)
9         ATTRIB(XonoticColorButton, image, string, SKINGFX_COLORBUTTON)
10
11         ATTRIB(XonoticColorButton, useDownAsChecked, float, 1)
12
13         ATTRIB(XonoticColorButton, cvarPart, float, 0)
14         ATTRIB(XonoticColorButton, cvarName, string, string_null)
15         ATTRIB(XonoticColorButton, cvarValueFloat, float, 0)
16         METHOD(XonoticColorButton, loadCvars, void(entity));
17         METHOD(XonoticColorButton, saveCvars, void(entity));
18 ENDCLASS(XonoticColorButton)
19 entity makeXonoticColorButton(float, float, float);
20 #endif
21
22 #ifdef IMPLEMENTATION
23 entity makeXonoticColorButton(float theGroup, float theColor, float theValue)
24 {
25         entity me;
26         me = NEW(XonoticColorButton);
27         me.configureXonoticColorButton(me, theGroup, theColor, theValue);
28         return me;
29 }
30 void XonoticColorButton_configureXonoticColorButton(entity me, float theGroup, float theColor, float theValue)
31 {
32         switch(theValue)
33         {
34                 // rearrange 1..14 for rainbow order
35                 case  1: theValue = 10; break;
36                 case  2: theValue =  4; break;
37                 case  3: theValue =  1; break;
38                 case  4: theValue = 14; break;
39                 case  5: theValue = 12; break;
40                 case  6: theValue =  7; break;
41                 case  7: theValue =  3; break;
42                 case  8: theValue =  2; break;
43                 case  9: theValue =  6; break;
44                 case 10: theValue =  5; break;
45                 case 11: theValue = 13; break;
46                 case 12: theValue = 11; break;
47                 case 13: theValue =  8; break;
48                 case 14: theValue =  9; break;
49                 default:
50                         // no change
51                         break;
52         }
53         me.cvarName = "_cl_color";
54         me.cvarValueFloat = theValue;
55         me.cvarPart = theColor;
56         me.loadCvars(me);
57         me.configureRadioButton(me, string_null, me.fontSize, me.image, theGroup, 0);
58 }
59 void XonoticColorButton_setChecked(entity me, float val)
60 {
61         if(val != me.checked)
62         {
63                 me.checked = val;
64                 me.saveCvars(me);
65         }
66 }
67 void XonoticColorButton_loadCvars(entity me)
68 {
69         if (!me.cvarName)
70                 return;
71
72         if(cvar_string(me.cvarName) == cvar_defstring(me.cvarName))
73                 cvar_set(me.cvarName, ftos(16 * floor(random() * 15) + floor(random() * 15)));
74
75         if(me.cvarPart == 1)
76                 me.checked = (cvar(me.cvarName) & 240) == me.cvarValueFloat * 16;
77         else
78                 me.checked = (cvar(me.cvarName) & 15) == me.cvarValueFloat;
79 }
80 void XonoticColorButton_saveCvars(entity me)
81 {
82         if (!me.cvarName)
83                 return;
84
85         if(me.checked)
86         {
87                 if(me.cvarPart == 1)
88                         cvar_set(me.cvarName, ftos((cvar(me.cvarName) & 15) + me.cvarValueFloat * 16));
89                 else
90                         cvar_set(me.cvarName, ftos((cvar(me.cvarName) & 240) + me.cvarValueFloat));
91         }
92         // TODO on an apply button, read _cl_color and execute the color command for it
93 }
94 void XonoticColorButton_draw(entity me)
95 {
96         me.color  = colormapPaletteColor(me.cvarValueFloat, me.cvarPart);
97         me.colorC = me.color;
98         me.colorF = me.color;
99         me.colorD = me.color;
100         SUPER(XonoticColorButton).draw(me);
101 }
102 #endif