roll update

- split into strafe roll (maxroll) and damage roll (maxrolleffect)
- locally recompute remote players roll (can be removed from pos pkt)
- fix maxrollremote

DOCREF maxroll maxrolleffect maxrollremote
This commit is contained in:
ac-stef
2017-04-29 18:23:23 +02:00
parent deb73081e8
commit 1b596e059a
6 changed files with 40 additions and 41 deletions
+19 -23
View File
@@ -351,7 +351,9 @@ bool collide(physent *d, bool spawn, float drop, float rise)
return false;
}
VARP(maxroll, 0, 0, 20); // note: when changing max value, fix network transmission
VARFP(maxroll, 0, ROLLMOVDEF, ROLLMOVMAX, player1->maxroll = maxroll);
VARFP(maxrolleffect, 0, ROLLEFFDEF, ROLLEFFMAX, player1->maxrolleffect = maxrolleffect);
VARP(maxrollremote, 0, ROLLMOVDEF + ROLLEFFDEF, ROLLMOVMAX + ROLLEFFMAX);
//VAR(recoilbackfade, 0, 100, 1000);
void resizephysent(physent *pl, int moveres, int curtime, float min, float max)
@@ -393,18 +395,6 @@ void resizephysent(physent *pl, int moveres, int curtime, float min, float max)
// moveres indicated the physics precision (which is lower for monsters and multiplayer prediction)
// local is false for multiplayer prediction
void clamproll(physent *pl)
{
extern int maxrollremote;
int mroll = pl == player1 ? maxroll : maxrollremote;
if(pl->roll > mroll) pl->roll = mroll;
else if(pl->roll < -mroll) pl->roll = -mroll;
}
float var_f = 0;
int var_i = 0;
bool var_b = true;
FVARP(flyspeed, 1.0, 2.0, 5.0);
void moveplayer(physent *pl, int moveres, bool local, int curtime)
@@ -719,19 +709,25 @@ void moveplayer(physent *pl, int moveres, bool local, int curtime)
if(pl->type==ENT_CAMERA) return;
if(pl->type!=ENT_BOUNCE && pl==player1)
if(pl->type!=ENT_BOUNCE)
{
// automatically apply smooth roll when strafing
if(pl->strafe==0)
if(pl->type == ENT_PLAYER)
{
pl->roll = pl->roll/(1+(float)sqrt((float)curtime)/25);
// automatically apply smooth roll when strafing
playerent *p = (playerent *)pl;
float iir = 1.0f + sqrtf((float)curtime) / 25.0f;
if(pl->strafe==0)
{
p->movroll /= iir;
}
else
{
p->movroll = clamp(p->movroll + pl->strafe * curtime / -30.0f, -p->maxroll, p->maxroll);
}
p->effroll /= iir; // fade damage roll
pl->roll = p->movroll + p->effroll;
if(pl != player1) pl->roll = clamp(pl->roll, (float)-maxrollremote, (float)maxrollremote);
}
else
{
pl->roll += pl->strafe*curtime/-30.0f;
clamproll(pl);
}
// smooth pitch
const float fric = 6.0f/curtime*20.0f;
pl->pitch += pl->pitchvel*(curtime/1000.0f)*pl->maxspeed*(pl->crouching ? 0.75f : 1.0f);