Make possible and do update textures in node definitions after late texture atlas...
authorPerttu Ahola <celeron55@gmail.com>
Mon, 14 Nov 2011 20:07:42 +0000 (22:07 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Tue, 29 Nov 2011 17:13:42 +0000 (19:13 +0200)
src/client.cpp
src/nodedef.cpp
src/nodedef.h
src/tile.h

index d0e5cd405dee7a363ee86ed75dadbb41643baf07..d5abcd7debfd59ae5d11d69fd53110d7504322ca 100644 (file)
@@ -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
index 74d825362e51093a9cbd3c2c4e6d9f16e7a16b85..7b723e958daa79425be4211d373c2bc82bad3671 100644 (file)
@@ -164,6 +164,21 @@ public:
                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];
 };
index dece63fcd90a7645bb26939ffab2af3153c501b3..5aba69c48824dd530fd8cc1cbe5e969c73a28ace 100644 (file)
@@ -320,6 +320,12 @@ public:
        // 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
index ac4e790b43e86523e08f3589ae1eb9d412206241..105692c10bbf7f849602ce19fb3d3e4b6feb4415 100644 (file)
@@ -138,6 +138,7 @@ public:
                {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 @@ public:
                {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;
 };