1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-11 17:51:04 +00:00

Reworked texture, material, mineral and whatever handling

This commit is contained in:
Perttu Ahola 2011-01-26 00:41:06 +02:00
parent 035345f13d
commit 9f882bf74d
27 changed files with 952 additions and 1324 deletions

View file

@ -264,12 +264,10 @@ void MapBlock::makeFastFace(TileSpec tile, u8 light, v3f p,
//u8 li = decode_light(light);
u8 li = light;
u8 alpha = 255;
u8 alpha = tile.alpha;
/*u8 alpha = 255;
if(tile.id == TILE_WATER)
{
alpha = WATER_ALPHA;
}
alpha = WATER_ALPHA;*/
video::SColor c = video::SColor(alpha,li,li,li);
@ -297,17 +295,8 @@ void MapBlock::makeFastFace(TileSpec tile, u8 light, v3f p,
TileSpec MapBlock::getNodeTile(MapNode mn, v3s16 p, v3s16 face_dir)
{
TileSpec spec;
/*//DEBUG
{
spec.id = TILE_STONE;
return spec;
}*/
spec.feature = TILEFEAT_NONE;
//spec.id = TILE_STONE;
spec.id = mn.getTile(face_dir);
spec = mn.getTile(face_dir);
/*
Check temporary modifications on this node
*/
@ -320,12 +309,15 @@ TileSpec MapBlock::getNodeTile(MapNode mn, v3s16 p, v3s16 face_dir)
struct NodeMod mod = n->getValue();
if(mod.type == NODEMOD_CHANGECONTENT)
{
spec.id = content_tile(mod.param, face_dir);
//spec = content_tile(mod.param, face_dir);
MapNode mn2(mod.param);
spec = mn2.getTile(face_dir);
}
if(mod.type == NODEMOD_CRACK)
{
spec.feature = TILEFEAT_CRACK;
spec.param.crack.progression = mod.param;
std::ostringstream os;
os<<"[[mod:crack"<<mod.param;
spec.name += os.str();
}
}
@ -675,36 +667,19 @@ void MapBlock::updateMesh(u32 daynight_ratio)
FastFace &f = fastfaces_new[i];
const u16 indices[] = {0,1,2,2,3,0};
video::ITexture *texture = g_irrlicht->getTexture(f.tile.name);
video::SMaterial material;
material.Lighting = false;
material.BackfaceCulling = false;
material.setFlag(video::EMF_BILINEAR_FILTER, false);
material.setFlag(video::EMF_ANTI_ALIASING, video::EAAM_OFF);
material.setFlag(video::EMF_FOG_ENABLE, true);
material.setTexture(0, texture);
if(f.tile.alpha != 255)
material.MaterialType = video::EMT_TRANSPARENT_VERTEX_ALPHA;
if(f.tile.feature == TILEFEAT_NONE)
{
collector.append(tile_material_get(f.tile.id), f.vertices, 4,
indices, 6);
}
else if(f.tile.feature == TILEFEAT_CRACK)
{
const char *path = tile_texture_path_get(f.tile.id);
u16 progression = f.tile.param.crack.progression;
std::string name = (std::string)path + "_cracked_"
+ (char)('0' + progression);
TextureMod *mod = new CrackTextureMod(progression);
video::ITexture *texture = g_irrlicht->getTexture(
TextureSpec(name, path, mod));
video::SMaterial material = tile_material_get(f.tile.id);
material.setTexture(0, texture);
collector.append(material, f.vertices, 4, indices, 6);
}
else
{
// No such feature
assert(0);
}
collector.append(material, f.vertices, 4, indices, 6);
}
}
@ -1427,7 +1402,8 @@ s16 MapBlock::getGroundLevel(v2s16 p2d)
s16 y = MAP_BLOCKSIZE-1;
for(; y>=0; y--)
{
if(is_ground_content(getNodeRef(p2d.X, y, p2d.Y).d))
//if(is_ground_content(getNodeRef(p2d.X, y, p2d.Y).d))
if(content_features(getNodeRef(p2d.X, y, p2d.Y).d).walkable)
{
if(y == MAP_BLOCKSIZE-1)
return -2;