diff --git a/src/client.cpp b/src/client.cpp index d0e5cd405dee7a363ee86ed75dadbb41643baf07..d5abcd7debfd59ae5d11d69fd53110d7504322ca 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -224,6 +224,9 @@ Client::Client( tsrc->buildMainAtlas(this); else infostream<<"Not building texture atlas."<<std::endl; + + // Update textures + m_nodedef->updateTextures(tsrc); // NOTE: This should be done only after getting possible dynamic // game definitions from the server, or at least shut down and diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 74d825362e51093a9cbd3c2c4e6d9f16e7a16b85..7b723e958daa79425be4211d373c2bc82bad3671 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -164,6 +164,21 @@ class CNodeDefManager: public IWritableNodeDefManager assert(c <= MAX_CONTENT); return &m_content_features[c]; } + virtual void updateTextures(ITextureSource *tsrc) + { +#ifndef SERVER + infostream<<"CNodeDefManager::updateTextures(): Updating " + <<"textures in node definitions"<<std::endl; + for(u16 i=0; i<=MAX_CONTENT; i++) + { + ContentFeatures *f = &m_content_features[i]; + for(u16 j=0; j<6; j++) + tsrc->updateAP(f->tiles[j].texture); + if(f->special_atlas) + tsrc->updateAP(*(f->special_atlas)); + } +#endif + } private: ContentFeatures m_content_features[MAX_CONTENT+1]; }; diff --git a/src/nodedef.h b/src/nodedef.h index dece63fcd90a7645bb26939ffab2af3153c501b3..5aba69c48824dd530fd8cc1cbe5e969c73a28ace 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -320,6 +320,12 @@ class IWritableNodeDefManager : public INodeDefManager // Register node definition virtual void set(content_t c, const ContentFeatures &def)=0; virtual ContentFeatures* getModifiable(content_t c)=0; + + /* + Update tile textures to latest return values of TextueSource. + Call after updating the texture atlas of a TextureSource. + */ + virtual void updateTextures(ITextureSource *tsrc)=0; }; // If textures not actually available (server), tsrc can be NULL diff --git a/src/tile.h b/src/tile.h index ac4e790b43e86523e08f3589ae1eb9d412206241..105692c10bbf7f849602ce19fb3d3e4b6feb4415 100644 --- a/src/tile.h +++ b/src/tile.h @@ -138,6 +138,7 @@ class ITextureSource {return AtlasPointer(0);} virtual video::ITexture* getTextureRaw(const std::string &name) {return NULL;} + virtual void updateAP(AtlasPointer &ap){}; }; class IWritableTextureSource : public ITextureSource @@ -153,8 +154,8 @@ class IWritableTextureSource : public ITextureSource {return AtlasPointer(0);} virtual video::ITexture* getTextureRaw(const std::string &name) {return NULL;} + virtual void updateAP(AtlasPointer &ap){}; - virtual void updateAP(AtlasPointer &ap)=0; virtual void buildMainAtlas(class IGameDef *gamedef)=0; virtual void processQueue()=0; };