]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/lib/csqcmodel/sv_model.qc
Merge branch 'master' into Mario/weaponorder
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / csqcmodel / sv_model.qc
index b02df19e0015a25a0f96df60d8abe5a3f5984976..70e2c1a15e9bf10f6a4a09bf9378a10f724ba5c8 100644 (file)
 #include "sv_model.qh"
 
 #include "common.qh"
-#include <common/animdecide.qh>
-#include <common/constants.qh>
-#include <common/util.qh>
-#include <server/constants.qh>
-#include <server/defs.qh>
 
 // generic CSQC model code
 
@@ -37,9 +32,14 @@ bool CSQCModel_Send(entity this, entity to, int sf)
        noref bool islocalplayer = (this == to);
        noref bool isnolocalplayer = (isplayer && (this != to));
 
+       int psf = 0;
+       psf = BITSET(psf, ISPLAYER_CLIENT, isplayer);
+       psf = BITSET(psf, ISPLAYER_LOCAL, islocalplayer);
+       psf = BITSET(psf, ISPLAYER_PLAYER, IS_PLAYER(this));
+
        WriteHeader(MSG_ENTITY, ENT_CLIENT_MODEL);
        WriteInt24_t(MSG_ENTITY, sf);
-       WriteByte(MSG_ENTITY, isplayer);
+       WriteByte(MSG_ENTITY, psf);
 
 #define CSQCMODEL_IF(cond) if(cond) {
 #define CSQCMODEL_ENDIF }
@@ -48,7 +48,11 @@ bool CSQCModel_Send(entity this, entity to, int sf)
        { \
                w(MSG_ENTITY, this.csqcmodel_##f); \
        }
-#define CSQCMODEL_PROPERTY_SCALED(flag,t,r,w,f,s,mi,ma) CSQCMODEL_PROPERTY(flag,t,r,w,f)
+#define CSQCMODEL_PROPERTY_SCALED(flag,t,r,w,f,s,mi,ma) \
+       if(sf & flag) \
+       { \
+               w(MSG_ENTITY, this.csqcmodel_##f); \
+       }
        ALLPROPERTIES
 #undef CSQCMODEL_PROPERTY_SCALED
 #undef CSQCMODEL_PROPERTY
@@ -64,13 +68,9 @@ bool CSQCModel_Send(entity this, entity to, int sf)
 void CSQCModel_CheckUpdate(entity e)
 {
        // some nice flags for CSQCMODEL_IF
-       float isplayer = IS_CLIENT(e);
-       float islocalplayer = isplayer; // we set BOTH to 1 here as we need the sendflags
-       float isnolocalplayer = isplayer; // we set BOTH to 1 here as we need the sendflags
-
-       unused_float = isplayer;
-       unused_float = islocalplayer;
-       unused_float = isnolocalplayer;
+       noref float isplayer = IS_CLIENT(e);
+       noref float islocalplayer = isplayer; // we set BOTH to 1 here as we need the sendflags
+       noref float isnolocalplayer = isplayer; // we set BOTH to 1 here as we need the sendflags
 
 #if CSQCPLAYER_FORCE_UPDATES
        if(isplayer && time > e.csqcmodel_nextforcedupdate)
@@ -121,14 +121,12 @@ void CSQCModel_CheckUpdate(entity e)
 
 void CSQCModel_LinkEntity(entity e)
 {
-       e.SendEntity = SendEntity_self;
-       e.SendEntity3 = CSQCModel_Send;
+       setSendEntity(e, CSQCModel_Send);
        e.SendFlags = 0xFFFFFF;
        CSQCModel_CheckUpdate(e);
 }
 
 void CSQCModel_UnlinkEntity(entity e)
 {
-       e.SendEntity = func_null;
-       e.SendEntity3 = func_null;
+       setSendEntity(e, func_null);
 }