aboutsummaryrefslogtreecommitdiff
path: root/src/tile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tile.cpp')
-rw-r--r--src/tile.cpp82
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;
}