Better node texture generation
authorPerttu Ahola <celeron55@gmail.com>
Tue, 15 Nov 2011 12:43:15 +0000 (14:43 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Tue, 29 Nov 2011 17:13:43 +0000 (19:13 +0200)
src/content_mapblock.cpp
src/content_mapnode.cpp
src/game.cpp
src/nodedef.cpp
src/nodedef.h
src/server.cpp
src/test.cpp

index ff6215a540abd08653fd3499ce7d4955619c34be..7ce4f2df49a18640f9885c406e5d82d7811cf747 100644 (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] =
                        {
index d9b5d6e268c9e08c6741b0d75b944a485e364c77..8a521badc72219bd06a3674277c4451bd563f5bf 100644 (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;
index a8525a04c55b2614be8bec8aa203d1e83373650a..4fd6eebb0f5b40040bd61adae615394bd62b84b2 100644 (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);
index 57807449e4247fe2925afd001a19ce7c051fd043..84b5f1d3d5dbc63911dbc0c7ea51b9649877d330 100644 (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();
 }
 
index a093cb7998527dabe9a34724041311efd75acaf8..5e4e3378ca83311fdf4230e67d2e508a26e53266 100644 (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
 
index 44c66447c3eda6a35bde5f5e283759ca59bbe10d..54c19be50535faa367cfe878e4984471d9a8adaf 100644 (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),
index e1242ccb39be9394e0c673eee4b89579b837d406..7c9fa9408abf8f5c83857f9c81663c9532ea7113 100644 (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;