]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/lib/replicate.qh
Merge branch 'master' into terencehill/dynamic_hud
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / replicate.qh
index 6ff77139f83e76f05f089edd397d137592535c10..f69b6072bea77316d2b5154a20cf760e92cd3c54 100644 (file)
@@ -1,49 +1,63 @@
-#ifndef REPLICATE_H
-#define REPLICATE_H
+#pragma once
+
 #ifndef MENUQC
 
-#define REPLICATE(...) EVAL(OVERLOAD(REPLICATE, __VA_ARGS__))
+    /**
+     * Replicate a client cvar into a server field
+     *
+     * @param fld   The field to replicate into
+     * @param type  The field type
+     * @param cvar  The cvar name
+     */
+       #define REPLICATE(...) EVAL_REPLICATE(OVERLOAD(REPLICATE, __VA_ARGS__))
+       #define EVAL_REPLICATE(...) __VA_ARGS__
 
-[[accumulate]] void ReplicateVars(entity this, string thisname, int i) { }
+       [[accumulate]] void ReplicateVars(entity this, string thisname, int i) {}
 
-#define REPLICATE_3(fld, type, var)         REPLICATE_4(fld, type, var, )
-#define REPLICATE_4(fld, type, var, func)   REPLICATE_##type(fld, var, func)
-#define REPLICATE_string(fld, var, func)    REPLICATE_7(fld, string, var, , \
-    { if (field) strunzone(field); field = strzone(it); }, \
-    { if (field) strunzone(field); field = string_null; }, \
-    { \
-        /* also initialize to the default value of func when requesting cvars */ \
-        string s = func(field); \
-        if (s != field) { \
-            strunzone(field); \
-            field = strzone(s); \
-        } \
-    })
-#define REPLICATE_float(fld, var, func)     REPLICATE_7(fld, float, var, func,  { field = stof(it); },          , )
-#define REPLICATE_bool(fld, var, func)      REPLICATE_7(fld, bool, var, func,   { field = boolean(stoi(it)); }, , )
-#define REPLICATE_int(fld, var, func)       REPLICATE_7(fld, int, var, func,    { field = stoi(it); },          , )
+       #define REPLICATE_3(fld, type, var) REPLICATE_4(fld, type, var, )
+       #define REPLICATE_4(fld, type, var, func) REPLICATE_##type(fld, var, func)
+       #define REPLICATE_string(fld, var, func) \
+               REPLICATE_7(fld, string, var, , \
+       { if (field) strunzone(field); field = strzone(it); }, \
+       { if (field) strunzone(field); field = string_null; }, \
+       { \
+               /* also initialize to the default value of func when requesting cvars */ \
+               string s = func(field); \
+               if (s != field) \
+               { \
+                   strunzone(field); \
+                   field = strzone(s); \
+               } \
+       })
+       #define REPLICATE_float(fld, var, func) REPLICATE_7(fld, float, var, func,  { field = stof(it); },          , )
+       #define REPLICATE_bool(fld, var, func) REPLICATE_7(fld, bool, var, func,   { field = boolean(stoi(it)); }, , )
+       #define REPLICATE_int(fld, var, func) REPLICATE_7(fld, int, var, func,    { field = stoi(it); },          , )
 
-#if defined(SVQC)
-    #define REPLICATE_7(fld, type, var, func, create, destroy, after) \
-        void ReplicateVars(entity this, string thisname, int i) { \
-            type field = this.fld; \
-            if (i < 0) { destroy } \
-            else { \
-                string it = func(argv(i + 1)); \
-                bool current = thisname == var; \
-                if (i > 0) { \
-                    if (current) { create } \
-                } else { \
-                    stuffcmd(this, "cl_cmd sendcvar " var "\n"); \
-                } \
-                if (current) { after } \
-            } \
-            this.fld = field; \
-        }
-#elif defined(CSQC)
-    // TODO
-    #define REPLICATE_7(fld, type, var, func, create, destroy, after)
-#endif
+       #if defined(SVQC)
+               #define REPLICATE_7(fld, type, var, func, create, destroy, after) \
+                       void ReplicateVars(entity this, string thisname, int i) \
+                       { \
+                               type field = this.fld; \
+                               if (i < 0) { destroy } \
+                               else \
+                               { \
+                                       string it = func(argv(i + 1)); \
+                                       bool current = thisname == var; \
+                                       if (i > 0) \
+                                       { \
+                                               if (current) { create } \
+                                       } \
+                                       else \
+                                       { \
+                                               stuffcmd(this, "cl_cmd sendcvar " var "\n"); \
+                                       } \
+                                       if (current) { after } \
+                               } \
+                               this.fld = field; \
+                       }
+       #elif defined(CSQC)
+               // TODO
+               #define REPLICATE_7(fld, type, var, func, create, destroy, after)
+       #endif
 
 #endif
-#endif