]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/csqcmodel/sv_model.qc
network colormap for weapon models
[xonotic/xonotic-data.pk3dir.git] / qcsrc / csqcmodel / sv_model.qc
index 59b8b284b84eb5acd076df02672e6b2500c6bcba..164c5477367b890f631885e7be3765d5b650a2fc 100644 (file)
 
 // generic CSQC model code
 
-#define PROPERTY(flag,r,w,f) \
-       .float csqcmodel_##f;
-#define PROPERTY_SCALED(flag,r,w,f,s,mi,ma) PROPERTY(flag,r,w,f)
-       ALLPROPERTIES
-#undef PROPERTY_SCALED
-#undef PROPERTY
-
 float CSQCModel_Send(entity to, float sf)
 {
+       // some nice flags for CSQCMODEL_IF
+       float isplayer = (self.flags & FL_CLIENT);
+       float islocalplayer = (self == to);
+       float isnolocalplayer = (isplayer && (self != to));
+
        WriteByte(MSG_ENTITY, ENT_CLIENT_MODEL);
        WriteShort(MSG_ENTITY, sf);
 
-#define PROPERTY(flag,r,w,f) \
+#define CSQCMODEL_IF(cond) if(cond) {
+#define CSQCMODEL_ENDIF }
+#define CSQCMODEL_PROPERTY(flag,t,r,w,f) \
        if(sf & flag) \
        { \
                w(MSG_ENTITY, self.csqcmodel_##f); \
        }
-#define PROPERTY_SCALED(flag,r,w,f,s,mi,ma) PROPERTY(flag,r,w,f)
+#define CSQCMODEL_PROPERTY_SCALED(flag,t,r,w,f,s,mi,ma) CSQCMODEL_PROPERTY(flag,t,r,w,f)
        ALLPROPERTIES
-#undef PROPERTY_SCALED
-#undef PROPERTY
+#undef CSQCMODEL_PROPERTY_SCALED
+#undef CSQCMODEL_PROPERTY
+#undef CSQCMODEL_ENDIF
+#undef CSQCMODEL_IF
 
        return TRUE;
 }
 
 void CSQCModel_CheckUpdate()
 {
-       float tmp;
+       // some nice flags for CSQCMODEL_IF
+       float isplayer = (self.flags & FL_CLIENT);
+       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
 
        if(self.effects & EF_RESTARTANIM_BIT)
        {
-               self.SendFlags |= PROPERTY_FRAME | PROPERTY_FRAME2; // full anim resend please
+               self.SendFlags |= CSQCMODEL_PROPERTY_FRAME | CSQCMODEL_PROPERTY_FRAME2; // full anim resend please
                self.effects &~= EF_RESTARTANIM_BIT;
        }
 
        if(self.effects & EF_TELEPORT_BIT)
        {
-               self.SendFlags |= PROPERTY_TELEPORTED; // no interpolation please
+               self.SendFlags |= CSQCMODEL_PROPERTY_TELEPORTED; // no interpolation please
                self.effects &~= EF_TELEPORT_BIT;
        }
 
-#define PROPERTY(flag,r,w,f) \
-       tmp = self.f; \
-       if(tmp != self.csqcmodel_##f) \
+#define CSQCMODEL_IF(cond) if(cond) {
+#define CSQCMODEL_ENDIF }
+#define CSQCMODEL_PROPERTY(flag,t,r,w,f) \
        { \
-               self.csqcmodel_##f = tmp; \
-               self.SendFlags |= flag; \
+               t tmp = self.f; \
+               if(tmp != self.csqcmodel_##f) \
+               { \
+                       self.csqcmodel_##f = tmp; \
+                       self.SendFlags |= flag; \
+               } \
        }
-#define PROPERTY_SCALED(flag,r,w,f,s,mi,ma) \
-       tmp = bound(mi, s * self.f, ma); \
-       if(tmp != self.csqcmodel_##f) \
+#define CSQCMODEL_PROPERTY_SCALED(flag,t,r,w,f,s,mi,ma) \
        { \
-               self.csqcmodel_##f = tmp; \
-               self.SendFlags |= flag; \
+               t tmp = bound(mi, s * self.f, ma); \
+               if(tmp != self.csqcmodel_##f) \
+               { \
+                       self.csqcmodel_##f = tmp; \
+                       self.SendFlags |= flag; \
+               } \
        }
        ALLPROPERTIES
-#undef PROPERTY_SCALED
-#undef PROPERTY
+#undef CSQCMODEL_PROPERTY_SCALED
+#undef CSQCMODEL_PROPERTY
+#undef CSQCMODEL_ENDIF
+#undef CSQCMODEL_IF
 }
 
 void CSQCModel_LinkEntity()