Clean nodefeat and content_mapnode a bit

This commit is contained in:
Perttu Ahola 2011-11-15 22:41:49 +02:00
parent 9fc78cbece
commit cde35d1606
3 changed files with 53 additions and 36 deletions

View File

@ -427,7 +427,8 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr)
i = CONTENT_WATER; i = CONTENT_WATER;
f = nodemgr->getModifiable(i); f = nodemgr->getModifiable(i);
f->drawtype = NDT_FLOWINGLIQUID; 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->setInventoryTextureCube("water.png", "water.png", "water.png");
f->param_type = CPT_LIGHT; f->param_type = CPT_LIGHT;
f->light_propagates = true; f->light_propagates = true;
@ -440,17 +441,14 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr)
f->liquid_alternative_source = CONTENT_WATERSOURCE; f->liquid_alternative_source = CONTENT_WATERSOURCE;
f->liquid_viscosity = WATER_VISC; f->liquid_viscosity = WATER_VISC;
f->post_effect_color = video::SColor(64, 100, 100, 200); f->post_effect_color = video::SColor(64, 100, 100, 200);
// Flowing water material f->setSpecialMaterial(0, MaterialSpec("water.png", false));
f->mspec_special[0].tname = "water.png"; f->setSpecialMaterial(1, MaterialSpec("water.png", true));
f->mspec_special[0].backface_culling = false;
f->mspec_special[1].tname = "water.png";
f->mspec_special[1].backface_culling = true;
i = CONTENT_WATERSOURCE; i = CONTENT_WATERSOURCE;
f = nodemgr->getModifiable(i); f = nodemgr->getModifiable(i);
f->drawtype = NDT_LIQUID; f->drawtype = NDT_LIQUID;
f->setAllTextures("water.png", WATER_ALPHA); f->setAllTextures("water.png");
//f->setInventoryTexture("water.png"); f->alpha = WATER_ALPHA;
f->setInventoryTextureCube("water.png", "water.png", "water.png"); f->setInventoryTextureCube("water.png", "water.png", "water.png");
f->param_type = CPT_LIGHT; f->param_type = CPT_LIGHT;
f->light_propagates = true; f->light_propagates = true;
@ -465,8 +463,7 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr)
f->liquid_viscosity = WATER_VISC; f->liquid_viscosity = WATER_VISC;
f->post_effect_color = video::SColor(64, 100, 100, 200); f->post_effect_color = video::SColor(64, 100, 100, 200);
// New-style water source material (mostly unused) // New-style water source material (mostly unused)
f->mspec_special[0].tname = "water.png"; f->setSpecialMaterial(0, MaterialSpec("water.png", false));
f->mspec_special[0].backface_culling = false;
i = CONTENT_LAVA; i = CONTENT_LAVA;
f = nodemgr->getModifiable(i); f = nodemgr->getModifiable(i);
@ -486,11 +483,8 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr)
f->liquid_viscosity = LAVA_VISC; f->liquid_viscosity = LAVA_VISC;
f->damage_per_second = 4*2; f->damage_per_second = 4*2;
f->post_effect_color = video::SColor(192, 255, 64, 0); f->post_effect_color = video::SColor(192, 255, 64, 0);
// Flowing lava material f->setSpecialMaterial(0, MaterialSpec("lava.png", false));
f->mspec_special[0].tname = "lava.png"; f->setSpecialMaterial(1, MaterialSpec("lava.png", true));
f->mspec_special[0].backface_culling = false;
f->mspec_special[1].tname = "lava.png";
f->mspec_special[1].backface_culling = true;
i = CONTENT_LAVASOURCE; i = CONTENT_LAVASOURCE;
f = nodemgr->getModifiable(i); f = nodemgr->getModifiable(i);
@ -512,8 +506,7 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr)
f->damage_per_second = 4*2; f->damage_per_second = 4*2;
f->post_effect_color = video::SColor(192, 255, 64, 0); f->post_effect_color = video::SColor(192, 255, 64, 0);
// New-style lava source material (mostly unused) // New-style lava source material (mostly unused)
f->mspec_special[0].tname = "lava.png"; f->setSpecialMaterial(0, MaterialSpec("lava.png", false));
f->mspec_special[0].backface_culling = false;
i = CONTENT_TORCH; i = CONTENT_TORCH;
f = nodemgr->getModifiable(i); f = nodemgr->getModifiable(i);

