Tune caves
[oweals/minetest.git] / src / tile.h
index 105692c10bbf7f849602ce19fb3d3e4b6feb4415..698ce3dcfbcc0f0390f113d22d135a236c0b5a55 100644 (file)
@@ -73,7 +73,7 @@ struct AtlasPointer
        {
        }
 
-       bool operator==(const AtlasPointer &other)
+       bool operator==(const AtlasPointer &other) const
        {
                return (
                        id == other.id
@@ -87,40 +87,17 @@ struct AtlasPointer
                );*/
        }
 
+       bool operator!=(const AtlasPointer &other) const
+       {
+               return !(*this == other);
+       }
+
        float x0(){ return pos.X; }
        float x1(){ return pos.X + size.X; }
        float y0(){ return pos.Y; }
        float y1(){ return pos.Y + size.Y; }
 };
 
-/*
-       An internal variant of the former with more data.
-*/
-struct SourceAtlasPointer
-{
-       std::string name;
-       AtlasPointer a;
-       video::IImage *atlas_img; // The source image of the atlas
-       // Integer variants of position and size
-       v2s32 intpos;
-       v2u32 intsize;
-
-       SourceAtlasPointer(
-                       const std::string &name_,
-                       AtlasPointer a_=AtlasPointer(0, NULL),
-                       video::IImage *atlas_img_=NULL,
-                       v2s32 intpos_=v2s32(0,0),
-                       v2u32 intsize_=v2u32(0,0)
-               ):
-               name(name_),
-               a(a_),
-               atlas_img(atlas_img_),
-               intpos(intpos_),
-               intsize(intsize_)
-       {
-       }
-};
-
 /*
        TextureSource creates and caches textures.
 */
@@ -138,6 +115,10 @@ public:
                {return AtlasPointer(0);}
        virtual video::ITexture* getTextureRaw(const std::string &name)
                {return NULL;}
+       virtual AtlasPointer getTextureRawAP(const AtlasPointer &ap)
+               {return AtlasPointer(0);}
+       virtual IrrlichtDevice* getDevice()
+               {return NULL;}
        virtual void updateAP(AtlasPointer &ap){};
 };
 
@@ -154,10 +135,14 @@ public:
                {return AtlasPointer(0);}
        virtual video::ITexture* getTextureRaw(const std::string &name)
                {return NULL;}
+       virtual IrrlichtDevice* getDevice()
+               {return NULL;}
        virtual void updateAP(AtlasPointer &ap){};
 
-       virtual void buildMainAtlas(class IGameDef *gamedef)=0;
        virtual void processQueue()=0;
+       virtual void insertSourceImage(const std::string &name, video::IImage *img)=0;
+       virtual void rebuildImagesAndTextures()=0;
+       virtual void buildMainAtlas(class IGameDef *gamedef)=0;
 };
 
 IWritableTextureSource* createTextureSource(IrrlichtDevice *device);
@@ -170,7 +155,13 @@ enum MaterialType{
 };
 
 // Material flags
+// Should backface culling be enabled?
 #define MATERIAL_FLAG_BACKFACE_CULLING 0x01
+// Should a crack be drawn?
+#define MATERIAL_FLAG_CRACK 0x02
+// Should the crack be drawn on transparent pixels (unset) or not (set)?
+// Ignored if MATERIAL_FLAG_CRACK is not set.
+#define MATERIAL_FLAG_CRACK_OVERLAY 0x04
 
 /*
        This fully defines the looks of a tile.
@@ -191,7 +182,7 @@ struct TileSpec
        {
        }
 
-       bool operator==(TileSpec &other)
+       bool operator==(const TileSpec &other) const
        {
                return (
                        texture == other.texture &&
@@ -200,6 +191,11 @@ struct TileSpec
                        material_flags == other.material_flags
                );
        }
+
+       bool operator!=(const TileSpec &other) const
+       {
+               return !(*this == other);
+       }
        
        // Sets everything else except the texture in the material
        void applyMaterialOptions(video::SMaterial &material) const