r3121 - in trunk/data/qcsrc/menu-div0test: . nexuiz
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Thu Jan 10 07:00:54 EST 2008
Author: div0
Date: 2008-01-10 07:00:53 -0500 (Thu, 10 Jan 2008)
New Revision: 3121
Added:
trunk/data/qcsrc/menu-div0test/nexuiz/slider_decibels.c
Modified:
trunk/data/qcsrc/menu-div0test/classes.c
trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_audio.c
Log:
DECIBELS. Just to annoy you. ;)
Modified: trunk/data/qcsrc/menu-div0test/classes.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/classes.c 2008-01-10 11:25:11 UTC (rev 3120)
+++ trunk/data/qcsrc/menu-div0test/classes.c 2008-01-10 12:00:53 UTC (rev 3121)
@@ -57,3 +57,4 @@
#include "nexuiz/keybinder.c"
#include "nexuiz/dialog_settings_input.c"
#include "nexuiz/dialog_settings_input_userbind.c"
+#include "nexuiz/slider_decibels.c"
Modified: trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_audio.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_audio.c 2008-01-10 11:25:11 UTC (rev 3120)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_audio.c 2008-01-10 12:00:53 UTC (rev 3121)
@@ -26,23 +26,20 @@
}
void fillNexuizAudioSettingsTab(entity me)
{
- entity e;
+ entity e, s;
me.TR(me);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Music Volume:"));
- me.TD(me, 1, 2, e = makeNexuizSlider(0, 1, 0.02, "bgmvolume"));
- e.valueDisplayMultiplier = 100;
- e.valueDigits = 0;
+ s = makeNexuizDecibelsSlider(-20, 0, 0.5, "bgmvolume");
+ me.TD(me, 1, 1, e = makeNexuizSliderCheckBox(-1000000, 1, s, "Music:"));
+ me.TD(me, 1, 2, s);
me.TR(me);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Game Volume:"));
- me.TD(me, 1, 2, e = makeNexuizSlider(0, 1, 0.02, "volume"));
- e.valueDisplayMultiplier = 100;
- e.valueDigits = 0;
+ s = makeNexuizDecibelsSlider(-20, 0, 0.5, "volume");
+ me.TD(me, 1, 1, e = makeNexuizSliderCheckBox(-1000000, 1, s, "Game:"));
+ me.TD(me, 1, 2, s);
me.TR(me);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Ambient Volume:"));
- me.TD(me, 1, 2, e = makeNexuizSlider(0, 1, 0.02, "snd_staticvolume"));
- e.valueDisplayMultiplier = 100;
- e.valueDigits = 0;
+ s = makeNexuizDecibelsSlider(-20, 0, 0.5, "snd_staticvolume");
+ me.TD(me, 1, 1, e = makeNexuizSliderCheckBox(-1000000, 1, s, "Ambient:"));
+ me.TD(me, 1, 2, s);
me.gotoXY(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Frequency:"));
Added: trunk/data/qcsrc/menu-div0test/nexuiz/slider_decibels.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/slider_decibels.c (rev 0)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/slider_decibels.c 2008-01-10 12:00:53 UTC (rev 3121)
@@ -0,0 +1,88 @@
+#ifdef INTERFACE
+CLASS(NexuizDecibelsSlider) EXTENDS(NexuizSlider)
+ METHOD(NexuizDecibelsSlider, loadCvars, void(entity))
+ METHOD(NexuizDecibelsSlider, saveCvars, void(entity))
+ METHOD(NexuizDecibelsSlider, valueToText, string(entity, float))
+ENDCLASS(NexuizDecibelsSlider)
+entity makeNexuizDecibelsSlider(float, float, float, string);
+#endif
+
+#ifdef IMPLEMENTATION
+
+float exp(float x)
+{
+ float i;
+ float t, s;
+
+ s = 1;
+ t = 1;
+ for(i = 1; i < 100; ++i)
+ {
+ t *= x;
+ t /= i;
+ s += t;
+ }
+
+ return s;
+}
+
+float ln(float x)
+{
+ float i;
+ float r, r0;
+
+ r = 1;
+ r0 = 0;
+ for(i = 1; fabs(r - r0) >= 0.05; ++i)
+ {
+ // Newton iteration on exp(r) = x:
+ // r <- r - (exp(r) - x) / (exp(r))
+ // r <- r - 1 + x / exp(r)
+ r0 = r;
+ r = r0 - 1 + x / exp(r0);
+ }
+ dprint("ln: ", ftos(i), " iterations\n");
+
+ return r;
+}
+
+#define LOG10 2.302585093
+
+entity makeNexuizDecibelsSlider(float theValueMin, float theValueMax, float theValueStep, string theCvar)
+{
+ entity me;
+ me = spawnNexuizDecibelsSlider();
+ me.configureNexuizSlider(me, theValueMin, theValueMax, theValueStep, theCvar);
+ return me;
+}
+void loadCvarsNexuizDecibelsSlider(entity me)
+{
+ float v;
+ v = cvar(me.cvarName);
+ if(v >= 0.98)
+ me.value = 0;
+ else if(v < 0.0005)
+ me.value = -1000000;
+ else
+ me.value = ln(cvar(me.cvarName)) * 10 / LOG10;
+}
+void saveCvarsNexuizDecibelsSlider(entity me)
+{
+ if(me.value >= -0.1)
+ cvar_set(me.cvarName, "1");
+ if(me.value < -33)
+ cvar_set(me.cvarName, "0");
+ else
+ cvar_set(me.cvarName, ftos(exp(me.value / 10 * LOG10)));
+}
+
+string valueToTextNexuizDecibelsSlider(entity me, float v)
+{
+ if(v < -33)
+ return "OFF";
+ else if(v >= -0.1)
+ return "MAX";
+ return strcat(valueToTextSlider(me, v), " dB");
+}
+
+#endif
More information about the nexuiz-commits
mailing list