Better node texture generation

This commit is contained in:
Perttu Ahola 2011-11-15 14:43:15 +02:00
parent c1202a2ecc
commit cf6e22e9a6
7 changed files with 197 additions and 208 deletions

View File

@ -391,7 +391,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
else
l = decode_light(n.getLightBlend(data->m_daynight_ratio, nodedef));
video::SColor c = MapBlock_LightColor(
nodedef->get(n).vertex_alpha, l);
nodedef->get(n).alpha, l);
// Neighbor liquid levels (key = relative position)
// Includes current node
@ -678,7 +678,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
u8 l = decode_light(n.getLightBlend(data->m_daynight_ratio, nodedef));
video::SColor c = MapBlock_LightColor(
nodedef->get(n).vertex_alpha, l);
nodedef->get(n).alpha, l);
video::S3DVertex vertices[4] =
{

View File

@ -178,8 +178,8 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_STONE;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "stone.png");
f->setInventoryTextureCube("stone.png", "stone.png", "stone.png", tsrc);
f->setAllTextures("stone.png");
f->setInventoryTextureCube("stone.png", "stone.png", "stone.png");
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
f->often_contains_mineral = true;
@ -190,9 +190,9 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_GRASS;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "mud.png^grass_side.png");
f->setTexture(tsrc, 0, "grass.png");
f->setTexture(tsrc, 1, "mud.png");
f->setAllTextures("mud.png^grass_side.png");
f->setTexture(0, "grass.png");
f->setTexture(1, "mud.png");
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_MUD)+" 1";
@ -200,9 +200,9 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_GRASS_FOOTSTEPS;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "mud.png^grass_side.png");
f->setTexture(tsrc, 0, "grass_footsteps.png");
f->setTexture(tsrc, 1, "mud.png");
f->setAllTextures("mud.png^grass_side.png");
f->setTexture(0, "grass_footsteps.png");
f->setTexture(1, "mud.png");
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_MUD)+" 1";
@ -210,8 +210,8 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_MUD;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "mud.png");
f->setInventoryTextureCube("mud.png", "mud.png", "mud.png", tsrc);
f->setAllTextures("mud.png");
f->setInventoryTextureCube("mud.png", "mud.png", "mud.png");
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
@ -219,8 +219,8 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_SAND;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "sand.png");
f->setInventoryTextureCube("sand.png", "sand.png", "sand.png", tsrc);
f->setAllTextures("sand.png");
f->setInventoryTextureCube("sand.png", "sand.png", "sand.png");
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
@ -228,8 +228,8 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_GRAVEL;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "gravel.png");
f->setInventoryTextureCube("gravel.png", "gravel.png", "gravel.png", tsrc);
f->setAllTextures("gravel.png");
f->setInventoryTextureCube("gravel.png", "gravel.png", "gravel.png");
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
@ -237,8 +237,8 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_SANDSTONE;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "sandstone.png");
f->setInventoryTextureCube("sandstone.png", "sandstone.png", "sandstone.png", tsrc);
f->setAllTextures("sandstone.png");
f->setInventoryTextureCube("sandstone.png", "sandstone.png", "sandstone.png");
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_SAND)+" 1";
@ -246,8 +246,8 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_CLAY;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "clay.png");
f->setInventoryTextureCube("clay.png", "clay.png", "clay.png", tsrc);
f->setAllTextures("clay.png");
f->setInventoryTextureCube("clay.png", "clay.png", "clay.png");
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
f->dug_item = std::string("CraftItem lump_of_clay 4");
@ -255,8 +255,8 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_BRICK;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "brick.png");
f->setInventoryTextureCube("brick.png", "brick.png", "brick.png", tsrc);
f->setAllTextures("brick.png");
f->setInventoryTextureCube("brick.png", "brick.png", "brick.png");
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
f->dug_item = std::string("CraftItem clay_brick 4");
@ -264,9 +264,9 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_TREE;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "tree.png");
f->setTexture(tsrc, 0, "tree_top.png");
f->setTexture(tsrc, 1, "tree_top.png");
f->setAllTextures("tree.png");
f->setTexture(0, "tree_top.png");
f->setTexture(1, "tree_top.png");
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
@ -274,9 +274,9 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_JUNGLETREE;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "jungletree.png");
f->setTexture(tsrc, 0, "jungletree_top.png");
f->setTexture(tsrc, 1, "jungletree_top.png");
f->setAllTextures("jungletree.png");
f->setTexture(0, "jungletree_top.png");
f->setTexture(1, "jungletree_top.png");
f->param_type = CPT_MINERAL;
//f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
@ -284,7 +284,7 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_JUNGLEGRASS;
f = nodemgr->getModifiable(i);
f->setInventoryTexture("junglegrass.png", tsrc);
f->setInventoryTexture("junglegrass.png");
f->used_texturenames.insert("junglegrass.png"); // Add to atlas
f->light_propagates = true;
f->param_type = CPT_LIGHT;
@ -305,12 +305,12 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
{
f->solidness = 0; // drawn separately, makes no faces
f->visual_solidness = 1;
f->setAllTextures(tsrc, "leaves.png");
f->setInventoryTextureCube("leaves.png", "leaves.png", "leaves.png", tsrc);
f->setAllTextures("leaves.png");
f->setInventoryTextureCube("leaves.png", "leaves.png", "leaves.png");
}
else
{
f->setAllTextures(tsrc, "[noalpha:leaves.png");
f->setAllTextures("[noalpha:leaves.png");
}
f->extra_dug_item = std::string("MaterialItem2 ")+itos(CONTENT_SAPLING)+" 1";
f->extra_dug_item_rarity = 20;
@ -319,10 +319,10 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_CACTUS;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "cactus_side.png");
f->setTexture(tsrc, 0, "cactus_top.png");
f->setTexture(tsrc, 1, "cactus_top.png");
f->setInventoryTextureCube("cactus_top.png", "cactus_side.png", "cactus_side.png", tsrc);
f->setAllTextures("cactus_side.png");
f->setTexture(0, "cactus_top.png");
f->setTexture(1, "cactus_top.png");
f->setInventoryTextureCube("cactus_top.png", "cactus_side.png", "cactus_side.png");
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
@ -330,7 +330,7 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_PAPYRUS;
f = nodemgr->getModifiable(i);
f->setInventoryTexture("papyrus.png", tsrc);
f->setInventoryTexture("papyrus.png");
f->used_texturenames.insert("papyrus.png"); // Add to atlas
f->light_propagates = true;
f->param_type = CPT_LIGHT;
@ -342,12 +342,12 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_BOOKSHELF;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "bookshelf.png");
f->setTexture(tsrc, 0, "wood.png");
f->setTexture(tsrc, 1, "wood.png");
f->setAllTextures("bookshelf.png");
f->setTexture(0, "wood.png");
f->setTexture(1, "wood.png");
// FIXME: setInventoryTextureCube() only cares for the first texture
f->setInventoryTextureCube("bookshelf.png", "bookshelf.png", "bookshelf.png", tsrc);
//f->setInventoryTextureCube("wood.png", "bookshelf.png", "bookshelf.png", tsrc);
f->setInventoryTextureCube("bookshelf.png", "bookshelf.png", "bookshelf.png");
//f->setInventoryTextureCube("wood.png", "bookshelf.png", "bookshelf.png");
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
setWoodLikeMaterialProperties(f->material, 0.75);
@ -361,8 +361,8 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->visual_solidness = 1;
f->setAllTextures(tsrc, "glass.png");
f->setInventoryTextureCube("glass.png", "glass.png", "glass.png", tsrc);
f->setAllTextures("glass.png");
f->setInventoryTextureCube("glass.png", "glass.png", "glass.png");
setGlassLikeMaterialProperties(f->material, 1.0);
i = CONTENT_FENCE;
@ -373,7 +373,7 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->solidness = 0; // drawn separately, makes no faces
f->air_equivalent = true; // grass grows underneath
f->setInventoryTexture("fence.png", tsrc);
f->setInventoryTexture("fence.png");
f->used_texturenames.insert("fence.png"); // Add to atlas
f->selection_box.type = NODEBOX_FIXED;
f->selection_box.fixed = core::aabbox3d<f32>(
@ -382,7 +382,7 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_RAIL;
f = nodemgr->getModifiable(i);
f->setInventoryTexture("rail.png", tsrc);
f->setInventoryTexture("rail.png");
f->used_texturenames.insert("rail.png"); // Add to atlas
f->light_propagates = true;
f->param_type = CPT_LIGHT;
@ -396,7 +396,7 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_LADDER;
f = nodemgr->getModifiable(i);
f->setInventoryTexture("ladder.png", tsrc);
f->setInventoryTexture("ladder.png");
f->used_texturenames.insert("ladder.png"); // Add to atlas
f->light_propagates = true;
f->param_type = CPT_LIGHT;
@ -413,30 +413,30 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
// Deprecated
i = CONTENT_COALSTONE;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "stone.png^mineral_coal.png");
f->setAllTextures("stone.png^mineral_coal.png");
f->is_ground_content = true;
setStoneLikeMaterialProperties(f->material, 1.5);
i = CONTENT_WOOD;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "wood.png");
f->setInventoryTextureCube("wood.png", "wood.png", "wood.png", tsrc);
f->setAllTextures("wood.png");
f->setInventoryTextureCube("wood.png", "wood.png", "wood.png");
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
setWoodLikeMaterialProperties(f->material, 0.75);
i = CONTENT_MESE;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "mese.png");
f->setInventoryTextureCube("mese.png", "mese.png", "mese.png", tsrc);
f->setAllTextures("mese.png");
f->setInventoryTextureCube("mese.png", "mese.png", "mese.png");
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
setStoneLikeMaterialProperties(f->material, 0.5);
i = CONTENT_CLOUD;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "cloud.png");
f->setInventoryTextureCube("cloud.png", "cloud.png", "cloud.png", tsrc);
f->setAllTextures("cloud.png");
f->setInventoryTextureCube("cloud.png", "cloud.png", "cloud.png");
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
@ -454,7 +454,7 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_WATER;
f = nodemgr->getModifiable(i);
f->setInventoryTextureCube("water.png", "water.png", "water.png", tsrc);
f->setInventoryTextureCube("water.png", "water.png", "water.png");
f->param_type = CPT_LIGHT;
f->light_propagates = true;
f->solidness = 0; // Drawn separately, makes no faces
@ -469,7 +469,7 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
f->liquid_viscosity = WATER_VISC;
#ifndef SERVER
if(!opaque_water)
f->vertex_alpha = WATER_ALPHA;
f->alpha = WATER_ALPHA;
f->post_effect_color = video::SColor(64, 100, 100, 200);
if(f->special_material == NULL && tsrc)
{
@ -496,8 +496,6 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_WATERSOURCE;
f = nodemgr->getModifiable(i);
//f->setInventoryTexture("water.png", tsrc);
f->setInventoryTextureCube("water.png", "water.png", "water.png", tsrc);
if(new_style_water)
{
f->solidness = 0; // drawn separately, makes no faces
@ -505,19 +503,11 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
else // old style
{
f->solidness = 1;
#ifndef SERVER
TileSpec t;
if(tsrc)
t.texture = tsrc->getTexture("water.png");
if(!opaque_water){
t.alpha = WATER_ALPHA;
t.material_type = MATERIAL_ALPHA_VERTEX;
}
t.material_flags &= ~MATERIAL_FLAG_BACKFACE_CULLING;
f->setAllTiles(t);
#endif
f->setAllTextures("water.png", WATER_ALPHA);
f->backface_culling = false;
}
//f->setInventoryTexture("water.png");
f->setInventoryTextureCube("water.png", "water.png", "water.png");
f->param_type = CPT_LIGHT;
f->light_propagates = true;
f->walkable = false;
@ -531,7 +521,7 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
f->liquid_viscosity = WATER_VISC;
#ifndef SERVER
if(!opaque_water)
f->vertex_alpha = WATER_ALPHA;
f->alpha = WATER_ALPHA;
f->post_effect_color = video::SColor(64, 100, 100, 200);
if(f->special_material == NULL && tsrc)
{
@ -551,7 +541,7 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_LAVA;
f = nodemgr->getModifiable(i);
f->setInventoryTextureCube("lava.png", "lava.png", "lava.png", tsrc);
f->setInventoryTextureCube("lava.png", "lava.png", "lava.png");
f->used_texturenames.insert("lava.png"); // Add to atlas
f->param_type = CPT_LIGHT;
f->light_propagates = false;
@ -595,7 +585,6 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_LAVASOURCE;
f = nodemgr->getModifiable(i);
f->setInventoryTextureCube("lava.png", "lava.png", "lava.png", tsrc);
f->used_texturenames.insert("ladder.png"); // Add to atlas
if(new_style_water)
{
@ -604,17 +593,9 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
else // old style
{
f->solidness = 2;
#ifndef SERVER
TileSpec t;
if(tsrc)
t.texture = tsrc->getTexture("lava.png");
//t.alpha = 255;
//t.material_type = MATERIAL_ALPHA_VERTEX;
//t.material_flags &= ~MATERIAL_FLAG_BACKFACE_CULLING;
f->setAllTiles(t);
#endif
f->setAllTextures("lava.png");
}
f->setInventoryTextureCube("lava.png", "lava.png", "lava.png");
f->param_type = CPT_LIGHT;
f->light_propagates = false;
f->light_source = LIGHT_MAX-1;
@ -650,7 +631,7 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_TORCH;
f = nodemgr->getModifiable(i);
f->setInventoryTexture("torch_on_floor.png", tsrc);
f->setInventoryTexture("torch_on_floor.png");
f->used_texturenames.insert("torch_on_floor.png"); // Add to atlas
f->used_texturenames.insert("torch_on_ceiling.png"); // Add to atlas
f->used_texturenames.insert("torch.png"); // Add to atlas
@ -674,7 +655,7 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_SIGN_WALL;
f = nodemgr->getModifiable(i);
f->setInventoryTexture("sign_wall.png", tsrc);
f->setInventoryTexture("sign_wall.png");
f->used_texturenames.insert("sign_wall.png"); // Add to atlas
f->param_type = CPT_LIGHT;
f->light_propagates = true;
@ -692,12 +673,12 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_CHEST;
f = nodemgr->getModifiable(i);
f->param_type = CPT_FACEDIR_SIMPLE;
f->setAllTextures(tsrc, "chest_side.png");
f->setTexture(tsrc, 0, "chest_top.png");
f->setTexture(tsrc, 1, "chest_top.png");
f->setTexture(tsrc, 5, "chest_front.png"); // Z-
f->setInventoryTexture("chest_top.png", tsrc);
//f->setInventoryTextureCube("chest_top.png", "chest_side.png", "chest_side.png", tsrc);
f->setAllTextures("chest_side.png");
f->setTexture(0, "chest_top.png");
f->setTexture(1, "chest_top.png");
f->setTexture(5, "chest_front.png"); // Z-
f->setInventoryTexture("chest_top.png");
//f->setInventoryTextureCube("chest_top.png", "chest_side.png", "chest_side.png");
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new ChestNodeMetadata(NULL);
@ -706,12 +687,12 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_LOCKABLE_CHEST;
f = nodemgr->getModifiable(i);
f->param_type = CPT_FACEDIR_SIMPLE;
f->setAllTextures(tsrc, "chest_side.png");
f->setTexture(tsrc, 0, "chest_top.png");
f->setTexture(tsrc, 1, "chest_top.png");
f->setTexture(tsrc, 5, "chest_lock.png"); // Z-
f->setInventoryTexture("chest_lock.png", tsrc);
//f->setInventoryTextureCube("chest_top.png", "chest_side.png", "chest_side.png", tsrc);
f->setAllTextures("chest_side.png");
f->setTexture(0, "chest_top.png");
f->setTexture(1, "chest_top.png");
f->setTexture(5, "chest_lock.png"); // Z-
f->setInventoryTexture("chest_lock.png");
//f->setInventoryTextureCube("chest_top.png", "chest_side.png", "chest_side.png");
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
if(f->initial_metadata == NULL)
f->initial_metadata = new LockingChestNodeMetadata(NULL);
@ -720,9 +701,9 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_FURNACE;
f = nodemgr->getModifiable(i);
f->param_type = CPT_FACEDIR_SIMPLE;
f->setAllTextures(tsrc, "furnace_side.png");
f->setTexture(tsrc, 5, "furnace_front.png"); // Z-
f->setInventoryTexture("furnace_front.png", tsrc);
f->setAllTextures("furnace_side.png");
f->setTexture(5, "furnace_front.png"); // Z-
f->setInventoryTexture("furnace_front.png");
//f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_COBBLE)+" 6";
if(f->initial_metadata == NULL)
@ -731,8 +712,8 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_COBBLE;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "cobble.png");
f->setInventoryTextureCube("cobble.png", "cobble.png", "cobble.png", tsrc);
f->setAllTextures("cobble.png");
f->setInventoryTextureCube("cobble.png", "cobble.png", "cobble.png");
f->param_type = CPT_NONE;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
@ -740,8 +721,8 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_MOSSYCOBBLE;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "mossycobble.png");
f->setInventoryTextureCube("mossycobble.png", "mossycobble.png", "mossycobble.png", tsrc);
f->setAllTextures("mossycobble.png");
f->setInventoryTextureCube("mossycobble.png", "mossycobble.png", "mossycobble.png");
f->param_type = CPT_NONE;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
@ -749,9 +730,9 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_STEEL;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "steel_block.png");
f->setAllTextures("steel_block.png");
f->setInventoryTextureCube("steel_block.png", "steel_block.png",
"steel_block.png", tsrc);
"steel_block.png");
f->param_type = CPT_NONE;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
@ -760,25 +741,25 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_NC;
f = nodemgr->getModifiable(i);
f->param_type = CPT_FACEDIR_SIMPLE;
f->setAllTextures(tsrc, "nc_side.png");
f->setTexture(tsrc, 5, "nc_front.png"); // Z-
f->setTexture(tsrc, 4, "nc_back.png"); // Z+
f->setInventoryTexture("nc_front.png", tsrc);
f->setAllTextures("nc_side.png");
f->setTexture(5, "nc_front.png"); // Z-
f->setTexture(4, "nc_back.png"); // Z+
f->setInventoryTexture("nc_front.png");
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
setStoneLikeMaterialProperties(f->material, 3.0);
i = CONTENT_NC_RB;
f = nodemgr->getModifiable(i);
f->setAllTextures(tsrc, "nc_rb.png");
f->setInventoryTexture("nc_rb.png", tsrc);
f->setAllTextures("nc_rb.png");
f->setInventoryTexture("nc_rb.png");
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
setStoneLikeMaterialProperties(f->material, 3.0);
i = CONTENT_SAPLING;
f = nodemgr->getModifiable(i);
f->param_type = CPT_LIGHT;
f->setAllTextures(tsrc, "sapling.png");
f->setInventoryTexture("sapling.png", tsrc);
f->setAllTextures("sapling.png");
f->setInventoryTexture("sapling.png");
f->used_texturenames.insert("sapling.png"); // Add to atlas
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
f->light_propagates = true;
@ -789,7 +770,7 @@ void content_mapnode_init(ITextureSource *tsrc, IWritableNodeDefManager *nodemgr
i = CONTENT_APPLE;
f = nodemgr->getModifiable(i);
f->setInventoryTexture("apple.png", tsrc);
f->setInventoryTexture("apple.png");
f->used_texturenames.insert("apple.png"); // Add to atlas
f->param_type = CPT_LIGHT;
f->light_propagates = true;

View File

@ -642,7 +642,7 @@ void the_game(
// Create texture source
IWritableTextureSource *tsrc = createTextureSource(device);
// Create node definition manager
IWritableNodeDefManager *nodedef = createNodeDefManager(tsrc);
IWritableNodeDefManager *nodedef = createNodeDefManager();
// Fill node feature table with default definitions
content_mapnode_init(tsrc, nodedef);

View File

@ -35,7 +35,7 @@ ContentFeatures::~ContentFeatures()
#endif
}
#ifndef SERVER
#if 0
void ContentFeatures::setTexture(ITextureSource *tsrc,
u16 i, std::string name, u8 alpha)
{
@ -64,7 +64,6 @@ void ContentFeatures::setInventoryTexture(std::string imgname,
imgname += "^[forcesingle";
inventory_texture_name = imgname;
inventory_texture = tsrc->getTextureRaw(imgname);
}
@ -85,49 +84,53 @@ void ContentFeatures::setInventoryTextureCube(std::string top,
imgname_full += left;
imgname_full += "{";
imgname_full += right;
inventory_texture_name = imgname_full;
inventory_texture = tsrc->getTextureRaw(imgname_full);
}
#endif
void ContentFeatures::setTexture(u16 i, std::string name)
{
used_texturenames.insert(name);
tname_tiles[i] = name;
if(tname_inventory == "")
tname_inventory = name;
}
void ContentFeatures::setInventoryTexture(std::string imgname)
{
tname_inventory = imgname + "^[forcesingle";
}
void ContentFeatures::setInventoryTextureCube(std::string top,
std::string left, std::string right)
{
str_replace_char(top, '^', '&');
str_replace_char(left, '^', '&');
str_replace_char(right, '^', '&');
std::string imgname_full;
imgname_full += "[inventorycube{";
imgname_full += top;
imgname_full += "{";
imgname_full += left;
imgname_full += "{";
imgname_full += right;
tname_inventory = imgname_full;
}
class CNodeDefManager: public IWritableNodeDefManager
{
public:
CNodeDefManager(ITextureSource *tsrc)
CNodeDefManager()
{
#ifndef SERVER
/*
Set initial material type to same in all tiles, so that the
same material can be used in more stuff.
This is set according to the leaves because they are the only
differing material to which all materials can be changed to
get this optimization.
*/
u8 initial_material_type = MATERIAL_ALPHA_SIMPLE;
/*if(new_style_leaves)
initial_material_type = MATERIAL_ALPHA_SIMPLE;
else
initial_material_type = MATERIAL_ALPHA_NONE;*/
for(u16 i=0; i<=MAX_CONTENT; i++)
{
ContentFeatures *f = &m_content_features[i];
// Re-initialize
// Reset to defaults
f->reset();
for(u16 j=0; j<6; j++)
f->tiles[j].material_type = initial_material_type;
}
#endif
/*
Initially set every block to be shown as an unknown block.
Don't touch CONTENT_IGNORE or CONTENT_AIR.
*/
for(u16 i=0; i<=MAX_CONTENT; i++)
{
if(i == CONTENT_IGNORE || i == CONTENT_AIR)
continue;
ContentFeatures *f = &m_content_features[i];
f->setAllTextures(tsrc, "unknown_block.png");
f->setAllTextures("unknown_block.png");
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
}
// Make CONTENT_IGNORE to not block the view when occlusion culling
@ -138,7 +141,7 @@ public:
}
virtual IWritableNodeDefManager* clone()
{
CNodeDefManager *mgr = new CNodeDefManager(NULL);
CNodeDefManager *mgr = new CNodeDefManager();
for(u16 i=0; i<=MAX_CONTENT; i++)
{
mgr->set(i, get(i));
@ -173,20 +176,42 @@ public:
<<"textures in node definitions"<<std::endl;
for(u16 i=0; i<=MAX_CONTENT; i++)
{
infostream<<"Updating content "<<i<<std::endl;
ContentFeatures *f = &m_content_features[i];
for(u16 j=0; j<6; j++)
tsrc->updateAP(f->tiles[j].texture);
if(f->special_atlas){
tsrc->updateAP(*(f->special_atlas));
// Inventory texture
if(f->tname_inventory != "")
f->inventory_texture = tsrc->getTextureRaw(f->tname_inventory);
else
f->inventory_texture = NULL;
// Tile textures
for(u16 j=0; j<6; j++){
if(f->tname_tiles[j] == "")
continue;
f->tiles[j].texture = tsrc->getTexture(f->tname_tiles[j]);
f->tiles[j].alpha = f->alpha;
if(f->alpha == 255)
f->tiles[j].material_type = MATERIAL_ALPHA_SIMPLE;
else
f->tiles[j].material_type = MATERIAL_ALPHA_VERTEX;
if(f->backface_culling)
f->tiles[j].material_flags |= MATERIAL_FLAG_BACKFACE_CULLING;
else
f->tiles[j].material_flags &= ~MATERIAL_FLAG_BACKFACE_CULLING;
}
// Special texture
if(f->tname_special != ""){
if(!f->special_atlas)
f->special_atlas = new AtlasPointer(
tsrc->getTexture(f->tname_special));
else
*(f->special_atlas) =
tsrc->getTexture(f->tname_special);
// Special material textures
if(f->special_material)
f->special_material->setTexture(0, f->special_atlas->atlas);
if(f->special_material2)
f->special_material2->setTexture(0, f->special_atlas->atlas);
}
if(f->inventory_texture_name != ""){
f->inventory_texture =
tsrc->getTextureRaw(f->inventory_texture_name);
}
}
#endif
}
@ -194,8 +219,8 @@ private:
ContentFeatures m_content_features[MAX_CONTENT+1];
};
IWritableNodeDefManager* createNodeDefManager(ITextureSource *tsrc)
IWritableNodeDefManager* createNodeDefManager()
{
return new CNodeDefManager(tsrc);
return new CNodeDefManager();
}

View File

@ -103,31 +103,28 @@ class NodeMetadata;
struct ContentFeatures
{
#ifndef SERVER
/*
0: up
1: down
2: right
3: left
4: back
5: front
*/
// 0 1 2 3 4 5
// up down right left back front
TileSpec tiles[6];
std::string inventory_texture_name;
video::ITexture *inventory_texture;
// Used currently for flowing liquids
u8 vertex_alpha;
// Post effect color, drawn when the camera is inside the node.
video::SColor post_effect_color;
// Special irrlicht material, used sometimes
// Special material/texture
// - Currently used for flowing liquids
video::SMaterial *special_material;
video::SMaterial *special_material2;
// Currently used for fetching liquid texture coordinates
// - This is also updated to the above two (if they are non-NULL)
// when textures are updated
AtlasPointer *special_atlas;
#endif
// Texture names
std::string tname_tiles[6];
std::string tname_inventory;
std::string tname_special;
u8 alpha;
bool backface_culling;
// List of all block textures that have been used (value is dummy)
// Used for texture atlas making.
@ -199,15 +196,22 @@ struct ContentFeatures
void reset()
{
// This isn't exactly complete due to lazyness
// TODO: Make it completely reset everything
#ifndef SERVER
inventory_texture = NULL;
vertex_alpha = 255;
post_effect_color = video::SColor(0, 0, 0, 0);
special_material = NULL;
special_material2 = NULL;
special_atlas = NULL;
#endif
for(u32 i=0; i<6; i++)
tname_tiles[i] = "";
tname_inventory = "";
tname_special = "";
alpha = 255;
backface_culling = true;
used_texturenames.clear();
param_type = CPT_NONE;
is_ground_content = false;
@ -246,47 +250,28 @@ struct ContentFeatures
Quickhands for simple materials
*/
#ifdef SERVER
void setTexture(ITextureSource *tsrc, u16 i, std::string name,
u8 alpha=255)
{}
void setAllTextures(ITextureSource *tsrc, std::string name, u8 alpha=255)
{}
#else
void setTexture(ITextureSource *tsrc,
u16 i, std::string name, u8 alpha=255);
void setTexture(u16 i, std::string name);
void setAllTextures(ITextureSource *tsrc,
std::string name, u8 alpha=255)
void setAllTextures(std::string name, u8 alpha=255)
{
for(u16 i=0; i<6; i++)
{
setTexture(tsrc, i, name, alpha);
}
setTexture(i, name);
alpha = alpha;
// Force inventory texture too
setInventoryTexture(name, tsrc);
setInventoryTexture(name);
}
#endif
void setInventoryTexture(std::string imgname);
void setInventoryTextureCube(std::string top,
std::string left, std::string right);
#if 0
#ifndef SERVER
void setTile(u16 i, const TileSpec &tile)
{ tiles[i] = tile; }
void setAllTiles(const TileSpec &tile)
{ for(u16 i=0; i<6; i++) setTile(i, tile); }
#endif
#ifdef SERVER
void setInventoryTexture(std::string imgname,
ITextureSource *tsrc)
{}
void setInventoryTextureCube(std::string top,
std::string left, std::string right, ITextureSource *tsrc)
{}
#else
void setInventoryTexture(std::string imgname, ITextureSource *tsrc);
void setInventoryTextureCube(std::string top,
std::string left, std::string right, ITextureSource *tsrc);
#endif
/*
@ -332,9 +317,7 @@ public:
virtual void updateTextures(ITextureSource *tsrc)=0;
};
// If textures not actually available (server), tsrc can be NULL
IWritableNodeDefManager* createNodeDefManager(ITextureSource *tsrc);
IWritableNodeDefManager* createNodeDefManager();
#endif

View File

@ -987,7 +987,7 @@ Server::Server(
m_banmanager(mapsavedir+DIR_DELIM+"ipban.txt"),
m_lua(NULL),
m_toolmgr(createToolDefManager()),
m_nodemgr(createNodeDefManager(NULL)),
m_nodemgr(createNodeDefManager()),
m_thread(this),
m_emergethread(this),
m_time_counter(0),

View File

@ -1087,7 +1087,7 @@ void run_tests()
DSTACK(__FUNCTION_NAME);
// Create node definitions
IWritableNodeDefManager *nodedef = createNodeDefManager(NULL);
IWritableNodeDefManager *nodedef = createNodeDefManager();
content_mapnode_init(NULL, nodedef);
infostream<<"run_tests() started"<<std::endl;