mirror of
https://github.com/tribes2/engine.git
synced 2026-01-20 19:54:46 +00:00
77 lines
2 KiB
C++
77 lines
2 KiB
C++
//-----------------------------------------------------------------------------
|
|
// V12 Engine
|
|
//
|
|
// Copyright (c) 2001 GarageGames.Com
|
|
// Portions Copyright (c) 2001 by Sierra Online, Inc.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#include "Math/mMath.h"
|
|
|
|
#include "game/weaponBeam.h"
|
|
#include "PlatformWin32/platformGL.h"
|
|
|
|
//**************************************************************************
|
|
// Weapon Beam
|
|
//**************************************************************************
|
|
WeaponBeam::WeaponBeam()
|
|
{
|
|
|
|
};
|
|
|
|
|
|
//--------------------------------------------------------------------------
|
|
void WeaponBeam::render( F32 width, F32 UVOffset, F32 numRepeat )
|
|
{
|
|
width *= 0.5;
|
|
|
|
glBegin(GL_TRIANGLE_FAN);
|
|
glTexCoord2f( UVOffset, 0.0 );
|
|
glVertex3fv( mData.startPos + mData.axis * width );
|
|
|
|
glTexCoord2f( UVOffset, 1.0 );
|
|
glVertex3fv( mData.startPos - mData.axis * width );
|
|
|
|
glTexCoord2f( numRepeat+UVOffset, 1.0 );
|
|
glVertex3fv( mData.endRenderPos - mData.axis * width );
|
|
|
|
glTexCoord2f( numRepeat+UVOffset, 0.0 );
|
|
glVertex3fv( mData.endRenderPos + mData.axis * width );
|
|
glEnd();
|
|
|
|
|
|
}
|
|
|
|
//--------------------------------------------------------------------------
|
|
void WeaponBeam::adjustEdge( BeamData &beamData )
|
|
{
|
|
|
|
beamData.onEdge = false;
|
|
beamData.endRenderPos = beamData.endPos;
|
|
|
|
if( beamData.angToCamPos < BEAM_EDGE_TOLERANCE )
|
|
{
|
|
|
|
Point3F diff = beamData.direction - (-beamData.dirFromCam);
|
|
F32 curOffset = diff.len();
|
|
if( curOffset <= BEAM_EDGE_EPSILON )
|
|
{
|
|
// beam is perfectly on edge
|
|
curOffset = 0.0;
|
|
diff.set(0.0, 0.0, 0.0 );
|
|
beamData.onEdge = true;
|
|
}
|
|
else
|
|
{
|
|
diff.normalize();
|
|
}
|
|
diff *= BEAM_EDGE_ADJUST - curOffset;
|
|
|
|
Point3F newDir = beamData.direction + diff;
|
|
newDir.normalizeSafe();
|
|
|
|
beamData.endRenderPos = beamData.startPos + newDir * beamData.length;
|
|
|
|
}
|
|
|
|
}
|