@@ -48,47 +48,7 @@ void Engine::Init()
m_audio . ToggleMusicState ( ) ;
// Init Chunks
for ( int chx = 0 ; chx < VIEW_DISTANCE ; + + chx ) // Un beau gros monde de VIEW_DISTANCE Chunks par VIEW_DISTANCE Chunks.
for ( int chy = 0 ; chy < VIEW_DISTANCE ; + + chy )
m_world . GetChunks ( ) . Set ( chx , chy , new Chunk ( chx , chy ) ) ;
// G<> n<EFBFBD> ration Chunks.
for ( int chx = 0 ; chx < VIEW_DISTANCE ; + + chx )
for ( int chy = 0 ; chy < VIEW_DISTANCE ; + + chy ) {
for ( int x = 0 ; x < CHUNK_SIZE_X ; + + x )
for ( int z = 0 ; z < CHUNK_SIZE_Z ; + + z )
for ( int y = 0 ; y < 32 ; + + y )
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( x , y , z , ( ( chx + chy ) % ( BTYPE_LAST - 1 ) ) + 1 ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 5 , 32 , 15 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 5 , 33 , 15 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 5 , 34 , 15 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 6 , 34 , 15 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 7 , 34 , 15 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 7 , 33 , 15 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 7 , 32 , 15 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 8 , 32 , 3 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 8 , 33 , 4 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 8 , 34 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 8 , 35 , 6 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 11 , 32 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 11 , 33 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 11 , 34 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 11 , 35 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 12 , 32 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 12 , 33 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 12 , 34 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 12 , 35 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 13 , 32 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 13 , 33 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 13 , 34 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 13 , 35 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 14 , 32 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 14 , 33 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 14 , 34 , 5 , BTYPE_GRASS ) ;
m_world . GetChunks ( ) . Get ( chx , chy ) - > SetBlock ( 14 , 35 , 5 , BTYPE_GRASS ) ;
}
m_world . GetChunks ( ) . Reset ( nullptr ) ;
// Gestion de souris.
CenterMouse ( ) ;
@@ -243,15 +203,71 @@ void Engine::Render(float elapsedTime) {
glEnable ( GL_LIGHT0 ) ;
m_shader01 . Use ( ) ;
m_textureAtlas . Bind ( ) ;
int cx = m_player . GetPosition ( ) . x ;
int cy = m_player . GetPosition ( ) . z ;
int accRender = 0 ;
for ( int chx = cx - CHUNK_SIZE_X * 6 ; chx < cx + CHUNK_SIZE_X * 6 ; chx + = CHUNK_SIZE_X )
for ( int chy = cy - CHUNK_SIZE_Z * 6 ; chy < cy + CHUNK_SIZE_Z * 6 ; chy + = CHUNK_SIZE_Z ) {
if ( ! m_world . ChunkAt ( chx , 1 , chy ) ) {
m_world . GetChunks ( ) . Set ( chx / CHUNK_SIZE_X , chy / CHUNK_SIZE_Z , new Chunk ( chx / CHUNK_SIZE_X , chy / CHUNK_SIZE_Z ) ) ;
for ( int x = 0 ; x < CHUNK_SIZE_X ; + + x )
for ( int z = 0 ; z < CHUNK_SIZE_Z ; + + z )
for ( int y = 0 ; y < 32 ; + + y )
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( x , y , z , ( chx + chy ) % ( BTYPE_LAST - 1 ) + 1 , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 5 , 32 , 15 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 5 , 33 , 15 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 5 , 34 , 15 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 6 , 34 , 15 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 7 , 34 , 15 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 7 , 33 , 15 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 7 , 32 , 15 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 8 , 32 , 3 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 8 , 33 , 4 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 8 , 34 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 8 , 35 , 6 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 11 , 32 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 11 , 33 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 11 , 34 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 11 , 35 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 12 , 32 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 12 , 33 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 12 , 34 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 12 , 35 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 13 , 32 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 13 , 33 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 13 , 34 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 13 , 35 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 14 , 32 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 14 , 33 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 14 , 34 , 5 , BTYPE_GRASS , & m_world ) ;
m_world . ChunkAt ( chx , 1 , chy ) - > SetBlock ( 14 , 35 , 5 , BTYPE_GRASS , & m_world ) ;
if ( + + accRender > MAX_RENDER_CHUNKS ) {
chx = cx + CHUNK_SIZE_X * 6 ;
chy = cy + CHUNK_SIZE_Z * 6 ;
}
}
}
int accUpdate = 0 ;
for ( int chx = 0 ; chx < VIEW_DISTANCE ; chx + + )
for ( int chy = 0 ; chy < VIEW_DISTANCE ; chy + + ) {
if ( m_world . GetChunks ( ) . Get ( chx , chy ) ) {
all . ApplyTranslation ( chx * CHUNK_SIZE_X , 0 , chy * CHUNK_SIZE_Z ) ;
all . Use ( ) ;
if ( m_world . GetChunks ( ) . Get ( chx , chy ) - > IsDirty ( ) )
m_world . GetChunks ( ) . Get ( chx , chy ) - > Update ( m_blockinfo , & m_world ) ;
//if (chx * CHUNK_SIZE_X >= m_player.GetPosition().x * m_player.GetDirection().x && chy * CHUNK_SIZE_Z >= m_player.GetPosition().z * m_player.GetDirection().z)
if ( m_world . GetChunks ( ) . Get ( chx , chy ) - > IsDirty ( ) )
if ( + + acc Update < MAX_UPDATE_CHUNKS )
m_world . GetChunks ( ) . Get ( chx , chy ) - > Update ( m_blockinfo , & m_world ) ;
/* View fustrum culling va ici */
m_world . GetChunks ( ) . Get ( chx , chy ) - > Render ( ) ;
all . ApplyTranslation ( - chx * CHUNK_SIZE_X , 0 , - chy * CHUNK_SIZE_Z ) ;
}
}
m_shader01 . Disable ( ) ;