]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/quicktune.cpp
Check minetest.hud_change() parameters on conversion (Fix #1714)
[dragonfireclient.git] / src / quicktune.cpp
index 66b9804dfcb7749e4b0cb5681950e192c3e27e23..2f9f987bdb039adf78b0131c14326e83d3626b22 100644 (file)
@@ -1,25 +1,51 @@
 /*
-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 "jthread/jmutex.h"
+#include "jthread/jmutexautolock.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;
@@ -29,7 +55,6 @@ static void makeMutex()
 {
        if(!g_mutex){
                g_mutex = new JMutex();
-               g_mutex->Init();
        }
 }
 
@@ -38,13 +63,6 @@ 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();
@@ -52,7 +70,7 @@ QuicktuneValue getQuicktuneValue(const std::string &name)
        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;
@@ -63,6 +81,7 @@ void setQuicktuneValue(const std::string &name, const QuicktuneValue &val)
        makeMutex();
        JMutexAutoLock lock(*g_mutex);
        g_values[name] = val;
+       g_values[name].modified = true;
 }
 
 void updateQuicktuneValue(const std::string &name, QuicktuneValue &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;
        }
 }