From 7696a385433f815d8af8c905b45e2d7656299329 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Tue, 15 Nov 2011 23:58:56 +0200 Subject: Improve loading screen and protocol --- src/game.cpp | 110 +++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 77 insertions(+), 33 deletions(-) (limited to 'src/game.cpp') diff --git a/src/game.cpp b/src/game.cpp index bb1998066..925dead7c 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -632,21 +632,18 @@ void the_game( /* Draw "Loading" screen */ - /*gui::IGUIStaticText *gui_loadingtext = */ - //draw_load_screen(L"Loading and connecting...", driver, font); draw_load_screen(L"Loading...", driver, font); - // Create tool definition manager - IWritableToolDefManager *tooldef = createToolDefManager(); // Create texture source IWritableTextureSource *tsrc = createTextureSource(device); + + // These will be filled by data received from the server + // Create tool definition manager + IWritableToolDefManager *tooldef = createToolDefManager(); // Create node definition manager IWritableNodeDefManager *nodedef = createNodeDefManager(); - // Fill node feature table with default definitions - //content_mapnode_init(nodedef); - /* Create server. SharedPtr will delete it when it goes out of scope. @@ -702,54 +699,51 @@ void the_game( connect_address.print(&infostream); infostream<step(frametime); + + // End condition + if(client.connectedAndInitialized()){ could_connect = true; break; } + // Break conditions if(client.accessDenied()) - { break; - } - // Wait for 10 seconds - if(time_counter >= 10.0) - { + if(time_counter >= timeout) break; - } + // Display status std::wostringstream ss; ss<beginScene(true, true, video::SColor(255,0,0,0)); - guienv->drawAll(); - driver->endScene();*/ - - // Update client and server - - client.step(0.1); - - if(server != NULL) - server->step(0.1); // Delay a bit - sleep_ms(100); - time_counter += 0.1; + sleep_ms(1000*frametime); + time_counter += frametime; } } catch(con::PeerNotFoundException &e) {} - + + /* + Handle failure to connect + */ if(could_connect == false) { if(client.accessDenied()) @@ -766,6 +760,56 @@ void the_game( //gui_loadingtext->remove(); return; } + + /* + Wait until content has been received + */ + bool got_content = false; + { + float frametime = 0.033; + const float timeout = 5.0; + float time_counter = 0.0; + for(;;) + { + // Update client and server + client.step(frametime); + if(server != NULL) + server->step(frametime); + + // End condition + if(client.texturesReceived() && + client.tooldefReceived() && + client.nodedefReceived()){ + got_content = true; + break; + } + // Break conditions + if(!client.connectedAndInitialized()) + break; + if(time_counter >= timeout) + break; + + // Display status + std::wostringstream ss; + ss<