mirror of
https://github.com/minetest/minetest.git
synced 2024-08-19 21:14:15 +02:00
Better node texture generation
This commit is contained in:
parent
c1202a2ecc
commit
cf6e22e9a6
@ -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] =
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
109
src/nodedef.cpp
109
src/nodedef.cpp
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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),
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user