LineBlockTracer: Fixed initial errors
This commit is contained in:
parent
6af81c66e9
commit
654714e7bc
@ -36,7 +36,7 @@ public:
|
|||||||
/** Called on each block encountered along the path, including the first block (path start), if chunk data is not loaded
|
/** Called on each block encountered along the path, including the first block (path start), if chunk data is not loaded
|
||||||
When this callback returns true, the tracing is aborted.
|
When this callback returns true, the tracing is aborted.
|
||||||
*/
|
*/
|
||||||
virtual bool OnNextBlockNoData(int a_BlockX, int a_BlockY, int a_BlockZ) {}
|
virtual bool OnNextBlockNoData(int a_BlockX, int a_BlockY, int a_BlockZ) { return false; }
|
||||||
|
|
||||||
/** Called when the path goes out of world, either below (a_BlockY < 0) or above (a_BlockY >= cChunkDef::Height)
|
/** Called when the path goes out of world, either below (a_BlockY < 0) or above (a_BlockY >= cChunkDef::Height)
|
||||||
The coords specify the exact point at which the path exited the world.
|
The coords specify the exact point at which the path exited the world.
|
||||||
@ -44,7 +44,7 @@ public:
|
|||||||
Note that some paths can go out of the world and come back again (parabola),
|
Note that some paths can go out of the world and come back again (parabola),
|
||||||
in such a case this callback is followed by OnIntoWorld() and further OnNextBlock() calls
|
in such a case this callback is followed by OnIntoWorld() and further OnNextBlock() calls
|
||||||
*/
|
*/
|
||||||
virtual bool OnOutOfWorld(double a_BlockX, double a_BlockY, double a_BlockZ) {}
|
virtual bool OnOutOfWorld(double a_BlockX, double a_BlockY, double a_BlockZ) { return false; }
|
||||||
|
|
||||||
/** Called when the path goes into the world, from either below (a_BlockY < 0) or above (a_BlockY >= cChunkDef::Height)
|
/** Called when the path goes into the world, from either below (a_BlockY < 0) or above (a_BlockY >= cChunkDef::Height)
|
||||||
The coords specify the exact point at which the path entered the world.
|
The coords specify the exact point at which the path entered the world.
|
||||||
@ -52,7 +52,7 @@ public:
|
|||||||
Note that some paths can go out of the world and come back again (parabola),
|
Note that some paths can go out of the world and come back again (parabola),
|
||||||
in such a case this callback is followed by further OnNextBlock() calls
|
in such a case this callback is followed by further OnNextBlock() calls
|
||||||
*/
|
*/
|
||||||
virtual bool OnIntoWorld(double a_BlockX, double a_BlockY, double a_BlockZ) {}
|
virtual bool OnIntoWorld(double a_BlockX, double a_BlockY, double a_BlockZ) { return false; }
|
||||||
|
|
||||||
/** Called when the path is sure not to hit any more blocks.
|
/** Called when the path is sure not to hit any more blocks.
|
||||||
Note that for some shapes this might never happen (line with constant Y)
|
Note that for some shapes this might never happen (line with constant Y)
|
||||||
|
@ -148,8 +148,11 @@ bool cLineBlockTracer::MoveToNextBlock(void)
|
|||||||
if (abs(m_DiffX) > EPS)
|
if (abs(m_DiffX) > EPS)
|
||||||
{
|
{
|
||||||
double DestX = (m_DirX > 0) ? (m_CurrentX + 1) : m_CurrentX;
|
double DestX = (m_DirX > 0) ? (m_CurrentX + 1) : m_CurrentX;
|
||||||
Coeff = (m_EndX - DestX) / m_DiffX;
|
Coeff = (DestX - m_StartX) / m_DiffX;
|
||||||
Direction = dirX;
|
if (Coeff <= 1)
|
||||||
|
{
|
||||||
|
Direction = dirX;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (abs(m_DiffY) > EPS)
|
if (abs(m_DiffY) > EPS)
|
||||||
{
|
{
|
||||||
@ -205,8 +208,8 @@ bool cLineBlockTracer::Item(cChunk * a_Chunk)
|
|||||||
{
|
{
|
||||||
BLOCKTYPE BlockType;
|
BLOCKTYPE BlockType;
|
||||||
NIBBLETYPE BlockMeta;
|
NIBBLETYPE BlockMeta;
|
||||||
int RelX = FAST_FLOOR_DIV(m_CurrentX, cChunkDef::Width);
|
int RelX = m_CurrentX - a_Chunk->GetPosX() * cChunkDef::Width;
|
||||||
int RelZ = FAST_FLOOR_DIV(m_CurrentZ, cChunkDef::Width);
|
int RelZ = m_CurrentZ - a_Chunk->GetPosZ() * cChunkDef::Width;
|
||||||
a_Chunk->GetBlockTypeMeta(RelX, m_CurrentY, RelZ, BlockType, BlockMeta);
|
a_Chunk->GetBlockTypeMeta(RelX, m_CurrentY, RelZ, BlockType, BlockMeta);
|
||||||
if (m_Callbacks->OnNextBlock(m_CurrentX, m_CurrentY, m_CurrentZ, BlockType, BlockMeta))
|
if (m_Callbacks->OnNextBlock(m_CurrentX, m_CurrentY, m_CurrentZ, BlockType, BlockMeta))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user