Get the mesh working through the memory cache properly. Most credit goes to celeron55...
authorMirceaKitsune <sonichedgehog_hyperblast00@yahoo.com>
Wed, 24 Oct 2012 19:10:05 +0000 (22:10 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Sun, 25 Nov 2012 16:14:15 +0000 (18:14 +0200)
Get the texture from memory as well

Add .x to the list of supported formats

Update LUA API documentation

doc/lua_api.txt
src/client.cpp
src/content_cao.cpp
src/server.cpp

index 500b514d968d8805df6282e71b99ab1b011842f6..84c86061fd9520828255bc6a496bd020f6cdbf59 100644 (file)
@@ -1227,8 +1227,9 @@ Object Properties
     physical = true,
     weight = 5,
     collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
-    visual = "cube"/"sprite"/"upright_sprite",
+    visual = "cube"/"sprite"/"upright_sprite"/"mesh",
     visual_size = {x=1, y=1},
+    mesh = "model",
     textures = {}, -- number of required textures depends on visual
     spritediv = {x=1, y=1},
     initial_sprite_basepos = {x=0, y=0},
index 504297a6d87fb5710e6ed970b98e4442b47b3421..7f5421747c75da1c4dc3bc1745440852dc1197de 100644 (file)
@@ -41,6 +41,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "sound.h"
 #include "util/string.h"
 #include "hex.h"
+#include "IMeshCache.h"
 
 static std::string getMediaCacheDir()
 {
@@ -820,8 +821,8 @@ bool Client::loadMedia(const std::string &data, const std::string &filename)
        name = removeStringEnd(filename, image_ext);
        if(name != "")
        {
-               verbosestream<<"Client: Attempting to load image "
-                               <<"file \""<<filename<<"\""<<std::endl;
+               verbosestream<<"Client: Storing image into Irrlicht: "
+                               <<"\""<<filename<<"\""<<std::endl;
 
                io::IFileSystem *irrfs = m_device->getFileSystem();
                video::IVideoDriver *vdrv = m_device->getVideoDriver();
@@ -854,28 +855,31 @@ bool Client::loadMedia(const std::string &data, const std::string &filename)
        name = removeStringEnd(filename, sound_ext);
        if(name != "")
        {
-               verbosestream<<"Client: Attempting to load sound "
-                               <<"file \""<<filename<<"\""<<std::endl;
+               verbosestream<<"Client: Storing sound into Irrlicht: "
+                               <<"\""<<filename<<"\""<<std::endl;
                m_sound->loadSoundData(name, data);
                return true;
        }
 
        const char *model_ext[] = {
-               ".b3d", ".md2", ".obj",
+               ".x", ".b3d", ".md2", ".obj",
                NULL
        };
        name = removeStringEnd(filename, model_ext);
        if(name != "")
        {
                verbosestream<<"Client: Storing model into Irrlicht: "
-                               <<"file \""<<filename<<"\""<<std::endl;
+                               <<"\""<<filename<<"\""<<std::endl;
 
                io::IFileSystem *irrfs = m_device->getFileSystem();
-
-               // Create an irrlicht memory file
-               io::IReadFile *rfile = irrfs->createMemoryReadFile(*data_rw, data_rw.getSize(), filename.c_str(), true);
+               io::IReadFile *rfile = irrfs->createMemoryReadFile(
+                               *data_rw, data_rw.getSize(), filename.c_str());
                assert(rfile);
-               //rfile->drop();
+               
+               scene::ISceneManager *smgr = m_device->getSceneManager();
+               scene::IAnimatedMesh *mesh = smgr->getMesh(rfile);
+               smgr->getMeshCache()->addMesh(filename.c_str(), mesh);
+               
                return true;
        }
 
index b3c0370b8a058977b8731dfdb973372535e3cfcc..cd822cb332386f7f3f019eba492315f82f4ec54f 100644 (file)
@@ -979,6 +979,8 @@ public:
 
                updateTexturePos();
 
+               updateAnimations();
+
                if(m_reset_textures_timer >= 0){
                        m_reset_textures_timer -= dtime;
                        if(m_reset_textures_timer <= 0){
@@ -1066,8 +1068,7 @@ public:
                                        if(texturestring == "")
                                                continue; // Empty texture string means don't modify that material
                                        texturestring += mod;
-                                       video::IVideoDriver* driver = m_animated_meshnode->getSceneManager()->getVideoDriver();
-                                       video::ITexture* texture = driver->getTexture(texturestring.c_str());
+                                       video::ITexture* texture = tsrc->getTextureRaw(texturestring);
                                        if(!texture)
                                        {
                                                errorstream<<"GenericCAO::updateTextures(): Could not load texture "<<texturestring<<std::endl;
@@ -1135,6 +1136,14 @@ public:
                }
        }
 
+       void updateAnimations()
+       {
+               if(!m_animated_meshnode)
+                       return;
+
+               m_animated_meshnode->setFrameLoop(0, 50);
+       }
+
        void processMessage(const std::string &data)
        {
                //infostream<<"GenericCAO: Got message"<<std::endl;
index 92fd567e5163fa5dc2695c08c319ecb6eccad570..930938ecb68318b8849e34069b3f764276cd348f 100644 (file)
@@ -4055,7 +4055,7 @@ void Server::fillMediaCache()
                                ".png", ".jpg", ".bmp", ".tga",
                                ".pcx", ".ppm", ".psd", ".wal", ".rgb",
                                ".ogg",
-                               ".b3d", ".md2", ".obj",
+                               ".x", ".b3d", ".md2", ".obj",
                                NULL
                        };
                        if(removeStringEnd(filename, supported_ext) == ""){