Stop reinventing lerp() all over the place.
This commit is contained in:
parent
f2af4dd14d
commit
65597c181a
10 changed files with 38 additions and 31 deletions
|
|
@ -60,7 +60,7 @@ extend Class SWWMHandler
|
|||
|
||||
private ui void DrawActor( RenderEvent e, Actor a )
|
||||
{
|
||||
Vector3 pos = a.prev*(1.-e.FracTic)+a.pos*e.FracTic;
|
||||
Vector3 pos = SWWMUtility.LerpVector3(a.prev,a.pos,e.FracTic);
|
||||
if ( a is 'DynamicLight' ) DrawWorldCircle(e,pos,a.args[3]*2,Color(a.args[0],a.args[1],a.args[2]));
|
||||
if ( (a.radius > 0.) && (a.height > 0.) )
|
||||
{
|
||||
|
|
@ -86,9 +86,9 @@ extend Class SWWMHandler
|
|||
DrawWorldLine(e,pos,pos+y*16,"Green");
|
||||
DrawWorldLine(e,pos,pos+z*16,"Blue");
|
||||
if ( a.vel != (0,0,0) ) DrawWorldLine(e,pos,pos+a.vel*GameTicRate,"Yellow");
|
||||
if ( a.target ) DrawWorldLine(e,pos,a.target.prev*(1.-e.FracTic)+a.target.pos*e.FracTic,"Gold");
|
||||
if ( a.tracer ) DrawWorldLine(e,pos,a.tracer.prev*(1.-e.FracTic)+a.tracer.pos*e.FracTic,"Orange");
|
||||
if ( a.master ) DrawWorldLine(e,pos,a.master.prev*(1.-e.FracTic)+a.master.pos*e.FracTic,"Purple");
|
||||
if ( a.target ) DrawWorldLine(e,pos,SWWMUtility.LerpVector3(a.target.prev,a.target.pos,e.FracTic),"Gold");
|
||||
if ( a.tracer ) DrawWorldLine(e,pos,SWWMUtility.LerpVector3(a.tracer.prev,a.tracer.pos,e.FracTic),"Orange");
|
||||
if ( a.master ) DrawWorldLine(e,pos,SWWMUtility.LerpVector3(a.master.prev,a.master.pos,e.FracTic),"Purple");
|
||||
double hdiff = a.Height/2;
|
||||
if ( a.bFLOATBOB ) hdiff += a.GetBobOffset();
|
||||
Vector3 ndc = SWWMUtility.ProjectPoint(projdata,e.viewpos+level.Vec3Diff(e.viewpos,pos+(0,0,hdiff)));
|
||||
|
|
|
|||
|
|
@ -1338,7 +1338,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
{
|
||||
let targ = trackers[i];
|
||||
if ( !targ ) continue;
|
||||
Vector3 ndc = SWWMUtility.ProjectPoint(projdata,ViewPos+level.Vec3Diff(ViewPos,targ.prevpos*(1.-fractic)+targ.pos*fractic));
|
||||
Vector3 ndc = SWWMUtility.ProjectPoint(projdata,ViewPos+level.Vec3Diff(ViewPos,SWWMUtility.LerpVector3(targ.prevpos,targ.pos,fractic)));
|
||||
if ( ndc.z >= 1. ) continue;
|
||||
Vector2 vpos = SWWMUtility.NDCToViewport(projdata,ndc);
|
||||
tag = targ.mytag;
|
||||
|
|
@ -1748,9 +1748,9 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
|
||||
private void DrawMapGrid( Vector2 basepos )
|
||||
{
|
||||
double zoomlevel = oldminimapzoom*(1.-FracTic)+minimapzoom*FracTic;
|
||||
double zoomlevel = SWWMUtility.Lerp(oldminimapzoom,minimapzoom,FracTic);
|
||||
double zoomview = MAPVIEWDIST*zoomlevel, zoomclip = CLIPDIST*zoomlevel;
|
||||
Vector2 cpos = players[consoleplayer].Camera.prev.xy*(1.-FracTic)+players[consoleplayer].Camera.pos.xy*FracTic;
|
||||
Vector2 cpos = SWWMUtility.LerpVector2(players[consoleplayer].Camera.prev.xy,players[consoleplayer].Camera.pos.xy,FracTic);
|
||||
// find farthest visible southwest grid point from camera position
|
||||
int maxlines = int(zoomview/64);
|
||||
Vector2 gpt = (cpos-(zoomview,zoomview))/128;
|
||||
|
|
@ -1850,9 +1850,9 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
|
||||
private void DrawMapLines( Vector2 basepos )
|
||||
{
|
||||
double zoomlevel = oldminimapzoom*(1.-FracTic)+minimapzoom*FracTic;
|
||||
double zoomlevel = SWWMUtility.Lerp(oldminimapzoom,minimapzoom,FracTic);
|
||||
double zoomview = MAPVIEWDIST*zoomlevel, zoomclip = CLIPDIST*zoomlevel;
|
||||
Vector2 cpos = players[consoleplayer].Camera.prev.xy*(1.-FracTic)+players[consoleplayer].Camera.pos.xy*FracTic;
|
||||
Vector2 cpos = SWWMUtility.LerpVector2(players[consoleplayer].Camera.prev.xy,players[consoleplayer].Camera.pos.xy,FracTic);
|
||||
Sector csec = players[consoleplayer].Camera.CurSector;
|
||||
for ( int i=0; i<level.lines.Size(); i++ )
|
||||
{
|
||||
|
|
@ -1960,9 +1960,9 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
}
|
||||
private void DrawMapMarkers( Vector2 basepos )
|
||||
{
|
||||
double zoomlevel = oldminimapzoom*(1.-FracTic)+minimapzoom*FracTic;
|
||||
double zoomlevel = SWWMUtility.Lerp(oldminimapzoom,minimapzoom,FracTic);
|
||||
double zoomview = MAPVIEWDIST*zoomlevel, zoomclip = CLIPDIST*zoomlevel;
|
||||
Vector2 cpos = players[consoleplayer].Camera.prev.xy*(1.-FracTic)+players[consoleplayer].Camera.pos.xy*FracTic;
|
||||
Vector2 cpos = SWWMUtility.LerpVector2(players[consoleplayer].Camera.prev.xy,players[consoleplayer].Camera.pos.xy,FracTic);
|
||||
Sector csec = players[consoleplayer].Camera.CurSector;
|
||||
if ( !mi ) mi = ThinkerIterator.Create("MapMarker",Thinker.STAT_MAPMARKER);
|
||||
else mi.Reinit();
|
||||
|
|
@ -2045,9 +2045,9 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
}
|
||||
private void DrawMapThings( Vector2 basepos )
|
||||
{
|
||||
double zoomlevel = oldminimapzoom*(1.-FracTic)+minimapzoom*FracTic;
|
||||
double zoomlevel = SWWMUtility.Lerp(oldminimapzoom,minimapzoom,FracTic);
|
||||
double zoomview = MAPVIEWDIST*zoomlevel, zoomclip = CLIPDIST*zoomlevel;
|
||||
Vector2 cpos = players[consoleplayer].Camera.prev.xy*(1.-FracTic)+players[consoleplayer].Camera.pos.xy*FracTic;
|
||||
Vector2 cpos = SWWMUtility.LerpVector2(players[consoleplayer].Camera.prev.xy,players[consoleplayer].Camera.pos.xy,FracTic);
|
||||
Sector csec = players[consoleplayer].Camera.CurSector;
|
||||
for ( SWWMSimpleTracker t=hnd.strackers; t; t=t.next )
|
||||
{
|
||||
|
|
@ -2061,7 +2061,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
double radius;
|
||||
if ( t.target )
|
||||
{
|
||||
pos = t.target.prev.xy*(1.-FracTic)+t.target.pos.xy*FracTic;
|
||||
pos = SWWMUtility.LerpVector2(t.target.prev.xy,t.target.pos.xy,FracTic);
|
||||
angle = t.target.angle;
|
||||
radius = t.isbeam?(t.target.speed*cos(t.target.pitch)):t.target.radius;
|
||||
}
|
||||
|
|
@ -2170,7 +2170,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
double alph = clamp(((t.lastupdate+mtime)-level.maptime)/35.,0.,1.);
|
||||
if ( t.isbeam ) alph *= t.target?(t.target.alpha/t.target.default.alpha):0.;
|
||||
double theta = clamp(5.*FrameTime,0.,1.);
|
||||
t.smoothalpha = t.smoothalpha*(1.-theta)+alph*theta;
|
||||
t.smoothalpha = SWWMUtility.Lerp(t.smoothalpha,alph,theta);
|
||||
}
|
||||
else t.smoothalpha = 0.;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -344,7 +344,7 @@ Class SWWMMainMenu : SWWMCleanMenu
|
|||
// naive, but whatever
|
||||
if ( swwm_oldlogo ) theta = clamp(2.*frametime,0.,1.);
|
||||
else theta = clamp(4.*frametime,0.,1.);
|
||||
if ( prevms ) demopos = demopos*(1.-theta)-40*theta;
|
||||
if ( prevms ) demopos = SWWMUtility.Lerp(demopos,-40,theta);
|
||||
double alph = clamp(1.-(demopos/100),0.,1.);
|
||||
if ( !swwm_oldlogo )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -801,10 +801,10 @@ Class Demolitionist : PlayerPawn
|
|||
player.WeaponState |= WF_WEAPONBOBBING; // always bob
|
||||
Vector2 cur = Super.BobWeapon(ticfrac);
|
||||
if ( !oldbob ) player.WeaponState &= ~WF_WEAPONBOBBING;
|
||||
double fangle = oldangle*(1.-ticfrac)+angle*ticfrac;
|
||||
double fpitch = (oldpitch*(1.-ticfrac)+pitch*ticfrac);
|
||||
double flagangle = (oldlagangle*(1.-ticfrac)+lagangle*ticfrac);
|
||||
double flagpitch = (oldlagpitch*(1.-ticfrac)+lagpitch*ticfrac);
|
||||
double fangle = SWWMUtility.Lerp(oldangle,angle,ticfrac);
|
||||
double fpitch = SWWMUtility.Lerp(oldpitch,pitch,ticfrac);
|
||||
double flagangle = SWWMUtility.Lerp(oldlagangle,lagangle,ticfrac);
|
||||
double flagpitch = SWWMUtility.Lerp(oldlagpitch,lagpitch,ticfrac);
|
||||
double diffang = fangle-flagangle;
|
||||
double diffpitch = fpitch-flagpitch;
|
||||
if ( abs(diffang) > 1. )
|
||||
|
|
@ -817,7 +817,7 @@ Class Demolitionist : PlayerPawn
|
|||
int sgn = (diffpitch>0)?1:-1;
|
||||
diffpitch = abs(diffpitch)**.7*sgn;
|
||||
}
|
||||
Vector3 flagvel = oldlagvel*(1.-ticfrac)+lagvel*ticfrac;
|
||||
Vector3 flagvel = SWWMUtility.LerpVector3(oldlagvel,lagvel,ticfrac);
|
||||
double diffx = flagvel dot (cos(flagangle+90),sin(flagangle+90),0);
|
||||
double diffy = flagvel dot (0,0,1);
|
||||
if ( abs(diffx) > 1. )
|
||||
|
|
@ -838,7 +838,7 @@ Class Demolitionist : PlayerPawn
|
|||
cur.x += diffx*4.;
|
||||
cur.y += diffy*4.;
|
||||
}
|
||||
return cur*(oldlagready*(1.-ticfrac)+lagready*ticfrac);
|
||||
return cur*SWWMUtility.Lerp(oldlagready,lagready,ticfrac);
|
||||
}
|
||||
override void PlayerThink()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -233,7 +233,14 @@ Class SWWMUtility
|
|||
{
|
||||
return a*(1.-theta)+b*theta;
|
||||
}
|
||||
|
||||
static clearscope Vector3 LerpVector3( Vector3 a, Vector3 b, double theta )
|
||||
{
|
||||
return a*(1.-theta)+b*theta;
|
||||
}
|
||||
static clearscope Vector2 LerpVector2( Vector2 a, Vector2 b, double theta )
|
||||
{
|
||||
return a*(1.-theta)+b*theta;
|
||||
}
|
||||
static clearscope Color LerpColor( Color a, Color b, double theta )
|
||||
{
|
||||
Color c = Color(
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue