X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclient.cpp;h=e4ca52dd5b3b81c16a90a18ea6be98f98e7f95ec;hb=5e80df46b8c42e71c376da50ffb0ef06636073f2;hp=329496db7519a92f78407834221d2a07742de4a8;hpb=5068cb40ce437257b01234641779567531f132b1;p=dragonfireclient.git diff --git a/src/client.cpp b/src/client.cpp index 329496db7..e4ca52dd5 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -29,6 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapblock.h" #include "settings.h" #include "profiler.h" +#include "gettext.h" #include "log.h" #include "nodemetadata.h" #include "nodedef.h" @@ -349,6 +350,11 @@ Client::~Client() m_mesh_update_thread.setRun(false); while(m_mesh_update_thread.IsRunning()) sleep_ms(100); + while(!m_mesh_update_thread.m_queue_out.empty()) { + MeshUpdateResult r = m_mesh_update_thread.m_queue_out.pop_front(); + delete r.mesh; + } + delete m_inventory_from_server; @@ -756,6 +762,8 @@ void Client::step(float dtime) // Replace with the new mesh block->mesh = r.mesh; + } else { + delete r.mesh; } if(r.ack_block_to_server) { @@ -1979,7 +1987,7 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) event.spawn_particle.expirationtime = expirationtime; event.spawn_particle.size = size; - event.add_particlespawner.collisiondetection = + event.spawn_particle.collisiondetection = collisiondetection; event.spawn_particle.texture = new std::string(texture); @@ -2804,7 +2812,10 @@ ClientEvent Client::getClientEvent() return m_client_event_queue.pop_front(); } -void Client::afterContentReceived() +void draw_load_screen(const std::wstring &text, + IrrlichtDevice* device, gui::IGUIFont* font, + float dtime=0 ,int percent=0, bool clouds=true); +void Client::afterContentReceived(IrrlichtDevice *device, gui::IGUIFont* font) { infostream<<"Client::afterContentReceived() started"<getBool("preload_item_visuals")) { verbosestream<<"Updating item textures and meshes"< names = m_itemdef->getAll(); + size_t size = names.size(); + size_t count = 0; + int percent = 0; for(std::set::const_iterator i = names.begin(); i != names.end(); ++i){ // Asking for these caches the result m_itemdef->getInventoryTexture(*i, this); m_itemdef->getWieldMesh(*i, this); + count++; + percent = count*100/size; + if (count%50 == 0) // only update every 50 item + draw_load_screen(text,device,font,0,percent); } + delete[] text; } // Start mesh update thread after setting up content definitions