bool EdgeAntiAim( cEntity *localPlayer, CUserCmd *cmd, float flWall, float flCornor )
{
static CTraceFilterNoPlayers filter;
bool ret = false;
Vector localPosition = localPlayer->GetEyePosition( );
for( int y = 0; y < 360; y++ )
{
Vector tmp( 10.0f, cmd->viewangles.y, 0.0f );
tmp.y += y;
tmp.NormalizeAngles( );
Vector forward;
AngleVectors( tmp, forward );
float length = ( ( 16.0f + 3.0f ) + ( ( 16.0f + 3.0f ) * sin( DegToRad( 10.0f ) ) ) ) + 7.0f;
forward *= length;
Ray_t ray;
trace_t traceData;
ray.Init( localPosition, ( localPosition + forward ) );
g_pEngineTrace->TraceRay( ray, 0x200400B, ( CTraceFilter* )&filter, &traceData );
if( traceData.fraction != 1.0f )
{
Vector angles;
Vector Negate = traceData.plane.normal;
Negate *= -1;
VectorAngles( Negate, angles );
tmp.y = angles.y;
tmp.NormalizeAngles( );
trace_t leftTrace, rightTrace;
Vector left, right;
AngleVectors( tmp + Vector( 0.0f, 30.0f, 0.0f ), left );
AngleVectors( tmp - Vector( 0.0f, 30.0f, 0.0f ), right );
left *= ( length + ( length * sin( DegToRad( 30.0f ) ) ) );
right *= ( length + ( length * sin( DegToRad( 30.0f ) ) ) );
ray.Init( localPosition, ( localPosition + left ) );
g_pEngineTrace->TraceRay( ray, 0x200400B, ( CTraceFilter* )&filter, &leftTrace );
ray.Init( localPosition, ( localPosition + right ) );
g_pEngineTrace->TraceRay( ray, 0x200400B, ( CTraceFilter* )&filter, &rightTrace );
if ( ( leftTrace.fraction == 1.0f )
&& ( rightTrace.fraction != 1.0f ) )
{
tmp.y -= flCornor;
// LEFT
}
else if ( ( leftTrace.fraction != 1.0f )
&& ( rightTrace.fraction == 1.0f ) )
{
tmp.y += flCornor;
// RIGHT
}
cmd->viewangles.y = tmp.y;
cmd->viewangles.y -= flWall;
ret = true;
}
}
return ret;
}

