From ee9f87b609baf8d1d9b0ef35a706d3913fed72ee Mon Sep 17 00:00:00 2001 From: Lee Salzman Date: Fri, 26 Dec 2008 16:13:29 +0000 Subject: [PATCH] fixed jittery player-player collision git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@4069 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/physics.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/source/src/physics.cpp b/source/src/physics.cpp index 2259edfb..98f1e519 100644 --- a/source/src/physics.cpp +++ b/source/src/physics.cpp @@ -512,17 +512,14 @@ void moveplayer(physent *pl, int moveres, bool local, int curtime) } if(pl->type==ENT_PLAYER && hitplayer) { - float dx = hitplayer->o.x-pl->o.x, dy = hitplayer->o.y-pl->o.y, mag = sqrtf(dx*dx+dy*dy); - if(mag) - { - dx /= mag; - dy /= mag; - pl->o.x -= f*(dx + d.x); - pl->o.y -= f*(dy + d.y); - if(collide(pl, false, drop, rise)) continue; - pl->o.x += f*(dx + d.x); - pl->o.y += f*(dy + d.y); - } + float dx = hitplayer->o.x-pl->o.x, dy = hitplayer->o.y-pl->o.y, + push = dx*d.x + dy*d.y, + px = push*dx, py = push*dy; + pl->o.x -= f*px; + pl->o.y -= f*py; + if(collide(pl, false, drop, rise)) continue; + pl->o.x += f*px; + pl->o.y += f*py; } // player stuck, try slide along y axis pl->o.x -= f*d.x;