]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Menu support
authorTimePath <andrew.hardaker1995@gmail.com>
Wed, 19 Aug 2015 11:38:52 +0000 (21:38 +1000)
committerTimePath <andrew.hardaker1995@gmail.com>
Wed, 19 Aug 2015 11:38:52 +0000 (21:38 +1000)
mod/client/main.qc
mod/menu/main.qc [new file with mode: 0644]
mod/menu/progs.inc [new file with mode: 0644]
qcsrc/client/main.qc
qcsrc/common/mutators/base.qh
qcsrc/menu/menu.qc
qcsrc/menu/progs.src
qcsrc/server/mutators/mutators.qc

index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d84239c0bfbba30cf7ccb3b55b3f27f13612122c 100644 (file)
@@ -0,0 +1,9 @@
+REGISTER_MUTATOR(mutator_mod, cvar("g_mod"));
+
+MUTATOR_HOOKFUNCTION(mutator_mod, BuildMutatorsString) {
+    ret_string = strcat(ret_string, ":mod");
+}
+
+MUTATOR_HOOKFUNCTION(mutator_mod, BuildMutatorsPrettyString) {
+    ret_string = strcat(ret_string, ", Mod");
+}
diff --git a/mod/menu/main.qc b/mod/menu/main.qc
new file mode 100644 (file)
index 0000000..d84239c
--- /dev/null
@@ -0,0 +1,9 @@
+REGISTER_MUTATOR(mutator_mod, cvar("g_mod"));
+
+MUTATOR_HOOKFUNCTION(mutator_mod, BuildMutatorsString) {
+    ret_string = strcat(ret_string, ":mod");
+}
+
+MUTATOR_HOOKFUNCTION(mutator_mod, BuildMutatorsPrettyString) {
+    ret_string = strcat(ret_string, ", Mod");
+}
diff --git a/mod/menu/progs.inc b/mod/menu/progs.inc
new file mode 100644 (file)
index 0000000..ae91a9e
--- /dev/null
@@ -0,0 +1,3 @@
+#if BUILD_MOD
+#include "main.qc"
+#endif
index b56887878d392b9651ed518a19d3f4f2f8f65135..2c6320edcb504e3330e0aeadb79e94f4d99fe6b4 100644 (file)
@@ -40,6 +40,8 @@
 
 #include "../common/items/all.qh"
 
+#include "../common/mutators/base.qh"
+
 #include "../common/weapons/all.qh"
 
 #include "../csqcmodellib/cl_model.qh"
index 270e1d8740fc915c393003e9345207c2eccdf2a2..83945528c3f44de5c9a0d831a367205b5ecf86f7 100644 (file)
@@ -46,9 +46,9 @@ CLASS(CallbackChain, Object)
 
     ATTRIB(CallbackChain, cbc_next, CallbackNode, NULL)
     ATTRIB(CallbackChain, cbc_order, int, 0)
