diff options
Diffstat (limited to 'src/tile.cpp')
-rw-r--r-- | src/tile.cpp | 82 |
1 files changed, 72 insertions, 10 deletions
diff --git a/src/tile.cpp b/src/tile.cpp index 90de11642..79d68d4c3 100644 --- a/src/tile.cpp +++ b/src/tile.cpp @@ -25,7 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., // A mapping from tiles to paths of textures -const char * g_tile_texture_filenames[TILES_COUNT] = +/*const char * g_tile_texture_filenames[TILES_COUNT] = { NULL, "stone.png", @@ -37,13 +37,19 @@ const char * g_tile_texture_filenames[TILES_COUNT] = "mese.png", "mud.png", "tree_top.png", - "mud_with_grass.png", + "mud.png_sidegrass", "cloud.png", "coalstone.png", "wood.png", -}; +};*/ + +/* + These can either be real paths or generated names of preloaded + textures (like "mud.png_sidegrass") +*/ +std::string g_tile_texture_paths[TILES_COUNT]; -std::string g_tile_texture_path_strings[TILES_COUNT]; +/*std::string g_tile_texture_path_strings[TILES_COUNT]; const char * g_tile_texture_paths[TILES_COUNT] = {0}; void init_tile_texture_paths() @@ -60,30 +66,86 @@ void init_tile_texture_paths() g_tile_texture_path_strings[i].c_str(); } } -} +}*/ const char * tile_texture_path_get(u32 i) { assert(i < TILES_COUNT); - return g_tile_texture_paths[i]; + //return g_tile_texture_paths[i]; + return g_tile_texture_paths[i].c_str(); } // A mapping from tiles to materials // Initialized at run-time. video::SMaterial g_tile_materials[TILES_COUNT]; -void tile_materials_preload(IrrlichtWrapper *irrlicht) +enum TileTextureModID +{ + TTMID_NONE, + TTMID_SIDEGRASS, +}; + +struct TileTextureSpec +{ + const char *filename; + enum TileTextureModID mod; +}; + +/* + Initializes g_tile_texture_paths with paths of textures, + generates generated textures and creates the tile material array. +*/ +void init_tile_textures() { + TileTextureSpec tile_texture_specs[TILES_COUNT] = + { + {NULL, TTMID_NONE}, + {"stone.png", TTMID_NONE}, + {"water.png", TTMID_NONE}, + {"grass.png", TTMID_NONE}, + {"tree.png", TTMID_NONE}, + {"leaves.png", TTMID_NONE}, + {"grass_footsteps.png", TTMID_NONE}, + {"mese.png", TTMID_NONE}, + {"mud.png", TTMID_NONE}, + {"tree_top.png", TTMID_NONE}, + {"mud.png", TTMID_SIDEGRASS}, + {"cloud.png", TTMID_NONE}, + {"coalstone.png", TTMID_NONE}, + {"wood.png", TTMID_NONE}, + }; + + for(s32 i=0; i<TILES_COUNT; i++) + { + const char *filename = tile_texture_specs[i].filename; + enum TileTextureModID mod_id = tile_texture_specs[i].mod; + + if(filename != NULL && std::string("") != filename) + { + std::string path = porting::getDataPath(filename); + std::string mod_postfix = ""; + if(mod_id == TTMID_SIDEGRASS) + { + mod_postfix = "_sidegrass"; + // Generate texture + TextureMod *mod = new SideGrassTextureMod(); + g_irrlicht->getTexture(TextureSpec(path + mod_postfix, + path, mod)); + } + g_tile_texture_paths[i] = path + mod_postfix; + } + } + for(s32 i=0; i<TILES_COUNT; i++) { const char *path = tile_texture_path_get(i); video::ITexture *t = NULL; - if(path != NULL) + if(path != NULL && std::string("") != path) { - t = irrlicht->getTexture(path); + t = g_irrlicht->getTexture(path); assert(t != NULL); } @@ -99,7 +161,7 @@ void tile_materials_preload(IrrlichtWrapper *irrlicht) g_tile_materials[i].setTexture(0, t); } - + g_tile_materials[TILE_WATER].MaterialType = video::EMT_TRANSPARENT_VERTEX_ALPHA; //g_tile_materials[TILE_WATER].MaterialType = video::EMT_TRANSPARENT_ADD_COLOR; } |