]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/quicktune.cpp
Fix for commit 87dcee6 It uses the wrong variable and only covers some use cases...
[dragonfireclient.git] / src / quicktune.cpp
index 66b9804dfcb7749e4b0cb5681950e192c3e27e23..b0e2dc6d5bbd731889f488ce1960ba761dc42b04 100644 (file)
@@ -1,35 +1,60 @@
 /*
-Minetest-c55
-Copyright (C) 2012 celeron55, Perttu Ahola <celeron55@gmail.com>
+Minetest
+Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
 
 This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
 (at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+GNU Lesser General Public License for more details.
 
-You should have received a copy of the GNU General Public License along
+You should have received a copy of the GNU Lesser General Public License along
 with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
 #include "quicktune.h"
-#include <jmutex.h>
-#include <jmutexautolock.h>
+#include "threading/mutex.h"
+#include "threading/mutex_auto_lock.h"
+#include "util/string.h"
+
+std::string QuicktuneValue::getString()
+{
+       switch(type){
+       case QVT_NONE:
+               return "(none)";
+       case QVT_FLOAT:
+               return ftos(value_QVT_FLOAT.current);
+       }
+       return "<invalid type>";
+}
+void QuicktuneValue::relativeAdd(float amount)
+{
+       switch(type){
+       case QVT_NONE:
+               break;
+       case QVT_FLOAT:
+               value_QVT_FLOAT.current += amount * (value_QVT_FLOAT.max - value_QVT_FLOAT.min);
+               if(value_QVT_FLOAT.current > value_QVT_FLOAT.max)
+                       value_QVT_FLOAT.current = value_QVT_FLOAT.max;
+               if(value_QVT_FLOAT.current < value_QVT_FLOAT.min)
+                       value_QVT_FLOAT.current = value_QVT_FLOAT.min;
+               break;
+       }
+}
 
 static std::map<std::string, QuicktuneValue> g_values;
 static std::vector<std::string> g_names;
-JMutex *g_mutex = NULL;
+Mutex *g_mutex = NULL;
 
 static void makeMutex()
 {
        if(!g_mutex){
-               g_mutex = new JMutex();
-               g_mutex->Init();
+               g_mutex = new Mutex();
        }
 }
 
@@ -38,21 +63,14 @@ std::vector<std::string> getQuicktuneNames()
        return g_names;
 }
 
-/*std::map<std::string, QuicktuneValue> getQuicktuneValues()
-{
-       makeMutex();
-       JMutexAutoLock lock(*g_mutex);
-       return g_values;
-}*/
-
 QuicktuneValue getQuicktuneValue(const std::string &name)
 {
        makeMutex();
-       JMutexAutoLock lock(*g_mutex);
+       MutexAutoLock lock(*g_mutex);
        std::map<std::string, QuicktuneValue>::iterator i = g_values.find(name);
        if(i == g_values.end()){
                QuicktuneValue val;
-               val.type = QUICKTUNE_NONE;
+               val.type = QVT_NONE;
                return val;
        }
        return i->second;
@@ -61,14 +79,15 @@ QuicktuneValue getQuicktuneValue(const std::string &name)
 void setQuicktuneValue(const std::string &name, const QuicktuneValue &val)
 {
        makeMutex();
-       JMutexAutoLock lock(*g_mutex);
+       MutexAutoLock lock(*g_mutex);
        g_values[name] = val;
+       g_values[name].modified = true;
 }
 
 void updateQuicktuneValue(const std::string &name, QuicktuneValue &val)
 {
        makeMutex();
-       JMutexAutoLock lock(*g_mutex);
+       MutexAutoLock lock(*g_mutex);
        std::map<std::string, QuicktuneValue>::iterator i = g_values.find(name);
        if(i == g_values.end()){
                g_values[name] = val;
@@ -76,12 +95,11 @@ void updateQuicktuneValue(const std::string &name, QuicktuneValue &val)
                return;
        }
        QuicktuneValue &ref = i->second;
-       switch(val.type){
-       case QUICKTUNE_NONE:
-               break;
-       case QUICKTUNE_FLOAT:
-               val.value_float.current = ref.value_float.current;
-               break;
+       if(ref.modified)
+               val = ref;
+       else{
+               ref = val;
+               ref.modified = false;
        }
 }