]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
some slight cleanup of SV_PushMove
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 22 Jan 2008 20:03:47 +0000 (20:03 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 22 Jan 2008 20:03:47 +0000 (20:03 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7995 d7cf8633-e32d-0410-b094-e92efae38249

sv_phys.c

index 6262fb5373726cb377935a788eab7ecd04c15d64..dd59d76eceec9b0ad23070f9cfc5130db4554965 100644 (file)
--- a/sv_phys.c
+++ b/sv_phys.c
@@ -1055,6 +1055,8 @@ SV_PushMove
 void SV_PushMove (prvm_edict_t *pusher, float movetime)
 {
        int i, e, index;
+       int checkcontents;
+       qboolean rotated;
        float savesolid, movetime2, pushltime;
        vec3_t mins, maxs, move, move1, moveangle, pushorig, pushang, a, forward, left, up, org;
        int num_moved;
@@ -1102,6 +1104,8 @@ void SV_PushMove (prvm_edict_t *pusher, float movetime)
        }
        pushermodel = sv.models[index];
 
+       rotated = VectorLength2(pusher->fields.server->angles) + VectorLength2(pusher->fields.server->avelocity) > 0;
+
        movetime2 = movetime;
        VectorScale(pusher->fields.server->velocity, movetime2, move1);
        VectorScale(pusher->fields.server->avelocity, movetime2, moveangle);
@@ -1183,7 +1187,6 @@ void SV_PushMove (prvm_edict_t *pusher, float movetime)
        for (e = 0;e < numcheckentities;e++)
        {
                prvm_edict_t *check = checkentities[e];
-               int checkcontents = SV_GenericHitSuperContentsMask(check);
                if (check->fields.server->movetype == MOVETYPE_NONE
                 || check->fields.server->movetype == MOVETYPE_PUSH
                 || check->fields.server->movetype == MOVETYPE_FOLLOW
@@ -1191,21 +1194,28 @@ void SV_PushMove (prvm_edict_t *pusher, float movetime)
                 || check->fields.server->movetype == MOVETYPE_FAKEPUSH)
                        continue;
 
+               //Con_Printf("%i %s ", PRVM_NUM_FOR_EDICT(check), PRVM_GetString(check->fields.server->classname));
+
                // tell any MOVETYPE_STEP entity that it may need to check for water transitions
                check->priv.server->waterposition_forceupdate = true;
 
+               checkcontents = SV_GenericHitSuperContentsMask(check);
+
                // if the entity is standing on the pusher, it will definitely be moved
                // if the entity is not standing on the pusher, but is in the pusher's
                // final position, move it
                if (!((int)check->fields.server->flags & FL_ONGROUND) || PRVM_PROG_TO_EDICT(check->fields.server->groundentity) != pusher)
                {
                        Collision_ClipToGenericEntity(&trace, pushermodel, pusher->fields.server->frame, pusher->fields.server->mins, pusher->fields.server->maxs, SUPERCONTENTS_BODY, &pusherfinalmatrix, &pusherfinalimatrix, check->fields.server->origin, check->fields.server->mins, check->fields.server->maxs, check->fields.server->origin, checkcontents);
+                       //trace = SV_Move(check->fields.server->origin, check->fields.server->mins, check->fields.server->maxs, check->fields.server->origin, MOVE_NOMONSTERS, check, checkcontents);
                        if (!trace.startsolid)
+                       {
+                               //Con_Printf("- not in solid\n");
                                continue;
+                       }
                }
 
-
-               if (forward[0] != 1 || left[1] != 1) // quick way to check if any rotation is used
+               if (rotated)
                {
                        vec3_t org2;
                        VectorSubtract (check->fields.server->origin, pusher->fields.server->origin, org);
@@ -1218,6 +1228,8 @@ void SV_PushMove (prvm_edict_t *pusher, float movetime)
                else
                        VectorCopy (move1, move);
 
+               //Con_Printf("- pushing %f %f %f\n", move[0], move[1], move[2]);
+
                VectorCopy (check->fields.server->origin, check->priv.server->moved_from);
                VectorCopy (check->fields.server->angles, check->priv.server->moved_fromangles);
                moved_edicts[num_moved++] = PRVM_NUM_FOR_EDICT(check);