View File

@ -27,7 +27,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h" #include "log.h"
#include "settings.h" #include "settings.h"
void NodeBox::serialize(std::ostream &os) /*
NodeBox
*/
void NodeBox::serialize(std::ostream &os) const
{ {
writeU8(os, 0); // version writeU8(os, 0); // version
writeU8(os, type); writeU8(os, type);
@ -57,7 +61,11 @@ void NodeBox::deSerialize(std::istream &is)
wall_side.MaxEdge = readV3F1000(is); wall_side.MaxEdge = readV3F1000(is);
} }
void MaterialSpec::serialize(std::ostream &os) /*
MaterialSpec
*/
void MaterialSpec::serialize(std::ostream &os) const
{ {
os<<serializeString(tname); os<<serializeString(tname);
writeU8(os, backface_culling); writeU8(os, backface_culling);
@ -69,6 +77,10 @@ void MaterialSpec::deSerialize(std::istream &is)
backface_culling = readU8(is); backface_culling = readU8(is);
} }
/*
ContentFeatures
*/
ContentFeatures::ContentFeatures() ContentFeatures::ContentFeatures()
{ {
reset(); reset();
@ -248,6 +260,20 @@ void ContentFeatures::setTexture(u16 i, std::string name)
tname_inventory = 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) void ContentFeatures::setInventoryTexture(std::string imgname)
{ {
tname_inventory = imgname + "^[forcesingle"; tname_inventory = imgname + "^[forcesingle";
@ -270,6 +296,10 @@ void ContentFeatures::setInventoryTextureCube(std::string top,
tname_inventory = imgname_full; tname_inventory = imgname_full;
} }
/*
CNodeDefManager
*/
class CNodeDefManager: public IWritableNodeDefManager class CNodeDefManager: public IWritableNodeDefManager
{ {
public: public:

View File

@ -98,7 +98,7 @@ struct NodeBox
wall_side(-BS/2, -BS/2, -BS/2, -BS/2+BS/16., BS/2, BS/2) 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); void deSerialize(std::istream &is);
}; };
@ -115,7 +115,7 @@ struct MaterialSpec
backface_culling(backface_culling_) backface_culling(backface_culling_)
{} {}
void serialize(std::ostream &os); void serialize(std::ostream &os) const;
void deSerialize(std::istream &is); void deSerialize(std::istream &is);
}; };
@ -156,9 +156,8 @@ struct ContentFeatures
bool backface_culling; bool backface_culling;
#endif #endif
// List of all block textures that have been used (value is dummy) // List of textures that are used and are wanted to be included in
// Used for texture atlas making. // the texture atlas
// Exists on server too for cleaner code in content_mapnode.cpp.
std::set<std::string> used_texturenames; std::set<std::string> used_texturenames;
// True if this actually contains non-default data // True if this actually contains non-default data
@ -173,7 +172,7 @@ struct ContentFeatures
float visual_scale; // Misc. scale parameter float visual_scale; // Misc. scale parameter
std::string tname_tiles[6]; std::string tname_tiles[6];
std::string tname_inventory; std::string tname_inventory;
MaterialSpec mspec_special[CF_SPECIAL_COUNT]; MaterialSpec mspec_special[CF_SPECIAL_COUNT]; // Use setter methods
u8 alpha; u8 alpha;
// Post effect color, drawn when the camera is inside the node. // Post effect color, drawn when the camera is inside the node.
@ -240,24 +239,19 @@ struct ContentFeatures
void deSerialize(std::istream &is, IGameDef *gamedef); 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 setTexture(u16 i, std::string name);
void setAllTextures(std::string name);
void setAllTextures(std::string name, u8 alpha_=255) void setSpecialMaterial(u16 i, const MaterialSpec &mspec);
{
for(u16 i=0; i<6; i++)
setTexture(i, name);
alpha = alpha_;
// Force inventory texture too
setInventoryTexture(name);
}
void setInventoryTexture(std::string imgname); void setInventoryTexture(std::string imgname);
void setInventoryTextureCube(std::string top, void setInventoryTextureCube(std::string top,
std::string left, std::string right); std::string left, std::string right);
/* /*
Some handy methods Some handy methods
*/ */