Tweak the system sound to use 0.5 as the default volume, instead of 1.0. This allows...
[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         if not(me.cvarName)\r
37                 return;\r
38 \r
39         if(me.value >= -0.1)\r
40                 cvar_set(me.cvarName, "1");\r
41         if(me.value < -33)\r
42                 cvar_set(me.cvarName, "0");\r
43         else\r
44         {\r
45                 if(me.cvarName == "menu_bgmvolume")\r
46                         cvar_set(me.cvarName, ftos(pow(10, me.value / 10) / 2)); // due to system settings, music volume must be twice as low\r
47                 else\r
48                         cvar_set(me.cvarName, ftos(pow(10, me.value / 10)));\r
49         }\r
50 }\r
51 \r
52 string valueToTextVoretDecibelsSlider(entity me, float v)\r
53 {\r
54         if(v < -33)\r
55                 return "OFF";\r
56         else if(v >= -0.1)\r
57                 return "MAX";\r
58         return strcat(valueToTextSlider(me, v), " dB");\r
59 }\r
60 \r
61 #endif\r