-    CONSTRUCTOR(CallbackChain, string name) {
+    CONSTRUCTOR(CallbackChain, string _name) {
         CONSTRUCT(CallbackChain);
-        this.netname = name;
+        this.netname = _name;
         return this;
     }
 
@@ -120,6 +120,10 @@ ENDCLASS(CallbackChain)
 #define _MUTATOR_HANDLE_POPTMP(type, id) id = tmp_##id;
 #define _MUTATOR_HANDLE_POPOUT(type, id) id = out_##id;
 
+void RegisterHooks() {};
+void RegisterCallbacks() {};
+void RegisterMutators() {};
+
 #define _MUTATOR_HOOKABLE(id, ...) CallbackChain HOOK_##id; bool __Mutator_Send_##id(__VA_ARGS__)
 #define MUTATOR_HOOKABLE(id, params) \
     _MUTATOR_HOOKABLE(id, int params(_MUTATOR_HANDLE_PARAMS, _MUTATOR_HANDLE_NOP)) { \
@@ -131,7 +135,7 @@ ENDCLASS(CallbackChain)
         params(_MUTATOR_HANDLE_NOP,     _MUTATOR_HANDLE_POPOUT) \
         return ret; \
     } \
-    STATIC_INIT(HOOK_##id) { HOOK_##id = NEW(CallbackChain, #id); }
+    [[accumulate]] void RegisterHooks() { HOOK_##id = NEW(CallbackChain, #id); }
 #define MUTATOR_CALLHOOK(id, ...) APPLY(__Mutator_Send_##id, 0, ##__VA_ARGS__)
 
 enum {
@@ -146,10 +150,10 @@ CLASS(Mutator, Object)
     ATTRIB(Mutator, m_id, int, 0)
     ATTRIB(Mutator, mutatorname, string, string_null)
     ATTRIB(Mutator, mutatorfunc, mutatorfunc_t, func_null)
-    METHOD(Mutator, mutatorcheck, bool())
-    CONSTRUCTOR(Mutator, string name, mutatorfunc_t func) {
+    ATTRIB(Mutator, mutatorcheck, bool(), func_null)
+    CONSTRUCTOR(Mutator, string _name, mutatorfunc_t func) {
         CONSTRUCT(Mutator);
-        this.mutatorname = name;
+        this.mutatorname = _name;
         this.mutatorfunc = func;
         return this;
     }
@@ -207,13 +211,12 @@ void Mutator_Remove(Mutator mut)
     Mutator MUTATOR_##name
 #define MUTATOR_DEFINITION(name) \
     bool MUTATORFUNCTION_##name(int mode); \
-    STATIC_INIT(MUTATOR_##name) { MUTATOR_##name = NEW(Mutator, #name, MUTATORFUNCTION_##name); } \
+    [[accumulate]] void RegisterMutators() { MUTATOR_##name = NEW(Mutator, #name, MUTATORFUNCTION_##name); } \
     [[last]] bool MUTATORFUNCTION_##name(int mode)
 
-void RegisterMutators();
 const int MUTATORS_MAX = MAX_MUTATORS;
-entity MUTATORS[MUTATORS_MAX], MUTATORS_first, MUTATORS_last;
-int MUTATORS_COUNT;
+noref entity MUTATORS[MUTATORS_MAX], MUTATORS_first, MUTATORS_last;
+noref int MUTATORS_COUNT;
 #define REGISTER_MUTATOR(id, dependence) \
     bool MUTATORFUNCTION_##id##_hooks(int mode) { return = false; } \
     bool MUTATORFUNCTION_##id(int mode) { \
@@ -224,7 +227,13 @@ int MUTATORS_COUNT;
     REGISTER(RegisterMutators, MUTATOR, MUTATORS, MUTATORS_COUNT, id, m_id, NEW(Mutator, #id, MUTATORFUNCTION_##id)) \
     { this.mutatorcheck = MUTATOR_##id##_check; } \
     [[accumulate]] bool MUTATORFUNCTION_##id(int mode)
-REGISTER_REGISTRY(RegisterMutators)
+
+STATIC_INIT(Mutators) {
+    RegisterHooks();
+    RegisterCallbacks();
+    RegisterMutators();
+    FOREACH(MUTATORS, it.mutatorcheck(), LAMBDA(Mutator_Add(it)));
+}
 
 #define MUTATOR_ONADD                   if (mode == MUTATOR_ADDING)
 #define MUTATOR_ONREMOVE                if (mode == MUTATOR_REMOVING)
@@ -236,7 +245,7 @@ REGISTER_REGISTRY(RegisterMutators)
 #define _MUTATOR_CALLBACK(name, func) \
     Callback CALLBACK_##name; \
     bool func(); \
-    STATIC_INIT(CALLBACK_##name) { CALLBACK_##name = NEW(Callback, func); }
+    [[accumulate]] void RegisterCallbacks() { CALLBACK_##name = NEW(Callback, func); }
 
 #define MUTATOR_HOOKFUNCTION(...) \
     OVERLOAD(MUTATOR_HOOKFUNCTION, __VA_ARGS__)
index b2a85093c6ecc21a5258692ac5df1db8fa1c4ccc..bc7234d4a75acf3d335e75be782237b4493cb0cc 100644 (file)
@@ -5,6 +5,7 @@
 #include "../common/items/all.qh"
 #include "../common/weapons/all.qh"
 #include "../common/mapinfo.qh"
+#include "../common/mutators/base.qh"
 
 ///////////////////////////////////////////////
 // Menu Source File
index a35fd484f37c1263172229728da7d2672520ee40..64f12478ddeb9bff3fe171e50bf8f5e2480f5aa8 100644 (file)
@@ -29,3 +29,5 @@ xonotic/util.qc
 ../common/weapons/all.qc // TODO
 
 ../warpzonelib/mathlib.qc
+
+../../mod/menu/progs.inc
index b039cf37f125b7d64f98ad435aa80f71dd3015ef..0c63015320dc2c2d0b217a8c7aad403cf3ce4f48 100644 (file)
@@ -34,9 +34,5 @@ void mutators_add()
        CHECK_MUTATOR_ADD("g_overkill", mutator_overkill, !cvar("g_instagib") && !g_nexball && cvar_string("g_mod_balance") == "Overkill");
        CHECK_MUTATOR_ADD("g_buffs", mutator_buffs, 1);
 
-       FOREACH(MUTATORS, it.mutatorcheck(), LAMBDA(
-               Mutator_Add(it)
-       ));
-
        #undef CHECK_MUTATOR_ADD
 }