Out of world blocks are now always considered air blocks
This commit is contained in:
parent
82fa65f8b6
commit
77bf00a599
@ -2594,16 +2594,6 @@ bool cChunk::GetSignLines(int a_BlockX, int a_BlockY, int a_BlockZ, AString & a_
|
||||
|
||||
BLOCKTYPE cChunk::GetBlock(int a_RelX, int a_RelY, int a_RelZ) const
|
||||
{
|
||||
if (
|
||||
(a_RelX < 0) || (a_RelX >= Width) ||
|
||||
(a_RelY < 0) || (a_RelY >= Height) ||
|
||||
(a_RelZ < 0) || (a_RelZ >= Width)
|
||||
)
|
||||
{
|
||||
ASSERT(!"GetBlock(x, y, z) out of bounds!");
|
||||
return 0; // Clip
|
||||
}
|
||||
|
||||
return m_ChunkData.GetBlock(a_RelX, a_RelY, a_RelZ);
|
||||
}
|
||||
|
||||
|
@ -150,9 +150,14 @@ cChunkData::~cChunkData()
|
||||
|
||||
BLOCKTYPE cChunkData::GetBlock(int a_X, int a_Y, int a_Z) const
|
||||
{
|
||||
ASSERT((a_X >= 0) && (a_X < cChunkDef::Width));
|
||||
ASSERT((a_Y >= 0) && (a_Y < cChunkDef::Height));
|
||||
ASSERT((a_Z >= 0) && (a_Z < cChunkDef::Width));
|
||||
if (
|
||||
(a_X < 0) || (a_X >= cChunkDef::Width) ||
|
||||
(a_Y < 0) || (a_Y >= cChunkDef::Height) ||
|
||||
(a_Z < 0) || (a_Z >= cChunkDef::Width)
|
||||
)
|
||||
{
|
||||
return E_BLOCK_AIR; // Coordinates are outside outside the world, so this must be an air block
|
||||
}
|
||||
int Section = a_Y / SectionHeight;
|
||||
if (m_Sections[Section] != nullptr)
|
||||
{
|
||||
@ -222,7 +227,7 @@ NIBBLETYPE cChunkData::GetMeta(int a_RelX, int a_RelY, int a_RelZ) const
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
ASSERT(!"cChunkData::GetMeta(): coords out of chunk range!");
|
||||
// Coordinates are outside outside the world, so it must be an air block with a blank meta
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -250,7 +250,7 @@ bool cPath::StepOnce()
|
||||
{
|
||||
if (ProcessIfWalkable(CurrentCell->m_Location + Vector3i(0, y, 1), CurrentCell, NORMAL_G_COST))
|
||||
{
|
||||
DoneWest = true;
|
||||
DoneSouth = true;
|
||||
if (y == 0)
|
||||
{
|
||||
WalkableSouth = true;
|
||||
|
@ -13,7 +13,7 @@ int main(int argc, char** argv)
|
||||
{
|
||||
return new cChunkData::sChunkSection();
|
||||
}
|
||||
|
||||
|
||||
virtual void Free(cChunkData::sChunkSection * a_Ptr)
|
||||
{
|
||||
delete a_Ptr;
|
||||
@ -36,7 +36,7 @@ int main(int argc, char** argv)
|
||||
testassert(buffer.GetBlock(0, 32, 0) == 0x0);
|
||||
testassert(buffer.GetMeta(0, 48, 0) == 0x0);
|
||||
|
||||
// Out of Range
|
||||
// Out of range SetBlock
|
||||
CheckAsserts(
|
||||
buffer.SetBlock(-1, 0, 0, 0);
|
||||
);
|
||||
@ -55,28 +55,7 @@ int main(int argc, char** argv)
|
||||
CheckAsserts(
|
||||
buffer.SetBlock(0, 0, 256, 0);
|
||||
);
|
||||
|
||||
// Out of Range
|
||||
CheckAsserts(
|
||||
buffer.GetBlock(-1, 0, 0);
|
||||
);
|
||||
CheckAsserts(
|
||||
buffer.GetBlock(0, -1, 0);
|
||||
);
|
||||
CheckAsserts(
|
||||
buffer.GetBlock(0, 0, -1);
|
||||
);
|
||||
CheckAsserts(
|
||||
buffer.GetBlock(256, 0, 0);
|
||||
);
|
||||
CheckAsserts(
|
||||
buffer.GetBlock(0, 256, 0);
|
||||
);
|
||||
CheckAsserts(
|
||||
buffer.GetBlock(0, 0, 256);
|
||||
);
|
||||
|
||||
// Out of Range
|
||||
// Out of range SetMeta
|
||||
CheckAsserts(
|
||||
buffer.SetMeta(-1, 0, 0, 0);
|
||||
);
|
||||
@ -96,30 +75,26 @@ int main(int argc, char** argv)
|
||||
buffer.SetMeta(0, 0, 256, 0);
|
||||
);
|
||||
|
||||
// Out of Range
|
||||
CheckAsserts(
|
||||
buffer.GetMeta(-1, 0, 0);
|
||||
);
|
||||
CheckAsserts(
|
||||
buffer.GetMeta(0, -1, 0);
|
||||
);
|
||||
CheckAsserts(
|
||||
buffer.GetMeta(0, 0, -1);
|
||||
);
|
||||
CheckAsserts(
|
||||
buffer.GetMeta(256, 0, 0);
|
||||
);
|
||||
CheckAsserts(
|
||||
buffer.GetMeta(0, 256, 0);
|
||||
);
|
||||
CheckAsserts(
|
||||
buffer.GetMeta(0, 0, 256);
|
||||
);
|
||||
// Reading out of range blocks should return air
|
||||
testassert(buffer.GetBlock(-1, 0, 0) == 0);
|
||||
testassert(buffer.GetBlock(0, -1, 0) == 0);
|
||||
testassert(buffer.GetBlock(0, 0, -1) == 0);
|
||||
testassert(buffer.GetBlock(256, 0, 0) == 0);
|
||||
testassert(buffer.GetBlock(0, 256, 0) == 0);
|
||||
testassert(buffer.GetBlock(0, 0, 256) == 0);
|
||||
|
||||
// Reading out of range metas should return 0
|
||||
testassert(buffer.GetMeta(-1, 0, 0) == 0);
|
||||
testassert(buffer.GetMeta(0, -1, 0) == 0);
|
||||
testassert(buffer.GetMeta(0, 0, -1) == 0);
|
||||
testassert(buffer.GetMeta(256, 0, 0) == 0);
|
||||
testassert(buffer.GetMeta(0, 256, 0) == 0);
|
||||
testassert(buffer.GetMeta(0, 0, 256) == 0);
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
cChunkData buffer(Pool);
|
||||
|
||||
|
||||
// Zero's
|
||||
buffer.SetBlock(0, 0, 0, 0x0);
|
||||
buffer.SetBlock(0, 0, 1, 0xab);
|
||||
@ -131,8 +106,8 @@ int main(int argc, char** argv)
|
||||
testassert(buffer.GetMeta(0, 16, 0) == 0x0);
|
||||
testassert(buffer.GetMeta(0, 16, 1) == 0xc);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
{
|
||||
// Operator =
|
||||
cChunkData buffer(Pool);
|
||||
@ -141,6 +116,6 @@ int main(int argc, char** argv)
|
||||
copy = std::move(buffer);
|
||||
testassert(copy.GetBlock(0, 0, 0) == 0x42);
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user