X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Ftile.h;h=f4dc572e7cbbe668ed2165a4df2a15c2d9c0549b;hb=a1e9732407494edb9cef3ada45cc2781a34ed60c;hp=8008d212715ad161b387d1cd24aa9d0737501fc8;hpb=8f1d5d34a6191346d7f8cb5e012053bcd19795c4;p=dragonfireclient.git diff --git a/src/tile.h b/src/tile.h index 8008d2127..f4dc572e7 100644 --- a/src/tile.h +++ b/src/tile.h @@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include "threads.h" #include +#include class IGameDef; @@ -57,6 +58,8 @@ std::string getImagePath(std::string path); */ std::string getTexturePath(const std::string &filename); +void clearTextureNameCache(); + /* ITextureSource::generateTextureFromMesh parameters */ @@ -80,25 +83,30 @@ struct TextureFromMeshParams TextureSource creates and caches textures. */ -class ITextureSource +class ISimpleTextureSource +{ +public: + ISimpleTextureSource(){} + virtual ~ISimpleTextureSource(){} + virtual video::ITexture* getTexture( + const std::string &name, u32 *id = NULL) = 0; +}; + +class ITextureSource : public ISimpleTextureSource { public: ITextureSource(){} virtual ~ITextureSource(){} - virtual u32 getTextureId(const std::string &name){return 0;} - virtual u32 getTextureIdDirect(const std::string &name){return 0;} - virtual std::string getTextureName(u32 id){return "";} - virtual video::ITexture* getTexture(u32 id){return NULL;} + virtual u32 getTextureId(const std::string &name)=0; + virtual std::string getTextureName(u32 id)=0; + virtual video::ITexture* getTexture(u32 id)=0; virtual video::ITexture* getTexture( - const std::string &name, u32 *id = NULL){ - if(id) *id = 0; - return NULL; - } - virtual IrrlichtDevice* getDevice() - {return NULL;} + const std::string &name, u32 *id = NULL)=0; + virtual IrrlichtDevice* getDevice()=0; virtual bool isKnownSourceImage(const std::string &name)=0; virtual video::ITexture* generateTextureFromMesh( const TextureFromMeshParams ¶ms)=0; + virtual video::ITexture* getNormalTexture(const std::string &name)=0; }; class IWritableTextureSource : public ITextureSource @@ -106,32 +114,50 @@ class IWritableTextureSource : public ITextureSource public: IWritableTextureSource(){} virtual ~IWritableTextureSource(){} - virtual u32 getTextureId(const std::string &name){return 0;} - virtual u32 getTextureIdDirect(const std::string &name){return 0;} - virtual std::string getTextureName(u32 id){return "";} - virtual video::ITexture* getTexture(u32 id){return NULL;} + virtual u32 getTextureId(const std::string &name)=0; + virtual std::string getTextureName(u32 id)=0; + virtual video::ITexture* getTexture(u32 id)=0; virtual video::ITexture* getTexture( - const std::string &name, u32 *id = NULL){ - if(id) *id = 0; - return NULL; - } - virtual IrrlichtDevice* getDevice(){return NULL;} + const std::string &name, u32 *id = NULL)=0; + virtual IrrlichtDevice* getDevice()=0; virtual bool isKnownSourceImage(const std::string &name)=0; + virtual video::ITexture* generateTextureFromMesh( + const TextureFromMeshParams ¶ms)=0; virtual void processQueue()=0; virtual void insertSourceImage(const std::string &name, video::IImage *img)=0; virtual void rebuildImagesAndTextures()=0; - virtual video::ITexture* generateTextureFromMesh( - const TextureFromMeshParams ¶ms)=0; + virtual video::ITexture* getNormalTexture(const std::string &name)=0; }; IWritableTextureSource* createTextureSource(IrrlichtDevice *device); +#ifdef __ANDROID__ +/** + * @param size get next npot2 value + * @return npot2 value + */ +inline unsigned int npot2(unsigned int size) +{ + if (size == 0) return 0; + unsigned int npot = 1; + + while ((size >>= 1) > 0) { + npot <<= 1; + } + return npot; +} + +video::IImage * Align2Npot2(video::IImage * image, video::IVideoDriver* driver); +#endif + enum MaterialType{ TILE_MATERIAL_BASIC, TILE_MATERIAL_ALPHA, TILE_MATERIAL_LIQUID_TRANSPARENT, TILE_MATERIAL_LIQUID_OPAQUE, + TILE_MATERIAL_WAVING_LEAVES, + TILE_MATERIAL_WAVING_PLANTS }; // Material flags @@ -145,22 +171,38 @@ enum MaterialType{ // Animation made up by splitting the texture to vertical frames, as // defined by extra parameters #define MATERIAL_FLAG_ANIMATION_VERTICAL_FRAMES 0x08 +#define MATERIAL_FLAG_HIGHLIGHTED 0x10 /* This fully defines the looks of a tile. The SMaterial of a tile is constructed according to this. */ +struct FrameSpec +{ + FrameSpec(): + texture_id(0), + texture(NULL), + normal_texture(NULL) + { + } + u32 texture_id; + video::ITexture *texture; + video::ITexture *normal_texture; +}; + struct TileSpec { TileSpec(): texture_id(0), texture(NULL), + normal_texture(NULL), alpha(255), material_type(TILE_MATERIAL_BASIC), material_flags( //0 // <- DEBUG, Use the one below MATERIAL_FLAG_BACKFACE_CULLING ), + shader_id(0), animation_frame_count(1), animation_frame_length_ms(0), rotation(0) @@ -187,7 +229,7 @@ struct TileSpec // Sets everything else except the texture in the material void applyMaterialOptions(video::SMaterial &material) const { - switch(material_type){ + switch (material_type) { case TILE_MATERIAL_BASIC: material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF; break; @@ -200,41 +242,38 @@ struct TileSpec case TILE_MATERIAL_LIQUID_OPAQUE: material.MaterialType = video::EMT_SOLID; break; - } - material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING) ? true : false; - } - void applyMaterialOptionsWithShaders(video::SMaterial &material, - const video::E_MATERIAL_TYPE &basic, - const video::E_MATERIAL_TYPE &liquid, - const video::E_MATERIAL_TYPE &alpha) const - { - switch(material_type){ - case TILE_MATERIAL_BASIC: - material.MaterialType = basic; - break; - case TILE_MATERIAL_ALPHA: - material.MaterialType = alpha; - break; - case TILE_MATERIAL_LIQUID_TRANSPARENT: - material.MaterialType = liquid; + case TILE_MATERIAL_WAVING_LEAVES: + material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF; break; - case TILE_MATERIAL_LIQUID_OPAQUE: - material.MaterialType = liquid; + case TILE_MATERIAL_WAVING_PLANTS: + material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF; break; } - material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING) ? true : false; + material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING) + ? true : false; + } + + void applyMaterialOptionsWithShaders(video::SMaterial &material) const + { + material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING) + ? true : false; } u32 texture_id; video::ITexture *texture; + video::ITexture *normal_texture; + // Vertex alpha (when MATERIAL_ALPHA_VERTEX is used) u8 alpha; // Material parameters u8 material_type; u8 material_flags; + u32 shader_id; // Animation parameters u8 animation_frame_count; u16 animation_frame_length_ms; + std::map frames; + u8 rotation; };