Use gametic+fractic for crosshair interpolation, should be smoother than MSTime().
This commit is contained in:
parent
2731bd92b8
commit
0f37e68698
4 changed files with 14 additions and 14 deletions
|
|
@ -28,7 +28,7 @@ extend Class SWWMWeapon
|
|||
ui Vector3 cpos;
|
||||
ui Color ccol;
|
||||
ui Vector2 lagvpos;
|
||||
transient ui uint prevms;
|
||||
transient ui double prevframe;
|
||||
|
||||
override void DoEffect()
|
||||
{
|
||||
|
|
@ -48,7 +48,7 @@ extend Class SWWMWeapon
|
|||
{
|
||||
SWWMWeapon(Owner.player.PendingWeapon).cpos = cpos;
|
||||
SWWMWeapon(Owner.player.PendingWeapon).lagvpos = lagvpos;
|
||||
SWWMWeapon(Owner.player.PendingWeapon).prevms = prevms;
|
||||
SWWMWeapon(Owner.player.PendingWeapon).prevframe = prevframe;
|
||||
}
|
||||
}
|
||||
// extra drawing, usually scopes
|
||||
|
|
@ -67,11 +67,11 @@ extend Class SWWMWeapon
|
|||
Vector3 ndc = SWWMUtility.ProjectPoint(sb.projdata,e.ViewPos+tdir);
|
||||
if ( ndc.z >= 1. ) return;
|
||||
Vector2 vpos = SWWMUtility.NDCToViewport(sb.projdata,ndc);
|
||||
double frametime = (MSTime()-prevms)/1000.;
|
||||
double theta = clamp(15.*frametime,0.,1.); // naive, but whatever
|
||||
if ( !prevms || (lagvpos == (0,0)) ) lagvpos = vpos;
|
||||
double frametime = ((gametic+e.fractic)-prevframe)/GameTicRate;
|
||||
double theta = clamp(30.*frametime,0.,1.); // naive, but whatever
|
||||
if ( !prevframe || (lagvpos == (0,0)) ) lagvpos = vpos;
|
||||
else lagvpos = lagvpos*(1.-theta)+vpos*theta;
|
||||
prevms = MSTime();
|
||||
prevframe = gametic+e.fractic;
|
||||
int cnum = abs(CVar.FindCVar('crosshair').GetInt());
|
||||
if ( !cnum ) return;
|
||||
String tn = String.Format("XHAIR%s%d",(Screen.GetWidth()<640)?"S":"B",cnum);
|
||||
|
|
|
|||
|
|
@ -161,9 +161,9 @@ Class Wallbuster : SWWMWeapon
|
|||
Vector3 ndc = SWWMUtility.ProjectPoint(sb.projdata,e.ViewPos+tdir);
|
||||
if ( ndc.z >= 1. ) return;
|
||||
Vector2 vpos = SWWMUtility.NDCToViewport(sb.projdata,ndc);
|
||||
double frametime = (MSTime()-prevms)/1000.;
|
||||
double theta = clamp(15.*frametime,0.,1.); // naive, but whatever
|
||||
if ( !prevms || (lagvpos == (0,0)) ) lagvpos = vpos;
|
||||
double frametime = ((gametic+e.fractic)-prevframe)/GameTicRate;
|
||||
double theta = clamp(30.*frametime,0.,1.); // naive, but whatever
|
||||
if ( !prevframe || (lagvpos == (0,0)) ) lagvpos = vpos;
|
||||
else lagvpos = lagvpos*(1.-theta)+vpos*theta;
|
||||
for ( int i=0; i<25; i++ )
|
||||
{
|
||||
|
|
@ -173,11 +173,11 @@ Class Wallbuster : SWWMWeapon
|
|||
ndc = SWWMUtility.ProjectPoint(sb.projdata,e.ViewPos+tdir);
|
||||
if ( ndc.z >= 1. ) return;
|
||||
vpos = SWWMUtility.NDCToViewport(sb.projdata,ndc);
|
||||
if ( !prevms || (lagvpos25[i] == (0,0)) ) lagvpos25[i] = vpos;
|
||||
if ( !prevframe || (lagvpos25[i] == (0,0)) ) lagvpos25[i] = vpos;
|
||||
else lagvpos25[i] = lagvpos25[i]*(1.-theta)+vpos*theta;
|
||||
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]);
|
||||
}
|
||||
prevms = MSTime();
|
||||
prevframe = gametic+e.fractic;
|
||||
}
|
||||
|
||||
ui Vector3, Color TraceForCrosshair25( int i )
|
||||
|
|
|
|||
|
|
@ -517,7 +517,7 @@ Class DualExplodiumGun : SWWMWeapon
|
|||
{
|
||||
SWWMWeapon(Owner.player.PendingWeapon).cpos = sw.cpos;
|
||||
SWWMWeapon(Owner.player.PendingWeapon).lagvpos = sw.lagvpos;
|
||||
SWWMWeapon(Owner.player.PendingWeapon).prevms = sw.prevms;
|
||||
SWWMWeapon(Owner.player.PendingWeapon).prevframe = sw.prevframe;
|
||||
}
|
||||
[sw.cpos, sw.ccol] = sw.TraceForCrosshair();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue