void Map::place(Voxel& block) { table[index3D(block.getMapX(), block.getMapY(), block.getMapZ())] = block; Voxel* b = &table[index3D(block.getMapX(), block.getMapY(), block.getMapZ())]; int x = b->getMapX(); int y = b->getMapY(); int z = b->getMapZ(); if(&table[index3D(x, y, z)] != nullptr) { voxelBatch->removeVoxel(&table[index3D(x, y, z)]); } if (!b->isAir()) { voxelBatch->addVoxel(b); if (!outOfBounds(x + 1, y, z) && !table[index3D(x + 1, y, z)].isAir()) { voxelBatch->removeVoxelFace(b, VOXEL_FACE_RIGHT); voxelBatch->removeVoxelFace(&table[index3D(x + 1, y, z)], VOXEL_FACE_LEFT); } if (!outOfBounds(x - 1, y, z) && !table[index3D(x - 1, y, z)].isAir()) { voxelBatch->removeVoxelFace(b, VOXEL_FACE_LEFT); voxelBatch->removeVoxelFace(&table[index3D(x - 1, y, z)], VOXEL_FACE_RIGHT); } if (!outOfBounds(x, y + 1, z) && !table[index3D(x, y + 1, z)].isAir()) { voxelBatch->removeVoxelFace(b, VOXEL_FACE_TOP); voxelBatch->removeVoxelFace(&table[index3D(x, y + 1, z)], VOXEL_FACE_BOTTOM); } if (!outOfBounds(x, y - 1, z) && !table[index3D(x, y - 1, z)].isAir()) { voxelBatch->removeVoxelFace(b, VOXEL_FACE_BOTTOM); voxelBatch->removeVoxelFace(&table[index3D(x, y - 1, z)], VOXEL_FACE_TOP); } if (!outOfBounds(x, y, z + 1) && !table[index3D(x, y, z + 1)].isAir()) { voxelBatch->removeVoxelFace(b, VOXEL_FACE_FRONT); voxelBatch->removeVoxelFace(&table[index3D(x, y, z + 1)], VOXEL_FACE_BACK); } if (!outOfBounds(x, y, z - 1) && !table[index3D(x, y, z - 1)].isAir()) { voxelBatch->removeVoxelFace(b, VOXEL_FACE_BACK); voxelBatch->removeVoxelFace(&table[index3D(x, y, z - 1)], VOXEL_FACE_FRONT); } } }