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