Remove Gutamatics, use bespoke projection code from UT99 modding days.

This commit is contained in:
Mari the Deer 2025-03-16 15:50:00 +01:00
commit a5e58add12
19 changed files with 103 additions and 1216 deletions

View file

@ -6,20 +6,22 @@ extend Class SWWMHandler
private ui void DrawWorldLine( RenderEvent e, Vector3 apos, Vector3 bpos, Color col )
{
Vector3 a = SWWMUtility.ProjectPoint(projdata,e.viewpos+level.Vec3Diff(e.viewpos,apos)),
b = SWWMUtility.ProjectPoint(projdata,e.viewpos+level.Vec3Diff(e.viewpos,bpos));
if ( (a.z > 1.) && (b.z > 1.) ) return;
if ( (a.z == -double.infinity) || (b.z == -double.infinity) ) return; // how???
Vector3 a = SWWMUtility.ProjectPoint(projdata,e.viewpos+level.Vec3Diff(e.viewpos,apos),false),
b = SWWMUtility.ProjectPoint(projdata,e.viewpos+level.Vec3Diff(e.viewpos,bpos),false);
// both points are behind the screen
if ( (a.z <= 0.) && (b.z < 0.) ) return;
// at least one point is invalid
if ( (a.z == 0.) || (b.z == 0.) ) return;
double da, db, s;
Vector3 p;
da = a dot (0.,0.,-1.)-1.;
db = b dot (0.,0.,-1.)-1.;
da = a dot (0.,0.,1.);
db = b dot (0.,0.,1.);
if ( da-db != 0. )
{
s = da/(da-db);
p = (a.x+s*(b.x-a.x),a.y+s*(b.y-a.y),a.z+s*(b.z-a.z));
if ( a.z > 1. ) a = p;
if ( b.z > 1. ) b = p;
if ( a.z < 0. ) a = p;
if ( b.z < 0. ) b = p;
}
Vector2 va = SWWMUtility.NDCToViewport(projdata,a);
Vector2 vb = SWWMUtility.NDCToViewport(projdata,b);
@ -33,23 +35,25 @@ extend Class SWWMHandler
for ( int i=0; i<64; i++ )
{
Vector3 wpos = e.viewpos+level.Vec3Diff(e.viewpos,level.Vec3Offset(pos,SWWMUtility.CircleOffset(y,z,i*5.625,radius)));
ndc[i] = SWWMUtility.ProjectPoint(projdata,wpos);
ndc[i] = SWWMUtility.ProjectPoint(projdata,wpos,false);
}
for ( int i=0; i<64; i++ )
{
Vector3 a = ndc[i], b = ndc[(i+1)%64];
if ( (a.z > 1.) && (b.z > 1.) ) continue;
if ( (a.z == -double.infinity) || (b.z == -double.infinity) ) continue; // how???
// both points are behind the screen
if ( (a.z <= 0.) && (b.z < 0.) ) return;
// at least one point is invalid
if ( (a.z == 0.) || (b.z == 0.) ) return;
double da, db, s;
Vector3 p;
da = a dot (0.,0.,-1.)-1.;
db = b dot (0.,0.,-1.)-1.;
da = a dot (0.,0.,1.);
db = b dot (0.,0.,1.);
if ( da-db != 0. )
{
s = da/(da-db);
p = (a.x+s*(b.x-a.x),a.y+s*(b.y-a.y),a.z+s*(b.z-a.z));
if ( a.z > 1. ) a = p;
if ( b.z > 1. ) b = p;
if ( a.z < 0. ) a = p;
if ( b.z < 0. ) b = p;
}
Vector2 va = SWWMUtility.NDCToViewport(projdata,a);
Vector2 vb = SWWMUtility.NDCToViewport(projdata,b);
@ -90,7 +94,7 @@ extend Class SWWMHandler
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)));
if ( ndc.z > 1. ) return;
if ( ndc.z <= 0. ) return;
Vector2 vpos = SWWMUtility.NDCToViewport(projdata,ndc);
String tag = a.player?a.player.GetUserName():a.GetTag();
if ( tag == a.GetClassName() ) SWWMUtility.BeautifyClassName(tag);