]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cvar.c
Cvar onChange for qc menu for stable branch
[xonotic/darkplaces.git] / cvar.c
diff --git a/cvar.c b/cvar.c
index 2a0acae8edefad814c472bf0df404c64b6e7925e..728f53096539e5eccac4931d1268556cff054713 100644 (file)
--- a/cvar.c
+++ b/cvar.c
@@ -21,6 +21,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 #include "quakedef.h"
 
+#ifdef CONFIG_MENU
+    #include "progsvm.h"
+#endif
+
 const char *cvar_dummy_description = "custom cvar";
 
 cvar_t *cvar_vars = NULL;
@@ -345,6 +349,22 @@ static void Cvar_SetQuick_Internal (cvar_t *var, const char *value)
        // LordHavoc: don't reallocate when there is no change
        if (!changed)
                return;
+    
+    // Con_Printf("----> Changing \"%s\" value from \"%s\" to \"%s\"\n", var->name, var->string, value);
+
+#ifdef CONFIG_MENU
+    // prepare values to send into QC
+       prvm_prog_t *prog = MVM_prog;
+    qboolean qcSubscribed = PRVM_menufunction(m_cvar_changed);
+
+    if (qcSubscribed && prog->loaded)
+    {
+        prog->globals.ip[OFS_PARM0] = PRVM_SetTempString(prog, var->name);
+        prog->globals.ip[OFS_PARM1] = PRVM_SetTempString(prog, var->string);
+        prog->globals.ip[OFS_PARM2] = PRVM_SetTempString(prog, value);
+    }
+#endif
+
 
        // LordHavoc: don't reallocate when the buffer is the same size
        valuelen = strlen(value);
@@ -418,6 +438,14 @@ static void Cvar_SetQuick_Internal (cvar_t *var, const char *value)
        }
 
        Cvar_UpdateAutoCvar(var);
+
+#ifdef CONFIG_MENU
+    // call "onCvarChanged" like event
+    if (qcSubscribed && prog->loaded)
+    {
+        prog->ExecuteProgram(prog, PRVM_menufunction(m_cvar_changed), "QC function m_cvar_changed is missing");
+    }
+#endif
 }
 
 void Cvar_SetQuick (cvar_t *var, const char *value)