cTracer: Fixed asserts for invalid coords
git-svn-id: http://mc-server.googlecode.com/svn/trunk@1327 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
674ed9d43a
commit
51596c60a9
@ -99,11 +99,27 @@ void cTracer::SetValues( const Vector3f & a_Start, const Vector3f & a_Direction
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int cTracer::Trace( const Vector3f & a_Start, const Vector3f & a_Direction, int a_Distance)
|
int cTracer::Trace( const Vector3f & a_Start, const Vector3f & a_Direction, int a_Distance)
|
||||||
{
|
{
|
||||||
SetValues( a_Start, a_Direction );
|
if (a_Start.y < 0)
|
||||||
|
{
|
||||||
|
LOGD("%s: Start is below the world", __FUNCTION__);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const Vector3f End = a_Start + (dir * (float)a_Distance);
|
SetValues(a_Start, a_Direction);
|
||||||
|
|
||||||
|
Vector3f End = a_Start + (dir * (float)a_Distance);
|
||||||
|
|
||||||
|
if (End.y < 0)
|
||||||
|
{
|
||||||
|
float dist = -a_Start.y / dir.y;
|
||||||
|
End = a_Start + (dir * dist);
|
||||||
|
}
|
||||||
|
|
||||||
// end voxel coordinates
|
// end voxel coordinates
|
||||||
end1.x = (int)floorf(End.x);
|
end1.x = (int)floorf(End.x);
|
||||||
@ -180,9 +196,9 @@ int cTracer::Trace( const Vector3f & a_Start, const Vector3f & a_Direction, int
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
char BlockID = m_World->GetBlock( pos.x, pos.y, pos.z );
|
BLOCKTYPE BlockID = m_World->GetBlock( pos.x, pos.y, pos.z );
|
||||||
//No collision with water ;)
|
// No collision with water ;)
|
||||||
if ( BlockID != E_BLOCK_AIR || IsBlockWater(BlockID))
|
if ((BlockID != E_BLOCK_AIR) || IsBlockWater(BlockID)) // _X 2013_03_29: Why is the IsBlockWater condition here? water equals air?
|
||||||
{
|
{
|
||||||
BlockHitPosition = pos;
|
BlockHitPosition = pos;
|
||||||
int Normal = GetHitNormal(a_Start, End, pos );
|
int Normal = GetHitNormal(a_Start, End, pos );
|
||||||
@ -196,6 +212,10 @@ int cTracer::Trace( const Vector3f & a_Start, const Vector3f & a_Direction, int
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// return 1 = hit, other is not hit
|
// return 1 = hit, other is not hit
|
||||||
int LinesCross(float x0,float y0,float x1,float y1,float x2,float y2,float x3,float y3)
|
int LinesCross(float x0,float y0,float x1,float y1,float x2,float y2,float x3,float y3)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user