Optimize menu code for my last change
[voretournament/voretournament.git] / data / qcsrc / menu / voret / slider_decibels.c
1 #ifdef INTERFACE\r
2 CLASS(VoretDecibelsSlider) EXTENDS(VoretSlider)\r
3         METHOD(VoretDecibelsSlider, loadCvars, void(entity))\r
4         METHOD(VoretDecibelsSlider, saveCvars, void(entity))\r
5         METHOD(VoretDecibelsSlider, valueToText, string(entity, float))\r
6 ENDCLASS(VoretDecibelsSlider)\r
7 entity makeVoretDecibelsSlider(float, float, float, string);\r
8 #endif\r
9 \r
10 #ifdef IMPLEMENTATION\r
11 \r
12 entity makeVoretDecibelsSlider(float theValueMin, float theValueMax, float theValueStep, string theCvar)\r
13 {\r
14         entity me;\r
15         me = spawnVoretDecibelsSlider();\r
16         me.configureVoretSlider(me, theValueMin, theValueMax, theValueStep, theCvar);\r
17         return me;\r
18 }\r
19 void loadCvarsVoretDecibelsSlider(entity me)\r
20 {\r
21         float v;\r
22 \r
23         if not(me.cvarName)\r
24                 return;\r
25 \r
26         v = cvar(me.cvarName);\r
27         if(v >= 0.98)\r
28                 me.value = 0;\r
29         else if(v < 0.0005)\r
30                 me.value = -1000000;\r
31         else\r
32                 me.value = 0.1 * floor(0.5 + 10.0 * log10(cvar(me.cvarName)) * 10);\r
33 }\r
34 void saveCvarsVoretDecibelsSlider(entity me)\r
35 {\r
36         float v;\r
37 \r
38         if not(me.cvarName)\r
39                 return;\r
40 \r
41         if(me.value >= -0.1)\r
42                 cvar_set(me.cvarName, "1");\r
43         if(me.value < -33)\r
44                 cvar_set(me.cvarName, "0");\r
45         else\r
46         {\r
47                 v = pow(10, me.value / 10);\r
48                 if(me.cvarName == "menu_bgmvolume")\r
49                         v = v / 2; // due to system settings, overall music volume must be twice as low\r
50                 cvar_set(me.cvarName, ftos(v));\r
51         }\r
52 }\r
53 \r
54 string valueToTextVoretDecibelsSlider(entity me, float v)\r
55 {\r
56         if(v < -33)\r
57                 return "OFF";\r
58         else if(v >= -0.1)\r
59                 return "MAX";\r
60         return strcat(valueToTextSlider(me, v), " dB");\r
61 }\r
62 \r
63 #endif\r