2
0
mirror of https://github.com/rehlds/rehlds.git synced 2024-12-27 07:05:43 +03:00

Move SV_CheckMovingGround into SV_Physics (#1045)

This commit is contained in:
Francisco Muñoz 2024-12-09 09:20:17 -03:00 committed by GitHub
parent e83b324301
commit 4afb6e3be9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 35 deletions

View File

@ -1491,28 +1491,7 @@ void SV_Physics()
if (i > 0 && i <= g_psvs.maxclients) if (i > 0 && i <= g_psvs.maxclients)
continue; continue;
if (ent->v.flags & FL_ONGROUND) SV_CheckMovingGround(ent, host_frametime);
{
edict_t *groundentity = ent->v.groundentity;
if (groundentity && (groundentity->v.flags & FL_CONVEYOR))
{
if (ent->v.flags & FL_BASEVELOCITY)
VectorMA(ent->v.basevelocity, groundentity->v.speed, groundentity->v.movedir, ent->v.basevelocity);
else
VectorScale(groundentity->v.movedir, groundentity->v.speed, ent->v.basevelocity);
ent->v.flags |= FL_BASEVELOCITY;
}
}
if (!(ent->v.flags & FL_BASEVELOCITY))
{
// Apply momentum (add in half of the previous frame of velocity first)
VectorMA(ent->v.velocity, (host_frametime * 0.5f + 1.0f), ent->v.basevelocity, ent->v.velocity);
VectorClear(ent->v.basevelocity);
}
ent->v.flags &= ~FL_BASEVELOCITY;
switch (ent->v.movetype) switch (ent->v.movetype)
{ {

View File

@ -686,35 +686,33 @@ qboolean SV_PlayerRunThink(edict_t *ent, float frametime, double clienttimebase)
return ent->free == 0; return ent->free == 0;
} }
void SV_CheckMovingGround(edict_t *player, float frametime) void SV_CheckMovingGround(edict_t *ent, float frametime)
{ {
edict_t *groundentity; edict_t *groundentity;
if (player->v.flags & FL_ONGROUND) if (ent->v.flags & FL_ONGROUND)
{ {
groundentity = player->v.groundentity; groundentity = ent->v.groundentity;
if (groundentity) if (groundentity)
{ {
if (groundentity->v.flags & FL_CONVEYOR) if (groundentity->v.flags & FL_CONVEYOR)
{ {
if (player->v.flags & FL_BASEVELOCITY) if (ent->v.flags & FL_BASEVELOCITY)
VectorMA(player->v.basevelocity, groundentity->v.speed, groundentity->v.movedir, player->v.basevelocity); VectorMA(ent->v.basevelocity, groundentity->v.speed, groundentity->v.movedir, ent->v.basevelocity);
else else
VectorScale(groundentity->v.movedir, groundentity->v.speed, player->v.basevelocity); VectorScale(groundentity->v.movedir, groundentity->v.speed, ent->v.basevelocity);
player->v.flags |= FL_BASEVELOCITY; ent->v.flags |= FL_BASEVELOCITY;
} }
} }
} }
if (!(player->v.flags & FL_BASEVELOCITY)) if (!(ent->v.flags & FL_BASEVELOCITY))
{ {
VectorMA(player->v.velocity, frametime * 0.5f + 1.0f, player->v.basevelocity, player->v.velocity); VectorMA(ent->v.velocity, frametime * 0.5f + 1.0f, ent->v.basevelocity, ent->v.velocity);
player->v.basevelocity[0] = 0; VectorClear(ent->v.basevelocity);
player->v.basevelocity[1] = 0;
player->v.basevelocity[2] = 0;
} }
player->v.flags &= ~FL_BASEVELOCITY; ent->v.flags &= ~FL_BASEVELOCITY;
} }
void SV_ConvertPMTrace(trace_t *dest, pmtrace_t *src, edict_t *ent) void SV_ConvertPMTrace(trace_t *dest, pmtrace_t *src, edict_t *ent)