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=e27557cf451446f3e6c722c664ba7a28d750d487;hb=4d91f9f38ee0fe58d4ac93662da2bcd52921d373;hpb=ea813a0d3eb5e6eff31c0be465bfdd0ae9dd5191 diff --git a/qcsrc/client/csqcmodel_hooks.qc b/qcsrc/client/csqcmodel_hooks.qc index e27557cf4..bbe0b4d22 100644 --- a/qcsrc/client/csqcmodel_hooks.qc +++ b/qcsrc/client/csqcmodel_hooks.qc @@ -1,11 +1,16 @@ #include "csqcmodel_hooks.qh" -#include "mutators/events.qh" +#include "autocvars.qh" +#include "csqcmodel_hooks.qh" +#include "miscfunctions.qh" +#include #include "player_skeleton.qh" #include "weapons/projectile.qh" #include #include #include #include +#include +#include #include #include #include @@ -13,10 +18,6 @@ .float death_time; .int modelflags; -void CSQCModel_Hook_PreDraw(entity this, bool isplayer); - -.bool isplayermodel; - // FEATURE: LOD .int lodmodelindex0; .int lodmodelindex1; @@ -129,7 +130,7 @@ void CSQCPlayer_ModelAppearance_PostUpdate(entity this) this.forceplayermodels_isgoodmodel = fexists(this.forceplayermodels_savemodel); this.forceplayermodels_isgoodmodel_mdl = this.forceplayermodels_savemodel; if(!this.forceplayermodels_isgoodmodel) - LOG_INFOF("Warning: missing model %s has been used\n", this.forceplayermodels_savemodel); + LOG_INFOF("Warning: missing model %s has been used", this.forceplayermodels_savemodel); } } void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer) @@ -359,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) @@ -412,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) @@ -597,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; @@ -605,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) @@ -707,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)