Stop reinventing lerp() all over the place.

This commit is contained in:
Mari the Deer 2022-05-29 18:07:30 +02:00
commit 65597c181a
10 changed files with 38 additions and 31 deletions

View file

@ -151,7 +151,7 @@ Class ParryField : Actor
{
hdir = level.Vec3Diff(a.pos,a.target.Vec3Offset(0,0,a.target.height/2)).unit();
double theta = max(FRandom[Parry](0.,1.)**2.,.1);
dir = dir*(1.-theta)+hdir*theta;
dir = SWWMUtility.LerpVector3(dir,hdir,theta);
}
// push away
if ( a.bSEEKERMISSILE ) a.tracer = a.target;
@ -434,7 +434,7 @@ extend Class SWWMWeapon
// things can instantly cease to exist after taking damage (wow)
if ( mt.hits[i].a )
{
if ( mt.hits[i].a.player ) mt.hits[i].a.A_QuakeEx(quakin,quakin,quakin,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.125*quakin);
if ( mt.hits[i].a.player ) mt.hits[i].a.A_QuakeEx(quakin,quakin,quakin,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:.125*quakin);
if ( !mt.hits[i].a.bNOBLOOD && !mt.hits[i].a.bDORMANT && (raging || !mt.hits[i].a.bINVULNERABLE) )
{
mt.hits[i].a.TraceBleed(newdmg,invoker);

View file

@ -70,7 +70,7 @@ extend Class SWWMWeapon
double theta = clamp(15.*frametime,0.,1.); // naive, but whatever
Vector2 oldvpos = lagvpos;
if ( !prevframe || (lagvpos == (0,0)) ) oldvpos = lagvpos = vpos;
else lagvpos = lagvpos*(1.-theta)+vpos*theta;
else lagvpos = SWWMUtility.LerpVector2(lagvpos,vpos,theta);
prevframe = MSTimeF();
int cnum = abs(CVar.FindCVar('crosshair').GetInt());
if ( !cnum ) return;

View file

@ -131,7 +131,7 @@ Class Hellblazer : SWWMWeapon
for ( int i=0; i<3; i++ )
{
if ( !seektarget[i] ) continue;
Vector3 tpos = seektarget[i].prev*(1.-e.FracTic)+seektarget[i].pos*e.FracTic;
Vector3 tpos = SWWMUtility.LerpVector3(seektarget[i].prev,seektarget[i].pos,e.FracTic);
Vector3 ndc = SWWMUtility.ProjectPoint(projdata,e.viewpos+level.Vec3Diff(e.viewpos,tpos+(0,0,seektarget[i].Height/2)));
if ( ndc.z > 1. ) continue;
Vector2 vpos = SWWMUtility.NDCToViewport(projdata,ndc);

View file

@ -162,7 +162,7 @@ Class Wallbuster : SWWMWeapon
double frametime = (MSTimeF()-prevframe)/1000.;
double theta = clamp(15.*frametime,0.,1.); // naive, but whatever
if ( !prevframe || (lagvpos == (0,0)) ) lagvpos = vpos;
else lagvpos = lagvpos*(1.-theta)+vpos*theta;
else lagvpos = SWWMUtility.LerpVector2(lagvpos,vpos,theta);
Vector2 oldvpos;
for ( int i=0; i<25; i++ )
{
@ -173,7 +173,7 @@ Class Wallbuster : SWWMWeapon
vpos = SWWMUtility.NDCToViewport(sb.projdata,ndc);
oldvpos = lagvpos25[i];
if ( !prevframe || (lagvpos25[i] == (0,0)) ) oldvpos = lagvpos25[i] = vpos;
else lagvpos25[i] = lagvpos25[i]*(1.-theta)+vpos*theta;
else lagvpos25[i] = SWWMUtility.LerpVector2(lagvpos25[i],vpos,theta);
int streak = int(max(abs(oldvpos.x-lagvpos25[i].x),abs(oldvpos.y-lagvpos25[i].y)));
for ( int j=0; j<streak; j++ ) Screen.DrawTexture(ctex,false,int(SWWMUtility.lerp(oldvpos.x,lagvpos25[i].x,j/double(streak))),int(SWWMUtility.lerp(oldvpos.y,lagvpos25[i].y,j/double(streak))),DTA_DestWidthF,ts.x*sz,DTA_DestHeightF,ts.y*sz,DTA_AlphaChannel,true,DTA_FillColor,ccol,DTA_Alpha,(j*.5)/streak);
Screen.DrawTexture(ctex,false,int(lagvpos25[i].x),int(lagvpos25[i].y),DTA_DestWidthF,ts.x*sz,DTA_DestHeightF,ts.y*sz,DTA_AlphaChannel,true,DTA_FillColor,ccol25[i]);