]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - sv_phys.c
experiemnt: call the event loop from loading plaque update. Does this fix the problem...
[xonotic/darkplaces.git] / sv_phys.c
index 91db80521cd3153c8445c091a6db494f9b798b90..591c2baf933c6e367e3a82d27f82857e09a6f07a 100644 (file)
--- a/sv_phys.c
+++ b/sv_phys.c
@@ -1958,13 +1958,19 @@ void SV_Physics_Toss (prvm_edict_t *ent)
                }
                else if (ent->fields.server->movetype == MOVETYPE_BOUNCE)
                {
-                       float d;
+                       float d, ent_gravity;
+                       prvm_eval_t *val;
                        ClipVelocity (ent->fields.server->velocity, trace.plane.normal, ent->fields.server->velocity, 1.5);
                        // LordHavoc: fixed grenades not bouncing when fired down a slope
+                       val = PRVM_EDICTFIELDVALUE(ent, prog->fieldoffsets.gravity);
+                       if (val!=0 && val->_float)
+                               ent_gravity = val->_float;
+                       else
+                               ent_gravity = 1.0;
                        if (sv_gameplayfix_grenadebouncedownslopes.integer)
                        {
                                d = DotProduct(trace.plane.normal, ent->fields.server->velocity);
-                               if (trace.plane.normal[2] > 0.7 && fabs(d) < sv_gravity.value * (60.0 / 800.0))
+                               if (trace.plane.normal[2] > 0.7 && fabs(d) < sv_gravity.value * (60.0 / 800.0) * ent_gravity)
                                {
                                        ent->fields.server->flags = (int)ent->fields.server->flags | FL_ONGROUND;
                                        ent->fields.server->groundentity = PRVM_EDICT_TO_PROG(trace.ent);
@@ -1976,7 +1982,7 @@ void SV_Physics_Toss (prvm_edict_t *ent)
                        }
                        else
                        {
-                               if (trace.plane.normal[2] > 0.7 && ent->fields.server->velocity[2] < sv_gravity.value * (60.0 / 800.0))
+                               if (trace.plane.normal[2] > 0.7 && ent->fields.server->velocity[2] < sv_gravity.value * (60.0 / 800.0) * ent_gravity)
                                {
                                        ent->fields.server->flags = (int)ent->fields.server->flags | FL_ONGROUND;
                                        ent->fields.server->groundentity = PRVM_EDICT_TO_PROG(trace.ent);
@@ -2219,7 +2225,7 @@ void SV_Physics_ClientEntity(prvm_edict_t *ent)
        }
 
        // don't run physics here if running asynchronously
-       if (host_client->clmovement_skipphysicsframes <= 0)
+       if (host_client->clmovement_inputtimeout <= 0)
        {
                SV_ClientThink();
                //host_client->cmd.time = max(host_client->cmd.time, sv.time);
@@ -2266,7 +2272,7 @@ void SV_Physics_ClientEntity(prvm_edict_t *ent)
        case MOVETYPE_WALK:
                SV_RunThink (ent);
                // don't run physics here if running asynchronously
-               if (host_client->clmovement_skipphysicsframes <= 0)
+               if (host_client->clmovement_inputtimeout <= 0)
                        SV_WalkMove (ent);
                break;
        case MOVETYPE_TOSS:
@@ -2288,8 +2294,10 @@ void SV_Physics_ClientEntity(prvm_edict_t *ent)
 
        // decrement the countdown variable used to decide when to go back to
        // synchronous physics
-       if (host_client->clmovement_skipphysicsframes > 0)
-               host_client->clmovement_skipphysicsframes--;
+       if (host_client->clmovement_inputtimeout > sv.frametime)
+               host_client->clmovement_inputtimeout -= sv.frametime;
+       else
+               host_client->clmovement_inputtimeout = 0;
 
        SV_CheckVelocity (ent);