X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fcsqcmodel_hooks.qc;h=121af1947a9b256ae2b4e0e7013ea4865db10898;hb=561489d21c9053b7103c6604c362aa24ee5c7916;hp=e74fee00d5630cd745f7f81e5e1fe3a60a98c9da;hpb=f22b9f83b24cae4a7e31ef6e310214be7d735a4d;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/csqcmodel_hooks.qc b/qcsrc/client/csqcmodel_hooks.qc index e74fee00d..121af1947 100644 --- a/qcsrc/client/csqcmodel_hooks.qc +++ b/qcsrc/client/csqcmodel_hooks.qc @@ -23,8 +23,10 @@ .int lodmodelindex0; .int lodmodelindex1; .int lodmodelindex2; -void CSQCPlayer_LOD_Apply(entity this) +void CSQCPlayer_LOD_Apply(entity this, bool isplayer) { + int detailreduction = ((isplayer) ? autocvar_cl_playerdetailreduction : autocvar_cl_modeldetailreduction); + // LOD model loading if(this.lodmodelindex0 != this.modelindex) { @@ -63,19 +65,19 @@ void CSQCPlayer_LOD_Apply(entity this) } // apply LOD - if(autocvar_cl_playerdetailreduction <= 0) + if(detailreduction <= 0) { - if(autocvar_cl_playerdetailreduction <= -2) + if(detailreduction <= -2) this.modelindex = this.lodmodelindex2; - else if(autocvar_cl_playerdetailreduction <= -1) + else if(detailreduction <= -1) this.modelindex = this.lodmodelindex1; else this.modelindex = this.lodmodelindex0; } else { - float distance = vlen(this.origin - view_origin); - float f = (distance * current_viewzoom + 100.0) * autocvar_cl_playerdetailreduction; + float distance = vlen(((isplayer) ? this.origin : NearestPointOnBox(this, view_origin)) - view_origin); // TODO: perhaps it should just use NearestPointOnBox all the time, player hitbox can potentially be huge + float f = (distance * current_viewzoom + 100.0) * detailreduction; f *= 1.0 / bound(0.01, view_quality, 1); if(f > autocvar_cl_loddistance2) this.modelindex = this.lodmodelindex2; @@ -236,7 +238,7 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer) bool forceplayercolors_enabled = false; #define fpc autocvar_cl_forceplayercolors - if (ISGAMETYPE(DUEL)) + if (gametype.m_1v1) { if ((myteam != NUM_SPECTATOR) && (fpc == 1 || fpc == 2 || fpc == 3 || fpc == 5)) forceplayercolors_enabled = true; @@ -301,7 +303,7 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer) { if(autocvar_cl_forcemyplayercolors && islocalplayer) this.colormap = 1024 + autocvar_cl_forcemyplayercolors; - else if (autocvar_cl_forceuniqueplayercolors && !islocalplayer && !ISGAMETYPE(DUEL)) + else if (autocvar_cl_forceuniqueplayercolors && !islocalplayer && !gametype.m_1v1) { // Assign each enemy unique colors // pick colors from 0 to 14 since 15 is the rainbow color @@ -667,7 +669,7 @@ void CSQCModel_Hook_PreDraw(entity this, bool isplayer) if((this.isplayermodel & ISPLAYER_MODEL) && this.drawmask) // this checks if it's a player MODEL! { CSQCPlayer_ModelAppearance_Apply(this, (this.isplayermodel & ISPLAYER_LOCAL)); - CSQCPlayer_LOD_Apply(this); + CSQCPlayer_LOD_Apply(this, true); if(!isplayer) { @@ -745,6 +747,8 @@ void CSQCModel_Hook_PreDraw(entity this, bool isplayer) } } } + else + CSQCPlayer_LOD_Apply(this, false); CSQCModel_AutoTagIndex_Apply(this);