2 CLASS(XonoticDecibelsSlider) EXTENDS(XonoticSlider)
3 METHOD(XonoticDecibelsSlider, loadCvars, void(entity))
4 METHOD(XonoticDecibelsSlider, saveCvars, void(entity))
5 METHOD(XonoticDecibelsSlider, valueToText, string(entity, float))
6 ENDCLASS(XonoticDecibelsSlider)
7 entity makeXonoticDecibelsSlider(float, float, float, string);
12 float toDecibelOfSquare(float f)
14 return 20.0 * log10(f);
17 float fromDecibelOfSquare(float f)
19 return pow(10, f / 20.0);
22 entity makeXonoticDecibelsSlider(float theValueMin, float theValueMax, float theValueStep, string theCvar)
25 me = spawnXonoticDecibelsSlider();
26 me.configureXonoticSlider(me, theValueMin, theValueMax, theValueStep, theCvar);
29 void XonoticDecibelsSlider_loadCvars(entity me)
36 v = cvar(me.cvarName);
39 if(v > fromDecibelOfSquare(me.valueMax - 0.5 * me.valueStep))
40 Slider_setValue(me, me.valueMax);
41 else if(v < fromDecibelOfSquare(me.valueMin - 0.5 * me.valueStep))
42 Slider_setValue(me, -1000000); // virtually infinite
44 Slider_setValue(me, me.valueStep * floor(0.5 + toDecibelOfSquare(v) / me.valueStep) );
46 void XonoticDecibelsSlider_saveCvars(entity me)
51 if(me.value > me.valueMax - 0.5 * me.valueStep)
52 cvar_set(me.cvarName, ftos(fromDecibelOfSquare(me.valueMax)));
53 else if(me.value < me.valueMin - 0.5 * me.valueStep)
54 cvar_set(me.cvarName, "0");
56 cvar_set(me.cvarName, ftos(fromDecibelOfSquare(me.value)));
59 string XonoticDecibelsSlider_valueToText(entity me, float v)
61 if(v > me.valueMax - 0.5 * me.valueStep)
62 return CTX(_("VOL^MAX"));
63 else if(v < me.valueMin - 0.5 * me.valueStep)
64 return CTX(_("VOL^OFF"));
65 return sprintf(_("%s dB"), SUPER(XonoticDecibelsSlider).valueToText(me, v));