Remove Gutamatics, use bespoke projection code from UT99 modding days.
This commit is contained in:
parent
cbf72492f7
commit
a5e58add12
19 changed files with 103 additions and 1216 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue