Clean nodefeat and content_mapnode a bit
authorPerttu Ahola <celeron55@gmail.com>
Tue, 15 Nov 2011 20:41:49 +0000 (22:41 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Tue, 29 Nov 2011 17:13:45 +0000 (19:13 +0200)
src/content_mapnode.cpp
src/nodedef.cpp
src/nodedef.h

index e2cf57010fb2637097100ff68275fe16e336fcb6..2fce337fc190e37ac5c9182d1df3f1f4281a6b61 100644 (file)
@@ -427,7 +427,8 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr)
        i = CONTENT_WATER;
        f = nodemgr->getModifiable(i);
        f->drawtype = NDT_FLOWINGLIQUID;
-       f->setAllTextures("water.png", WATER_ALPHA);
+       f->setAllTextures("water.png");
+       f->alpha = WATER_ALPHA;
        f->setInventoryTextureCube("water.png", "water.png", "water.png");
        f->param_type = CPT_LIGHT;
        f->light_propagates = true;
@@ -440,17 +441,14 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr)
        f->liquid_alternative_source = CONTENT_WATERSOURCE;
        f->liquid_viscosity = WATER_VISC;
        f->post_effect_color = video::SColor(64, 100, 100, 200);
-       // Flowing water material
-       f->mspec_special[0].tname = "water.png";
-       f->mspec_special[0].backface_culling = false;
-       f->mspec_special[1].tname = "water.png";
-       f->mspec_special[1].backface_culling = true;
+       f->setSpecialMaterial(0, MaterialSpec("water.png", false));
+       f->setSpecialMaterial(1, MaterialSpec("water.png", true));
 
        i = CONTENT_WATERSOURCE;
        f = nodemgr->getModifiable(i);
        f->drawtype = NDT_LIQUID;
-       f->setAllTextures("water.png", WATER_ALPHA);
-       //f->setInventoryTexture("water.png");
+       f->setAllTextures("water.png");
+       f->alpha = WATER_ALPHA;
        f->setInventoryTextureCube("water.png", "water.png", "water.png");
        f->param_type = CPT_LIGHT;
        f->light_propagates = true;
@@ -465,8 +463,7 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr)
        f->liquid_viscosity = WATER_VISC;
        f->post_effect_color = video::SColor(64, 100, 100, 200);
        // New-style water source material (mostly unused)
-       f->mspec_special[0].tname = "water.png";
-       f->mspec_special[0].backface_culling = false;
+       f->setSpecialMaterial(0, MaterialSpec("water.png", false));
        
        i = CONTENT_LAVA;
        f = nodemgr->getModifiable(i);
@@ -486,11 +483,8 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr)
        f->liquid_viscosity = LAVA_VISC;
        f->damage_per_second = 4*2;
        f->post_effect_color = video::SColor(192, 255, 64, 0);
-       // Flowing lava material
-       f->mspec_special[0].tname = "lava.png";
-       f->mspec_special[0].backface_culling = false;
-       f->mspec_special[1].tname = "lava.png";
-       f->mspec_special[1].backface_culling = true;
+       f->setSpecialMaterial(0, MaterialSpec("lava.png", false));
+       f->setSpecialMaterial(1, MaterialSpec("lava.png", true));
        
        i = CONTENT_LAVASOURCE;
        f = nodemgr->getModifiable(i);
@@ -512,8 +506,7 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr)
        f->damage_per_second = 4*2;
        f->post_effect_color = video::SColor(192, 255, 64, 0);
        // New-style lava source material (mostly unused)
-       f->mspec_special[0].tname = "lava.png";
-       f->mspec_special[0].backface_culling = false;
+       f->setSpecialMaterial(0, MaterialSpec("lava.png", false));
        
        i = CONTENT_TORCH;
        f = nodemgr->getModifiable(i);
index c1aee5df4bdf21f4f2f9c4baeeda79380a3efc72..4e43369b414d071984ecb8ff2cb5f0f0e30101da 100644 (file)
@@ -27,7 +27,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "log.h"
 #include "settings.h"
 
