|
@@ -47,6 +47,10 @@ void Dimension::getAddrOf( Punkt cPos, char *addr ) const
|
|
|
|
|
|
void Dimension::getAddrOfWorld( Punkt wPos, char *addr ) const
|
|
void Dimension::getAddrOfWorld( Punkt wPos, char *addr ) const
|
|
{
|
|
{
|
|
|
|
+ if( wPos.x < 0 )
|
|
|
|
+ wPos.x -= CHUNK_SIZE;
|
|
|
|
+ if( wPos.y < 0 ) // needed because otherwise would (-8, -8) have the same adress as (8, 8)
|
|
|
|
+ wPos.y -= CHUNK_SIZE;
|
|
wPos /= CHUNK_SIZE;
|
|
wPos /= CHUNK_SIZE;
|
|
getAddrOf( wPos, addr );
|
|
getAddrOf( wPos, addr );
|
|
}
|
|
}
|
|
@@ -55,7 +59,7 @@ Chunk *Dimension::zChunk( Punkt wPos ) const
|
|
{
|
|
{
|
|
char addr[ 9 ];
|
|
char addr[ 9 ];
|
|
getAddrOfWorld( wPos, addr );
|
|
getAddrOfWorld( wPos, addr );
|
|
- return chunks->z( addr );
|
|
|
|
|
|
+ return chunks->z( addr, 9 );
|
|
}
|
|
}
|
|
|
|
|
|
Block *Dimension::zBlock( Vec3<int> location )
|
|
Block *Dimension::zBlock( Vec3<int> location )
|
|
@@ -74,33 +78,33 @@ void Dimension::addEntity( Entity *entity )
|
|
void Dimension::addChunk( Chunk *chunk )
|
|
void Dimension::addChunk( Chunk *chunk )
|
|
{
|
|
{
|
|
char addr[ 9 ];
|
|
char addr[ 9 ];
|
|
- getAddrOf( chunk->getCenter(), addr );
|
|
|
|
- if( !chunks->z( addr ) )
|
|
|
|
|
|
+ getAddrOfWorld( chunk->getCenter(), addr );
|
|
|
|
+ if( !chunks->z( addr, 9 ) )
|
|
{
|
|
{
|
|
- chunks->set( addr, chunk );
|
|
|
|
- getAddrOf( chunk->getCenter() + Punkt( CHUNK_SIZE, 0 ), addr );
|
|
|
|
- Chunk *zChunk = chunks->z( addr );
|
|
|
|
|
|
+ chunks->set( addr, 9, chunk );
|
|
|
|
+ getAddrOfWorld( chunk->getCenter() + Punkt( CHUNK_SIZE, 0 ), addr );
|
|
|
|
+ Chunk *zChunk = chunks->z( addr, 9 );
|
|
if( zChunk )
|
|
if( zChunk )
|
|
{
|
|
{
|
|
zChunk->setNeighbor( WEST, chunk );
|
|
zChunk->setNeighbor( WEST, chunk );
|
|
chunk->setNeighbor( EAST, chunk );
|
|
chunk->setNeighbor( EAST, chunk );
|
|
}
|
|
}
|
|
- getAddrOf( chunk->getCenter() + Punkt( -CHUNK_SIZE, 0 ), addr );
|
|
|
|
- zChunk = chunks->z( addr );
|
|
|
|
|
|
+ getAddrOfWorld( chunk->getCenter() + Punkt( -CHUNK_SIZE, 0 ), addr );
|
|
|
|
+ zChunk = chunks->z( addr, 9 );
|
|
if( zChunk )
|
|
if( zChunk )
|
|
{
|
|
{
|
|
zChunk->setNeighbor( EAST, chunk );
|
|
zChunk->setNeighbor( EAST, chunk );
|
|
chunk->setNeighbor( WEST, chunk );
|
|
chunk->setNeighbor( WEST, chunk );
|
|
}
|
|
}
|
|
- getAddrOf( chunk->getCenter() + Punkt( 0, CHUNK_SIZE ), addr );
|
|
|
|
- zChunk = chunks->z( addr );
|
|
|
|
|
|
+ getAddrOfWorld( chunk->getCenter() + Punkt( 0, CHUNK_SIZE ), addr );
|
|
|
|
+ zChunk = chunks->z( addr, 9 );
|
|
if( zChunk )
|
|
if( zChunk )
|
|
{
|
|
{
|
|
zChunk->setNeighbor( NORTH, chunk );
|
|
zChunk->setNeighbor( NORTH, chunk );
|
|
chunk->setNeighbor( SOUTH, chunk );
|
|
chunk->setNeighbor( SOUTH, chunk );
|
|
}
|
|
}
|
|
- getAddrOf( chunk->getCenter() + Punkt( 0, -CHUNK_SIZE ), addr );
|
|
|
|
- zChunk = chunks->z( addr );
|
|
|
|
|
|
+ getAddrOfWorld( chunk->getCenter() + Punkt( 0, -CHUNK_SIZE ), addr );
|
|
|
|
+ zChunk = chunks->z( addr, 9 );
|
|
if( zChunk )
|
|
if( zChunk )
|
|
{
|
|
{
|
|
zChunk->setNeighbor( SOUTH, chunk );
|
|
zChunk->setNeighbor( SOUTH, chunk );
|