X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcsqcmodel%2Fsv_model.qc;h=164c5477367b890f631885e7be3765d5b650a2fc;hb=e4091e948e18b5a0bcc32c7e36e6fe00d2d40944;hp=59b8b284b84eb5acd076df02672e6b2500c6bcba;hpb=ca1bffc8e4732595726672a07645be908d2fd413;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/csqcmodel/sv_model.qc b/qcsrc/csqcmodel/sv_model.qc index 59b8b284b..164c54773 100644 --- a/qcsrc/csqcmodel/sv_model.qc +++ b/qcsrc/csqcmodel/sv_model.qc @@ -22,64 +22,77 @@ // 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()