X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclient.cpp;h=98c9af972dadb428f74b65e27a00ac715f2c4fdc;hb=bd6d4666abe20247437ede28f73955d413fe5e22;hp=5f53e14f7c73b19b25048496a14e1ed9d3d8c027;hpb=3af90db5b51da0c37f77fe6410e488c8c27acd67;p=minetest.git diff --git a/src/client.cpp b/src/client.cpp index 5f53e14f7..98c9af972 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -20,9 +20,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client.h" #include #include "clientserver.h" -#include "jmutexautolock.h" +#include "jthread/jmutexautolock.h" #include "main.h" #include +#include "filesys.h" #include "porting.h" #include "mapsector.h" #include "mapblock_mesh.h" @@ -250,7 +251,7 @@ void * MediaFetchThread::Thread() m_file_data.push_back(make_pair(i->name, data)); } else { m_failed.push_back(*i); - infostream << "cURL request failed for " << i->name << std::endl; + infostream << "cURL request failed for " << i->name << " (" << curl_easy_strerror(res) << ")"<< std::endl; } curl_easy_cleanup(curl); } @@ -271,7 +272,8 @@ Client::Client( IWritableItemDefManager *itemdef, IWritableNodeDefManager *nodedef, ISoundManager *sound, - MtEventManager *event + MtEventManager *event, + bool ipv6 ): m_tsrc(tsrc), m_shsrc(shsrc), @@ -287,7 +289,7 @@ Client::Client( device->getSceneManager(), tsrc, this, device ), - m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, this), + m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, ipv6, this), m_device(device), m_server_ser_ver(SER_FMT_VER_INVALID), m_playeritem(0), @@ -319,12 +321,6 @@ Client::Client( m_playerpos_send_timer = 0.0; m_ignore_damage_timer = 0.0; - // Build main texture atlas, now that the GameDef exists (that is, us) - if(g_settings->getBool("enable_texture_atlas")) - m_tsrc->buildMainAtlas(this); - else - infostream<<"Not building texture atlas."< data(2+1+PLAYERNAME_SIZE+PASSWORD_SIZE+2+2); writeU16(&data[0], TOSERVER_INIT); - writeU8(&data[2], SER_FMT_VER_HIGHEST); + writeU8(&data[2], SER_FMT_VER_HIGHEST_READ); memset((char*)&data[3], 0, PLAYERNAME_SIZE); snprintf((char*)&data[3], PLAYERNAME_SIZE, "%s", myplayer->getName()); @@ -697,9 +693,14 @@ void Client::step(float dtime) m_client_event_queue.push_back(event); } } + else if(event.type == CEE_PLAYER_BREATH) + { + u16 breath = event.player_breath.amount; + sendBreath(breath); + } } } - + /* Print some info */ @@ -802,7 +803,8 @@ void Client::step(float dtime) all_stopped &= !(*thread)->IsRunning(); while (!(*thread)->m_file_data.empty()) { std::pair out = (*thread)->m_file_data.pop_front(); - ++m_media_received_count; + if(m_media_received_count < m_media_count) + m_media_received_count++; bool success = loadMedia(out.second, out.first); if(success){ @@ -1153,8 +1155,7 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) infostream<<"Client: TOCLIENT_INIT received with " "deployed="<<((int)deployed&0xff)< SER_FMT_VER_HIGHEST) + if(!ser_ver_supported(deployed)) { infostream<<"Client: TOCLIENT_INIT: Server sent " <<"unsupported ser_fmt_ver"<deSerialize(istr, ser_version, false); + block->deSerializeNetworkSpecific(istr); } else { @@ -1308,6 +1310,7 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) //infostream<<"Creating new"<deSerialize(istr, ser_version, false); + block->deSerializeNetworkSpecific(istr); sector->insertBlock(block); } @@ -1354,8 +1357,6 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) std::istringstream is(datastring, std::ios_base::binary); //t3.stop(); - //m_env.printPlayers(infostream); - //TimeTaker t4("player get", m_device); Player *player = m_env.getLocalPlayer(); assert(player != NULL); @@ -1583,6 +1584,15 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) m_client_event_queue.push_back(event); } } + else if(command == TOCLIENT_BREATH) + { + std::string datastring((char*)&data[2], datasize-2); + std::istringstream is(datastring, std::ios_base::binary); + Player *player = m_env.getLocalPlayer(); + assert(player != NULL); + u16 breath = readU16(is); + player->setBreath(breath) ; + } else if(command == TOCLIENT_MOVE_PLAYER) { std::string datastring((char*)&data[2], datasize-2); @@ -1736,15 +1746,9 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) } else if(command == TOCLIENT_MEDIA) { - if (m_media_count == 0) - return; std::string datastring((char*)&data[2], datasize-2); std::istringstream is(datastring, std::ios_base::binary); - // Mesh update thread must be stopped while - // updating content definitions - assert(!m_mesh_update_thread.IsRunning()); - /* u16 command u16 total number of file bunches @@ -1759,11 +1763,31 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) */ int num_bunches = readU16(is); int bunch_i = readU16(is); - int num_files = readU32(is); + u32 num_files = readU32(is); infostream<<"Client: Received files: bunch "<rebuildImagesAndTextures(); - // Update texture atlas - infostream<<"- Updating texture atlas"<getBool("enable_texture_atlas")) - m_tsrc->buildMainAtlas(this); - // Rebuild shaders + infostream<<"- Rebuilding shaders"<rebuildShaders(); // Update node aliases