|
@@ -109,34 +109,34 @@ void Chunk::putBlockAt( Framework::Vec3<int> location, Block* block )
|
|
|
if( block )
|
|
|
blockIds[ index ] = (unsigned short)block->zBlockType()->getId();
|
|
|
blocks[ index ] = block;
|
|
|
- Block* neighbor = zBlockNeighbor( location + getDirection( NORTH ) );
|
|
|
- if( neighbor )
|
|
|
- neighbor->setNeighbour( SOUTH, block );
|
|
|
+ Either<Block*, int> neighbor = zBlockNeighbor( location + getDirection( NORTH ) );
|
|
|
+ if( neighbor.isA() )
|
|
|
+ ((Block*)neighbor)->setNeighbour( SOUTH, block );
|
|
|
if( block )
|
|
|
block->setNeighbour( NORTH, neighbor );
|
|
|
neighbor = zBlockNeighbor( location + getDirection( EAST ) );
|
|
|
- if( neighbor )
|
|
|
- neighbor->setNeighbour( WEST, block );
|
|
|
+ if( neighbor.isA() )
|
|
|
+ ((Block*)neighbor)->setNeighbour( WEST, block );
|
|
|
if( block )
|
|
|
block->setNeighbour( EAST, neighbor );
|
|
|
neighbor = zBlockNeighbor( location + getDirection( SOUTH ) );
|
|
|
- if( neighbor )
|
|
|
- neighbor->setNeighbour( NORTH, block );
|
|
|
+ if( neighbor.isA() )
|
|
|
+ ((Block*)neighbor)->setNeighbour( NORTH, block );
|
|
|
if( block )
|
|
|
block->setNeighbour( SOUTH, neighbor );
|
|
|
neighbor = zBlockNeighbor( location + getDirection( WEST ) );
|
|
|
- if( neighbor )
|
|
|
- neighbor->setNeighbour( EAST, block );
|
|
|
+ if( neighbor.isA() )
|
|
|
+ ((Block*)neighbor)->setNeighbour( EAST, block );
|
|
|
if( block )
|
|
|
block->setNeighbour( WEST, neighbor );
|
|
|
neighbor = zBlockNeighbor( location + getDirection( TOP ) );
|
|
|
- if( neighbor )
|
|
|
- neighbor->setNeighbour( BOTTOM, block );
|
|
|
+ if( neighbor.isA() )
|
|
|
+ ((Block*)neighbor)->setNeighbour( BOTTOM, block );
|
|
|
if( block )
|
|
|
block->setNeighbour( TOP, neighbor );
|
|
|
neighbor = zBlockNeighbor( location + getDirection( BOTTOM ) );
|
|
|
- if( neighbor )
|
|
|
- neighbor->setNeighbour( TOP, block );
|
|
|
+ if( neighbor.isA() )
|
|
|
+ ((Block*)neighbor)->setNeighbour( TOP, block );
|
|
|
if( block )
|
|
|
block->setNeighbour( BOTTOM, neighbor );
|
|
|
if( old )
|
|
@@ -148,24 +148,24 @@ void Chunk::putBlockTypeAt( Framework::Vec3<int> location, int type )
|
|
|
int index = (location.x * CHUNK_SIZE + location.y) * WORLD_HEIGHT + location.z;
|
|
|
assert( index < CHUNK_SIZE* CHUNK_SIZE* WORLD_HEIGHT );
|
|
|
blockIds[ index ] = (unsigned short)type;
|
|
|
- Block* neighbor = zBlockNeighbor( location + getDirection( NORTH ) );
|
|
|
- if( neighbor )
|
|
|
- neighbor->setNeighbourType( SOUTH, type );
|
|
|
+ Either<Block*, int> neighbor = zBlockNeighbor( location + getDirection( NORTH ) );
|
|
|
+ if( neighbor.isA() )
|
|
|
+ ((Block*)neighbor)->setNeighbourType( SOUTH, type );
|
|
|
neighbor = zBlockNeighbor( location + getDirection( EAST ) );
|
|
|
- if( neighbor )
|
|
|
- neighbor->setNeighbourType( WEST, type );
|
|
|
+ if( neighbor.isA() )
|
|
|
+ ((Block*)neighbor)->setNeighbourType( WEST, type );
|
|
|
neighbor = zBlockNeighbor( location + getDirection( SOUTH ) );
|
|
|
- if( neighbor )
|
|
|
- neighbor->setNeighbourType( NORTH, type );
|
|
|
+ if( neighbor.isA() )
|
|
|
+ ((Block*)neighbor)->setNeighbourType( NORTH, type );
|
|
|
neighbor = zBlockNeighbor( location + getDirection( WEST ) );
|
|
|
- if( neighbor )
|
|
|
- neighbor->setNeighbourType( EAST, type );
|
|
|
+ if( neighbor.isA() )
|
|
|
+ ((Block*)neighbor)->setNeighbourType( EAST, type );
|
|
|
neighbor = zBlockNeighbor( location + getDirection( TOP ) );
|
|
|
- if( neighbor )
|
|
|
- neighbor->setNeighbourType( BOTTOM, type );
|
|
|
+ if( neighbor.isA() )
|
|
|
+ ((Block*)neighbor)->setNeighbourType( BOTTOM, type );
|
|
|
neighbor = zBlockNeighbor( location + getDirection( BOTTOM ) );
|
|
|
- if( neighbor )
|
|
|
- neighbor->setNeighbourType( TOP, type );
|
|
|
+ if( neighbor.isA() )
|
|
|
+ ((Block*)neighbor)->setNeighbourType( TOP, type );
|
|
|
}
|
|
|
|
|
|
void Chunk::setNeighbor( Direction dir, Chunk* zChunk )
|
|
@@ -278,7 +278,7 @@ void Chunk::removeUnusedBlocks()
|
|
|
auto n = zBlockNeighbor( getDirection( (Directions)getFromIndex( d ) ) + Framework::Vec3<int>( x, y, z ) );
|
|
|
if( n.isA() && (((Block*)n)->isPassable() || ((Block*)n)->isTransparent()) )
|
|
|
visible = 1;
|
|
|
- if( n.isB() && n != NoBlockBlockType::ID && CONST_BLOCK( 0, n )->isTransparent() )
|
|
|
+ if( n.isB() && (CONST_BLOCK( 0, n )->isTransparent() || CONST_BLOCK( 0, n )->isPassable()) )
|
|
|
visible = 1;
|
|
|
}
|
|
|
}
|