// 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()