Merge remote branch 'origin/master' into fruitiex/fruitbalance
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / crosshairbutton.c
1 #ifdef INTERFACE
2 CLASS(XonoticCrosshairButton) EXTENDS(RadioButton)
3         METHOD(XonoticCrosshairButton, configureXonoticCrosshairButton, void(entity, float, float))
4         METHOD(XonoticCrosshairButton, setChecked, void(entity, float))
5         METHOD(XonoticCrosshairButton, draw, void(entity))
6         ATTRIB(XonoticCrosshairButton, fontSize, float, SKINFONTSIZE_NORMAL)
7         ATTRIB(XonoticCrosshairButton, image, string, SKINGFX_CROSSHAIRBUTTON)
8
9         ATTRIB(XonoticCrosshairButton, useDownAsChecked, float, 1)
10         ATTRIB(XonoticCrosshairButton, src3, string, string_null)
11
12         ATTRIB(XonoticCrosshairButton, cvarName, string, string_null)
13         ATTRIB(XonoticCrosshairButton, cvarValueFloat, float, 0)
14         METHOD(XonoticCrosshairButton, loadCvars, void(entity))
15         METHOD(XonoticCrosshairButton, saveCvars, void(entity))
16 ENDCLASS(XonoticCrosshairButton)
17 entity makeXonoticCrosshairButton(float, float);
18 #endif
19
20 #ifdef IMPLEMENTATION
21 entity makeXonoticCrosshairButton(float theGroup, float theCrosshair)
22 {
23         entity me;
24         me = spawnXonoticCrosshairButton();
25         me.configureXonoticCrosshairButton(me, theGroup, theCrosshair);
26         return me;
27 }
28 void XonoticCrosshairButton_configureXonoticCrosshairButton(entity me, float theGroup, float theCrosshair)
29 {
30         me.cvarName = "crosshair";
31         me.cvarValueFloat = theCrosshair;
32         me.loadCvars(me);
33         me.configureRadioButton(me, string_null, me.fontSize, me.image, theGroup, 0);
34         me.srcMulti = 1;
35         me.src3 = strzone(strcat("/gfx/crosshair", ftos(me.cvarValueFloat)));
36 }
37 void XonoticCrosshairButton_setChecked(entity me, float val)
38 {
39         if(val != me.checked)
40         {
41                 me.checked = val;
42                 me.saveCvars(me);
43         }
44 }
45 void XonoticCrosshairButton_loadCvars(entity me)
46 {
47         if not(me.cvarName)
48                 return;
49
50         me.checked = (cvar(me.cvarName) == me.cvarValueFloat);
51 }
52 void XonoticCrosshairButton_saveCvars(entity me)
53 {
54         if not(me.cvarName)
55                 return;
56
57         if(me.checked)
58                 cvar_set(me.cvarName, ftos(me.cvarValueFloat));
59         // TODO on an apply button, read _cl_color and execute the color command for it
60 }
61 void XonoticCrosshairButton_draw(entity me)
62 {
63         vector sz, rgb;
64         float a;
65
66         rgb = eX * cvar("crosshair_color_red") + eY * cvar("crosshair_color_green") + eZ * cvar("crosshair_color_blue");
67         a = cvar("crosshair_color_alpha");
68
69         if(!me.checked && !me.focused)
70         {
71                 a *= me.disabledAlpha;
72                 rgb = '1 1 1';
73         }
74
75         SUPER(XonoticCrosshairButton).draw(me);
76
77         sz = draw_PictureSize(me.src3);
78         sz = globalToBoxSize(sz, draw_scale);
79         sz = sz * cvar("crosshair_size");
80         if(sz_x > 0.95)
81                 sz = sz * (0.95 / sz_x);
82         if(sz_y > 0.95)
83                 sz = sz * (0.95 / sz_y);
84
85         draw_Picture('0.5 0.5 0' - 0.5 * sz, me.src3, sz, rgb, a);
86 }
87 #endif