X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fgame.cpp;h=a7e1ccd8200cdbb71dcc113bf4bd070dc4f140f0;hb=cebc8c78a4f5c4a2d7bb246e44f7bd2599de9c9b;hp=6c75863c01788f45c6dcce08fed5889807eb962d;hpb=9e1c4533b8a67ee8c90f4aa70f6974b25b55640d;p=dragonfireclient.git diff --git a/src/game.cpp b/src/game.cpp index 6c75863c0..a7e1ccd82 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -47,9 +47,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "nodedef.h" #include "nodemetadata.h" #include "main.h" // For g_settings -#include "content_mapnode.h" // For content_mapnode_init #include "tooldef.h" -#include "content_mapnode.h" // Default nodes +#include "tile.h" // For TextureSource /* Setting this to 1 enables a special camera mode that forces @@ -256,9 +255,9 @@ void draw_hotbar(video::IVideoDriver *driver, gui::IGUIFont *font, /* Draw hearts */ + video::ITexture *heart_texture = tsrc->getTextureRaw("heart.png"); + if(heart_texture) { - video::ITexture *heart_texture = - driver->getTexture(getTexturePath("heart.png").c_str()); v2s32 p = pos + v2s32(0, -20); for(s32 i=0; i= 0.5) { skybox = smgr->addSkyBoxSceneNode( - driver->getTexture(getTexturePath("skybox2.png").c_str()), - driver->getTexture(getTexturePath("skybox3.png").c_str()), - driver->getTexture(getTexturePath("skybox1.png").c_str()), - driver->getTexture(getTexturePath("skybox1.png").c_str()), - driver->getTexture(getTexturePath("skybox1.png").c_str()), - driver->getTexture(getTexturePath("skybox1.png").c_str())); + tsrc->getTextureRaw("skybox2.png"), + tsrc->getTextureRaw("skybox3.png"), + tsrc->getTextureRaw("skybox1.png"), + tsrc->getTextureRaw("skybox1.png"), + tsrc->getTextureRaw("skybox1.png"), + tsrc->getTextureRaw("skybox1.png")); } else if(brightness >= 0.2) { skybox = smgr->addSkyBoxSceneNode( - driver->getTexture(getTexturePath("skybox2_dawn.png").c_str()), - driver->getTexture(getTexturePath("skybox3_dawn.png").c_str()), - driver->getTexture(getTexturePath("skybox1_dawn.png").c_str()), - driver->getTexture(getTexturePath("skybox1_dawn.png").c_str()), - driver->getTexture(getTexturePath("skybox1_dawn.png").c_str()), - driver->getTexture(getTexturePath("skybox1_dawn.png").c_str())); + tsrc->getTextureRaw("skybox2_dawn.png"), + tsrc->getTextureRaw("skybox3_dawn.png"), + tsrc->getTextureRaw("skybox1_dawn.png"), + tsrc->getTextureRaw("skybox1_dawn.png"), + tsrc->getTextureRaw("skybox1_dawn.png"), + tsrc->getTextureRaw("skybox1_dawn.png")); } else { skybox = smgr->addSkyBoxSceneNode( - driver->getTexture(getTexturePath("skybox2_night.png").c_str()), - driver->getTexture(getTexturePath("skybox3_night.png").c_str()), - driver->getTexture(getTexturePath("skybox1_night.png").c_str()), - driver->getTexture(getTexturePath("skybox1_night.png").c_str()), - driver->getTexture(getTexturePath("skybox1_night.png").c_str()), - driver->getTexture(getTexturePath("skybox1_night.png").c_str())); + tsrc->getTextureRaw("skybox2_night.png"), + tsrc->getTextureRaw("skybox3_night.png"), + tsrc->getTextureRaw("skybox1_night.png"), + tsrc->getTextureRaw("skybox1_night.png"), + tsrc->getTextureRaw("skybox1_night.png"), + tsrc->getTextureRaw("skybox1_night.png")); } } @@ -631,20 +630,17 @@ 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(tsrc); - - // Fill node feature table with default definitions - content_mapnode_init(tsrc, nodedef); + IWritableNodeDefManager *nodedef = createNodeDefManager(); /* Create server. @@ -701,54 +697,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()) @@ -765,13 +758,63 @@ 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< frametime_log; float nodig_delay_counter = 0.0; float dig_time = 0.0; u16 dig_index = 0; v3s16 nodepos_old(-32768,-32768,-32768); + bool ldown_for_dig = false; float damage_flash_timer = 0; s16 farmesh_range = 20*MAP_BLOCKSIZE; - const float object_hit_delay = 0.5; + const float object_hit_delay = 0.2; float object_hit_delay_timer = 0.0; bool invert_mouse = g_settings->getBool("invert_mouse"); @@ -1537,6 +1583,10 @@ void the_game( player->setPosition(player->getPosition() + v3f(0,-BS,0)); camera.update(player, busytime, screensize);*/ } + else if(event.type == CE_TEXTURES_UPDATED) + { + update_skybox(driver, tsrc, smgr, skybox, brightness); + } } } @@ -1577,7 +1627,7 @@ void the_game( bool left_punch = false; bool left_punch_muted = false; - if(selected_active_object != NULL) + if(selected_active_object != NULL && !ldown_for_dig) { /* Clear possible cracking animation */ if(nodepos_old != v3s16(-32768,-32768,-32768)) @@ -1661,6 +1711,7 @@ void the_game( client.clearTempMod(nodepos_old); dig_time = 0.0; nodepos_old = v3s16(-32768,-32768,-32768); + ldown_for_dig = false; } } else { /* @@ -1689,6 +1740,7 @@ void the_game( { client.clearTempMod(nodepos); dig_time = 0.0; + ldown_for_dig = false; } if(nodig_delay_counter > 0.0) @@ -1719,6 +1771,7 @@ void the_game( if(input->getLeftClicked()) { client.setTempMod(nodepos, NodeMod(NODEMOD_CRACK, 0)); + ldown_for_dig = true; } if(input->getLeftState()) { @@ -1889,6 +1942,7 @@ void the_game( infostream<<"Left button released (stopped digging)" <getRightReleased()) { @@ -1902,25 +1956,27 @@ void the_game( /* Calculate stuff for drawing */ - + + /* + Calculate general brightness + */ u32 daynight_ratio = client.getDayNightRatio(); - u8 l = decode_light((daynight_ratio * LIGHT_SUN) / 1000); + u8 light8 = decode_light((daynight_ratio * LIGHT_SUN) / 1000); + brightness = (float)light8/255.0; video::SColor bgcolor = video::SColor( 255, - bgcolor_bright.getRed() * l / 255, - bgcolor_bright.getGreen() * l / 255, - bgcolor_bright.getBlue() * l / 255); - /*skycolor.getRed() * l / 255, - skycolor.getGreen() * l / 255, - skycolor.getBlue() * l / 255);*/ - - float brightness = (float)l/255.0; + bgcolor_bright.getRed() * brightness, + bgcolor_bright.getGreen() * brightness, + bgcolor_bright.getBlue() * brightness); + /*skycolor.getRed() * brightness, + skycolor.getGreen() * brightness, + skycolor.getBlue() * brightness);*/ /* Update skybox */ if(fabs(brightness - old_brightness) > 0.01) - update_skybox(driver, smgr, skybox, brightness); + update_skybox(driver, tsrc, smgr, skybox, brightness); /* Update clouds