WakeUpSimulators correct Y computation
+ Add Y validity check to SimulatorManager
This commit is contained in:
parent
c0d1cffe0b
commit
d2156aab7c
@ -1187,14 +1187,14 @@ void cChunk::CreateBlockEntities(void)
|
|||||||
auto BlockType = Section->m_BlockTypes[BlockIdx];
|
auto BlockType = Section->m_BlockTypes[BlockIdx];
|
||||||
if (cBlockEntity::IsBlockEntityBlockType(BlockType))
|
if (cBlockEntity::IsBlockEntityBlockType(BlockType))
|
||||||
{
|
{
|
||||||
auto relPos = IndexToCoordinate(BlockIdx);
|
auto RelPos = IndexToCoordinate(BlockIdx);
|
||||||
relPos.y += static_cast<int>(SectionIdx * cChunkData::SectionHeight);
|
RelPos.y += static_cast<int>(SectionIdx * cChunkData::SectionHeight);
|
||||||
auto absPos = RelativeToAbsolute(relPos);
|
const auto AbsPos = RelativeToAbsolute(RelPos);
|
||||||
|
|
||||||
if (!HasBlockEntityAt(absPos))
|
if (!HasBlockEntityAt(AbsPos))
|
||||||
{
|
{
|
||||||
AddBlockEntityClean(cBlockEntity::CreateByBlockType(
|
AddBlockEntityClean(cBlockEntity::CreateByBlockType(
|
||||||
BlockType, GetMeta(relPos), absPos, m_World
|
BlockType, GetMeta(RelPos), AbsPos, m_World
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1223,7 +1223,8 @@ void cChunk::WakeUpSimulators(void)
|
|||||||
for (size_t BlockIdx = 0; BlockIdx != cChunkData::SectionBlockCount; ++BlockIdx)
|
for (size_t BlockIdx = 0; BlockIdx != cChunkData::SectionBlockCount; ++BlockIdx)
|
||||||
{
|
{
|
||||||
const auto BlockType = Section->m_BlockTypes[BlockIdx];
|
const auto BlockType = Section->m_BlockTypes[BlockIdx];
|
||||||
const auto Position = IndexToCoordinate(BlockIdx);
|
auto Position = IndexToCoordinate(BlockIdx);
|
||||||
|
Position.y += static_cast<int>(SectionIdx * cChunkData::SectionHeight);
|
||||||
|
|
||||||
RedstoneSimulator->AddBlock(*this, Position, BlockType);
|
RedstoneSimulator->AddBlock(*this, Position, BlockType);
|
||||||
WaterSimulator->AddBlock(*this, Position, BlockType);
|
WaterSimulator->AddBlock(*this, Position, BlockType);
|
||||||
|
@ -71,8 +71,12 @@ void cSimulatorManager::WakeUp(cChunk & a_Chunk, Vector3i a_Position)
|
|||||||
for (const auto Offset : cSimulator::AdjacentOffsets)
|
for (const auto Offset : cSimulator::AdjacentOffsets)
|
||||||
{
|
{
|
||||||
auto Relative = a_Position + Offset;
|
auto Relative = a_Position + Offset;
|
||||||
auto Chunk = a_Chunk.GetRelNeighborChunkAdjustCoords(Relative);
|
if (!cChunkDef::IsValidHeight(Relative.y))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto Chunk = a_Chunk.GetRelNeighborChunkAdjustCoords(Relative);
|
||||||
if ((Chunk == nullptr) || !Chunk->IsValid())
|
if ((Chunk == nullptr) || !Chunk->IsValid())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
Reference in New Issue
Block a user