X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=sv_phys.c;h=6cfa187eb309eb91b1466ee978484eec52750ff7;hb=0db6270f9fdf1da680391fe0389d7ad6cfc48517;hp=76959a5b7a7009aa9a18eaefe15e3cc7342ec2ea;hpb=93bce2dbe64b734e74d721164369943fffe7e397;p=xonotic%2Fdarkplaces.git diff --git a/sv_phys.c b/sv_phys.c index 76959a5b..6cfa187e 100644 --- a/sv_phys.c +++ b/sv_phys.c @@ -521,7 +521,7 @@ trace_t SV_PushEntity (edict_t *ent, vec3_t push, vec3_t pushangles) ent->v->angles[1] += trace.fraction * pushangles[1]; SV_LinkEdict (ent, true); - if (trace.ent && (!((int)ent->v->flags & FL_ONGROUND) || ent->v->groundentity != EDICT_TO_PROG(trace.ent))) + if (trace.fraction < 1 && trace.ent && (!((int)ent->v->flags & FL_ONGROUND) || ent->v->groundentity != EDICT_TO_PROG(trace.ent))) SV_Impact (ent, trace.ent); return trace; } @@ -854,18 +854,18 @@ qboolean SV_CheckWater (edict_t *ent) ent->v->waterlevel = 0; ent->v->watertype = CONTENTS_EMPTY; - cont = SV_PointContents(point); + cont = SV_PointQ1Contents(point); if (cont <= CONTENTS_WATER) { ent->v->watertype = cont; ent->v->waterlevel = 1; point[2] = ent->v->origin[2] + (ent->v->mins[2] + ent->v->maxs[2])*0.5; - cont = SV_PointContents(point); + cont = SV_PointQ1Contents(point); if (cont <= CONTENTS_WATER) { ent->v->waterlevel = 2; point[2] = ent->v->origin[2] + ent->v->view_ofs[2]; - cont = SV_PointContents(point); + cont = SV_PointQ1Contents(point); if (cont <= CONTENTS_WATER) ent->v->waterlevel = 3; } @@ -1100,25 +1100,6 @@ void SV_Physics_Follow (edict_t *ent) SV_LinkEdict (ent, true); } -/* -============= -SV_Physics_Noclip - -A moving object that doesn't obey physics -============= -*/ -void SV_Physics_Noclip (edict_t *ent) -{ - // regular thinking - if (!SV_RunThink (ent)) - return; - - VectorMA (ent->v->angles, sv.frametime, ent->v->avelocity, ent->v->angles); - VectorMA (ent->v->origin, sv.frametime, ent->v->velocity, ent->v->origin); - - SV_LinkEdict (ent, false); -} - /* ============================================================================== @@ -1136,7 +1117,7 @@ SV_CheckWaterTransition void SV_CheckWaterTransition (edict_t *ent) { int cont; - cont = SV_PointContents(ent->v->origin); + cont = SV_PointQ1Contents(ent->v->origin); if (!ent->v->watertype) { // just spawned here @@ -1161,7 +1142,7 @@ void SV_CheckWaterTransition (edict_t *ent) SV_StartSound (ent, 0, "misc/h2ohit1.wav", 255, 1); ent->v->watertype = CONTENTS_EMPTY; - ent->v->waterlevel = cont; + ent->v->waterlevel = 0; } } @@ -1333,9 +1314,9 @@ void SV_Physics (void) if (pr_global_struct->force_retouch) SV_LinkEdict (ent, true); // force retouch even for stationary - if (i > 0 && i <= svs.maxclients) + if (i > 0 && i <= MAX_SCOREBOARD) { - if (!svs.clients[i-1].active) + if (!svs.connectedclients[i-1] || !svs.connectedclients[i-1]->spawned) continue; // connected slot // call standard client pre-think @@ -1361,17 +1342,15 @@ void SV_Physics (void) SV_Physics_Follow (ent); break; case MOVETYPE_NOCLIP: - if (i > 0 && i <= svs.maxclients) + if (SV_RunThink(ent)) { - if (SV_RunThink (ent)) - { - SV_CheckWater (ent); - VectorMA (ent->v->origin, sv.frametime, ent->v->velocity, ent->v->origin); - VectorMA (ent->v->angles, sv.frametime, ent->v->avelocity, ent->v->angles); - } + SV_CheckWater(ent); + VectorMA(ent->v->origin, sv.frametime, ent->v->velocity, ent->v->origin); + VectorMA(ent->v->angles, sv.frametime, ent->v->avelocity, ent->v->angles); } - else - SV_Physics_Noclip (ent); + // relink normal entities here, players always get relinked so don't relink twice + if (!(i > 0 && i <= MAX_SCOREBOARD)) + SV_LinkEdict(ent, false); break; case MOVETYPE_STEP: SV_Physics_Step (ent); @@ -1393,7 +1372,7 @@ void SV_Physics (void) SV_Physics_Toss (ent); break; case MOVETYPE_FLY: - if (i > 0 && i <= svs.maxclients) + if (i > 0 && i <= MAX_SCOREBOARD) { if (SV_RunThink (ent)) { @@ -1409,7 +1388,7 @@ void SV_Physics (void) break; } - if (i > 0 && i <= svs.maxclients && !ent->e->free) + if (i > 0 && i <= MAX_SCOREBOARD && !ent->e->free) { SV_CheckVelocity (ent);