]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Add some hooks to allow custom bones
authorMario <zacjardine@y7mail.com>
Wed, 26 Aug 2015 02:08:36 +0000 (12:08 +1000)
committerMario <zacjardine@y7mail.com>
Wed, 26 Aug 2015 02:08:36 +0000 (12:08 +1000)
qcsrc/client/mutators/events.qh
qcsrc/client/player_skeleton.qc
qcsrc/common/util.qc
qcsrc/server/mutators/events.qh

index 363af87a0ef216cf00b33c619b26bb665a5c2dc5..86be898d9bae6942a29b43995086cd1ab23ec656 100644 (file)
@@ -88,4 +88,27 @@ MUTATOR_HOOKABLE(TagIndex_Update, EV_TagIndex_Update);
     /**/
 MUTATOR_HOOKABLE(TagIndex_Apply, EV_TagIndex_Apply);
 
+/** Called when setting up skeleton bones */
+#define EV_Skeleton_CheckBones(i, o) \
+    /** entity id */ i(entity, self) \
+    /**/
+MUTATOR_HOOKABLE(Skeleton_CheckBones, EV_Skeleton_CheckBones);
+
+/** Called when setting up bones from the loaded model */
+#define EV_Skeleton_CheckModel(i, o) \
+    /** entity id */ i(entity, self) \
+    /**/
+MUTATOR_HOOKABLE(Skeleton_CheckModel, EV_Skeleton_CheckModel);
+
+/** Called when clearing the global parameters for a model */
+MUTATOR_HOOKABLE(ClearModelParams, EV_NO_ARGS);
+
+/** Called when getting the global parameters for a model */
+#define EV_GetModelParams(i, o) \
+    /** entity id */ i(string, checkmodel_input) \
+    /** entity id */ i(string, checkmodel_command) \
+    /**/
+string checkmodel_input, checkmodel_command;
+MUTATOR_HOOKABLE(GetModelParams, EV_GetModelParams);
+
 #endif
index 4039c905c1f135f3afea1e2e6d1e76d7c65947c5..96b91d1c8042d4a7611e47da81b778443c625dbe 100644 (file)
@@ -23,6 +23,7 @@ void skeleton_loadinfo(entity e)
                e.bone_weapon = gettagindex(e, "tag_weapon");
        if(!e.bone_weapon)
                e.bone_weapon = gettagindex(e, "bip01 r hand");
+       MUTATOR_CALLHOOK(Skeleton_CheckBones, e);
        for(i = 0; i < MAX_AIM_BONES; ++i)
        {
                e.(bone_aim[i]) = 0;
@@ -37,6 +38,7 @@ void skeleton_loadinfo(entity e)
                        e.fixbone = get_model_parameters_fixbone;
                if(get_model_parameters_bone_weapon)
                        e.bone_weapon = gettagindex(e, get_model_parameters_bone_weapon);
+               MUTATOR_CALLHOOK(Skeleton_CheckModel, e);
                for(i = 0; i < MAX_AIM_BONES; ++i)
                {
                        if(get_model_parameters_bone_aim[i])
index 5479698acadb11d2fb1080d446e5926ce82a33d1..c1ae4ad1aa99f430e7227b7ed34aadb9e4e5d51e 100644 (file)
@@ -5,6 +5,7 @@
     #include "../client/defs.qh"
     #include "constants.qh"
     #include "../warpzonelib/mathlib.qh"
+       #include "../client/mutators/events.qh"
     #include "mapinfo.qh"
     #include "notifications.qh"
     #include "deathtypes.qh"
@@ -16,6 +17,7 @@
     #include "constants.qh"
     #include "../server/autocvars.qh"
     #include "../server/defs.qh"
+       #include "../server/mutators/events.qh"
     #include "notifications.qh"
     #include "deathtypes.qh"
     #include "mapinfo.qh"
@@ -2059,6 +2061,10 @@ float get_model_parameters(string m, float sk)
        }
        get_model_parameters_fixbone = 0;
 
+#ifndef MENUQC
+       MUTATOR_CALLHOOK(ClearModelParams);
+#endif
+
        if (!m)
                return 1;
 
@@ -2120,6 +2126,9 @@ float get_model_parameters(string m, float sk)
                        get_model_parameters_bone_upperbody = s;
                if(c == "bone_weapon")
                        get_model_parameters_bone_weapon = s;
+       #ifndef MENUQC
+               MUTATOR_CALLHOOK(GetModelParams, c, s);
+       #endif
                for(int i = 0; i < MAX_AIM_BONES; ++i)
                        if(c == strcat("bone_aim", ftos(i)))
                        {
index 71542d543646272a29184fefad9194f175e475f3..fb3fbd107e247fd0db7f0a392b6b2724762c5854 100644 (file)
@@ -536,4 +536,15 @@ enum {
        MUT_ACCADD_INVALID, // return this flag to make the function always continue
        MUT_ACCADD_INDIFFERENT // return this flag to make the function always return
 };
+
+/** Called when clearing the global parameters for a model */
+MUTATOR_HOOKABLE(ClearModelParams, EV_NO_ARGS);
+
+/** Called when getting the global parameters for a model */
+#define EV_GetModelParams(i, o) \
+    /** entity id */ i(string, checkmodel_input) \
+    /** entity id */ i(string, checkmodel_command) \
+    /**/
+string checkmodel_input, checkmodel_command;
+MUTATOR_HOOKABLE(GetModelParams, EV_GetModelParams);
 #endif