X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Fcsqcmodel_hooks.qc;h=bbe0b4d22dc5d3f972f877fea7a15dc7f554688c;hp=6499a683e8f4c2cf198be39cb0bee2c9eb9e9a3f;hb=4d91f9f38ee0fe58d4ac93662da2bcd52921d373;hpb=04692f3bf447ec38a1bbb0a330c288bbe7a42726 diff --git a/qcsrc/client/csqcmodel_hooks.qc b/qcsrc/client/csqcmodel_hooks.qc index 6499a683e..bbe0b4d22 100644 --- a/qcsrc/client/csqcmodel_hooks.qc +++ b/qcsrc/client/csqcmodel_hooks.qc @@ -2,7 +2,7 @@ #include "autocvars.qh" #include "csqcmodel_hooks.qh" #include "miscfunctions.qh" -#include "mutators/events.qh" +#include #include "player_skeleton.qh" #include "weapons/projectile.qh" #include @@ -18,10 +18,6 @@ .float death_time; .int modelflags; -void CSQCModel_Hook_PreDraw(entity this, bool isplayer); - -.bool isplayermodel; - // FEATURE: LOD .int lodmodelindex0; .int lodmodelindex1; @@ -364,7 +360,7 @@ void CSQCPlayer_AnimDecide_PostUpdate(entity this, bool isnew) } int CSQCPlayer_FallbackFrame(entity this, int f) { - TC(int, f); + TC(int, f); if(frameduration(this.modelindex, f) > 0) return f; // goooooood if(frameduration(this.modelindex, 1) <= 0) @@ -417,7 +413,7 @@ void CSQCModel_AutoTagIndex_Apply(entity this) // recursive predraw call to fix issues with forcemodels and LOD if bone indexes mismatch if(this.tag_entity.classname == "csqcmodel") { - CSQCModel_Hook_PreDraw(this.tag_entity, (this.tag_entity.entnum >= 1 && this.tag_entity.entnum <= maxclients)); + CSQCModel_Hook_PreDraw(this.tag_entity, (this.tag_entity.isplayermodel & ISPLAYER_ENT)); } if(this.tag_entity.modelindex != this.tag_entity_lastmodelindex) @@ -602,7 +598,7 @@ void CSQCModel_Hook_PreDraw(entity this, bool isplayer) return; this.csqcmodel_predraw_run = framecount; - if(!this.modelindex || this.model == "null") + if(!this.modelindex || this.model == "null" || this.alpha < 0) { this.drawmask = 0; return; @@ -610,9 +606,9 @@ void CSQCModel_Hook_PreDraw(entity this, bool isplayer) else this.drawmask = MASK_NORMAL; - if(this.isplayermodel) // this checks if it's a player MODEL! + if(this.isplayermodel && this.drawmask) // this checks if it's a player MODEL! { - CSQCPlayer_ModelAppearance_Apply(this, this.entnum == player_localnum + 1); + CSQCPlayer_ModelAppearance_Apply(this, (this.isplayermodel & ISPLAYER_LOCAL)); CSQCPlayer_LOD_Apply(this); if(!isplayer) @@ -712,7 +708,9 @@ void CSQCModel_Hook_PreUpdate(entity this, bool isnew, bool isplayer, bool isloc void CSQCModel_Hook_PostUpdate(entity this, bool isnew, bool isplayer, bool islocalplayer) { // is it a player model? (shared state) - this.isplayermodel = (substring(this.model, 0, 14) == "models/player/" || substring(this.model, 0, 17) == "models/ok_player/" || (substring(this.model, 0, 16) == "models/monsters/" && (this.entnum >= 1 && this.entnum <= maxclients))); + bool is_playermodel = (substring(this.model, 0, 14) == "models/player/" || substring(this.model, 0, 17) == "models/ok_player/" || + (substring(this.model, 0, 16) == "models/monsters/" && (this.isplayermodel & BIT(1)))); + this.isplayermodel = BITSET(this.isplayermodel, ISPLAYER_MODEL, is_playermodel); // save values set by server if(this.isplayermodel)