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
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];
};
// 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
{return AtlasPointer(0);}
virtual video::ITexture* getTextureRaw(const std::string &name)
{return NULL;}
+ virtual void updateAP(AtlasPointer &ap){};
};
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;
};