diff options
author | Zeg9 <dazeg9@gmail.com> | 2013-05-11 16:02:41 +0200 |
---|---|---|
committer | PilzAdam <pilzadam@minetest.net> | 2013-05-13 17:08:51 +0200 |
commit | bda62bd3bf7f41a25f2c6294ddc0ec144081e3ef (patch) | |
tree | 2ef25b348066cdcbe6439328dd96b5cb8abd53da | |
parent | efc9329033ece46f04c5aaee3e34c49eb482eaa3 (diff) | |
download | minetest-bda62bd3bf7f41a25f2c6294ddc0ec144081e3ef.tar.gz minetest-bda62bd3bf7f41a25f2c6294ddc0ec144081e3ef.tar.bz2 minetest-bda62bd3bf7f41a25f2c6294ddc0ec144081e3ef.zip |
Add progress bar to item visuals preloading
-rw-r--r-- | src/client.cpp | 16 | ||||
-rw-r--r-- | src/client.h | 2 | ||||
-rw-r--r-- | src/game.cpp | 2 |
3 files changed, 17 insertions, 3 deletions
diff --git a/src/client.cpp b/src/client.cpp index 329496db7..929ed0eab 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" @@ -2804,7 +2805,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"<<std::endl; assert(m_itemdef_received); @@ -2839,13 +2843,23 @@ void Client::afterContentReceived() if(g_settings->getBool("preload_item_visuals")) { verbosestream<<"Updating item textures and meshes"<<std::endl; + wchar_t* text = wgettext("Item textures..."); + draw_load_screen(text,device,font,0,0); std::set<std::string> names = m_itemdef->getAll(); + size_t size = names.size(); + size_t count = 0; + int percent = 0; for(std::set<std::string>::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 diff --git a/src/client.h b/src/client.h index 67ba6c565..f0cc55868 100644 --- a/src/client.h +++ b/src/client.h @@ -385,7 +385,7 @@ public: bool nodedefReceived() { return m_nodedef_received; } - void afterContentReceived(); + void afterContentReceived(IrrlichtDevice *device, gui::IGUIFont* font); float getRTT(void); diff --git a/src/game.cpp b/src/game.cpp index 16d550776..23e794de2 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1232,7 +1232,7 @@ void the_game( After all content has been received: Update cached textures, meshes and materials */ - client.afterContentReceived(); + client.afterContentReceived(device,font); /* Create the camera node |