#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
/*
/*
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.
connect_address.print(&infostream);
infostream<<std::endl;
client.connect(connect_address);
-
- bool could_connect = false;
+ /*
+ Wait for server to accept connection
+ */
+ bool could_connect = false;
try{
+ float frametime = 0.033;
+ const float timeout = 10.0;
float time_counter = 0.0;
for(;;)
{
- if(client.connectedAndInitialized())
- {
+ // Update client and server
+ client.step(frametime);
+ if(server != NULL)
+ server->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<<L"Connecting to server... (timeout in ";
- ss<<(int)(10.0 - time_counter + 1.0);
+ ss<<(int)(timeout - time_counter + 1.0);
ss<<L" seconds)";
draw_load_screen(ss.str(), driver, font);
-
- /*// Update screen
- driver->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())
//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<<L"Waiting content... (continuing anyway in ";
+ ss<<(int)(timeout - time_counter + 1.0);
+ ss<<L" seconds)\n";
+
+ ss<<(client.tooldefReceived()?L"[X]":L"[ ]");
+ ss<<L" Tool definitions\n";
+ ss<<(client.nodedefReceived()?L"[X]":L"[ ]");
+ ss<<L" Node definitions\n";
+ //ss<<(client.texturesReceived()?L"[X]":L"[ ]");
+ ss<<L"["<<(int)(client.textureReceiveProgress()*100+0.5)<<L"%] ";
+ ss<<L" Textures\n";
+
+ draw_load_screen(ss.str(), driver, font);
+
+ // Delay a bit
+ sleep_ms(1000*frametime);
+ time_counter += frametime;
+ }
+ }
/*
Create skybox
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");
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))
client.clearTempMod(nodepos_old);
dig_time = 0.0;
nodepos_old = v3s16(-32768,-32768,-32768);
+ ldown_for_dig = false;
}
} else {
/*
{
client.clearTempMod(nodepos);
dig_time = 0.0;
+ ldown_for_dig = false;
}
if(nodig_delay_counter > 0.0)
if(input->getLeftClicked())
{
client.setTempMod(nodepos, NodeMod(NODEMOD_CRACK, 0));
+ ldown_for_dig = true;
}
if(input->getLeftState())
{
infostream<<"Left button released (stopped digging)"
<<std::endl;
client.groundAction(2, v3s16(0,0,0), v3s16(0,0,0), 0);
+ ldown_for_dig = false;
}
if(input->getRightReleased())
{