-void NodeBox::serialize(std::ostream &os)
+/*
+       NodeBox
+*/
+
+void NodeBox::serialize(std::ostream &os) const
 {
        writeU8(os, 0); // version
        writeU8(os, type);
@@ -57,7 +61,11 @@ void NodeBox::deSerialize(std::istream &is)
        wall_side.MaxEdge = readV3F1000(is);
 }
 
-void MaterialSpec::serialize(std::ostream &os)
+/*
+       MaterialSpec
+*/
+
+void MaterialSpec::serialize(std::ostream &os) const
 {
        os<<serializeString(tname);
        writeU8(os, backface_culling);
@@ -69,6 +77,10 @@ void MaterialSpec::deSerialize(std::istream &is)
        backface_culling = readU8(is);
 }
 
+/*
+       ContentFeatures
+*/
+
 ContentFeatures::ContentFeatures()
 {
        reset();
@@ -248,6 +260,20 @@ void ContentFeatures::setTexture(u16 i, std::string name)
                tname_inventory = name;
 }
 
+void ContentFeatures::setAllTextures(std::string name)
+{
+       for(u16 i=0; i<6; i++)
+               setTexture(i, name);
+       // Force inventory texture too
+       setInventoryTexture(name);
+}
+
+void ContentFeatures::setSpecialMaterial(u16 i, const MaterialSpec &mspec)
+{
+       assert(i < CF_SPECIAL_COUNT);
+       mspec_special[i] = mspec;
+}
+
 void ContentFeatures::setInventoryTexture(std::string imgname)
 {
        tname_inventory = imgname + "^[forcesingle";
@@ -270,6 +296,10 @@ void ContentFeatures::setInventoryTextureCube(std::string top,
        tname_inventory = imgname_full;
 }
 
+/*
+       CNodeDefManager
+*/
+
 class CNodeDefManager: public IWritableNodeDefManager
 {
 public:
index b7cca52d04ff8b6920a278e437c78b17501385be..e0b7da4804620470f93b5d4db528b1b8f66a8dd8 100644 (file)
@@ -98,7 +98,7 @@ struct NodeBox
                wall_side(-BS/2, -BS/2, -BS/2, -BS/2+BS/16., BS/2, BS/2)
        {}
 
-       void serialize(std::ostream &os);
+       void serialize(std::ostream &os) const;
        void deSerialize(std::istream &is);
 };
 
@@ -115,7 +115,7 @@ struct MaterialSpec
                backface_culling(backface_culling_)
        {}
 
-       void serialize(std::ostream &os);
+       void serialize(std::ostream &os) const;
        void deSerialize(std::istream &is);
 };
 
@@ -156,9 +156,8 @@ struct ContentFeatures
        bool backface_culling;
 #endif
        
-       // List of all block textures that have been used (value is dummy)
-       // Used for texture atlas making.
-       // Exists on server too for cleaner code in content_mapnode.cpp.
+       // List of textures that are used and are wanted to be included in
+       // the texture atlas
        std::set<std::string> used_texturenames;
        
        // True if this actually contains non-default data
@@ -173,7 +172,7 @@ struct ContentFeatures
        float visual_scale; // Misc. scale parameter
        std::string tname_tiles[6];
        std::string tname_inventory;
-       MaterialSpec mspec_special[CF_SPECIAL_COUNT];
+       MaterialSpec mspec_special[CF_SPECIAL_COUNT]; // Use setter methods
        u8 alpha;
 
        // Post effect color, drawn when the camera is inside the node.
@@ -240,24 +239,19 @@ struct ContentFeatures
        void deSerialize(std::istream &is, IGameDef *gamedef);
 
        /*
-               Quickhands for simple materials
+               Texture setters.
+               
        */
        
+       // Texture setters. They also add stuff to used_texturenames.
        void setTexture(u16 i, std::string name);
-
-       void setAllTextures(std::string name, u8 alpha_=255)
-       {
-               for(u16 i=0; i<6; i++)
-                       setTexture(i, name);
-               alpha = alpha_;
-               // Force inventory texture too
-               setInventoryTexture(name);
-       }
+       void setAllTextures(std::string name);
+       void setSpecialMaterial(u16 i, const MaterialSpec &mspec);
 
        void setInventoryTexture(std::string imgname);
        void setInventoryTextureCube(std::string top,
                        std::string left, std::string right);
-
+       
        /*
                Some handy methods
        */