Add progress bar to item visuals preloading
authorZeg9 <dazeg9@gmail.com>
Sat, 11 May 2013 14:02:41 +0000 (16:02 +0200)
committerPilzAdam <pilzadam@minetest.net>
Mon, 13 May 2013 15:08:51 +0000 (17:08 +0200)
src/client.cpp
src/client.h
src/game.cpp

index 329496db7519a92f78407834221d2a07742de4a8..929ed0eabdab48358a9c20841b164f802e4e47cd 100644 (file)
@@ -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
index 67ba6c5659f3172bdac1d47817688ad127fc3dce..f0cc5586816372c007532ef6101854491784ddca 100644 (file)
@@ -385,7 +385,7 @@ public:
        bool nodedefReceived()
        { return m_nodedef_received; }
        
-       void afterContentReceived();
+       void afterContentReceived(IrrlichtDevice *device, gui::IGUIFont* font);
 
        float getRTT(void);
 
index 16d55077699b7ccd2bc78d64e2a16292f675d440..23e794de2c27870fab713fc25a8763bcfd423025 100644 (file)
@@ -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