1
0
镜像自地址 https://github.com/luanti-org/luanti.git 已同步 2025-12-18 12:55:25 +01:00

Get the mesh working through the memory cache properly. Most credit goes to celeron55 for the help on this code

Get the texture from memory as well

Add .x to the list of supported formats

Update LUA API documentation
这个提交包含在:
MirceaKitsune
2012-10-24 22:10:05 +03:00
提交者 Perttu Ahola
父节点 f9675bd2b4
当前提交 9c8ba42750
修改 4 个文件,包含 28 行新增14 行删除

查看文件

@@ -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},

查看文件

@@ -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;
}

查看文件

@@ -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;

查看文件

@@ -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) == ""){