else if(m_prop.visual == "mesh"){
infostream<<"GenericCAO::addToScene(): mesh"<<std::endl;
scene::IAnimatedMesh *mesh = smgr->getMesh(m_prop.mesh.c_str());
- m_animated_meshnode = smgr->addAnimatedMeshSceneNode(mesh, NULL);
- mesh->drop();
-
- m_animated_meshnode->setScale(v3f(m_prop.visual_size.X,
- m_prop.visual_size.Y,
- m_prop.visual_size.X));
- u8 li = m_last_light;
- setMeshColor(m_animated_meshnode->getMesh(), video::SColor(255,li,li,li));
+ if(mesh)
+ {
+ m_animated_meshnode = smgr->addAnimatedMeshSceneNode(mesh, NULL);
+
+ m_animated_meshnode->setScale(v3f(m_prop.visual_size.X,
+ m_prop.visual_size.Y,
+ m_prop.visual_size.X));
+ u8 li = m_last_light;
+ setMeshColor(m_animated_meshnode->getMesh(), video::SColor(255,li,li,li));
+ }
+ else
+ errorstream<<"GenericCAO::addToScene(): Could not load mesh "<<m_prop.mesh<<std::endl;
}
else if(m_prop.visual == "wielditem"){
infostream<<"GenericCAO::addToScene(): node"<<std::endl;
m_prop.weight = 75;
m_prop.collisionbox = core::aabbox3d<f32>(-1/3.,-1.0,-1/3., 1/3.,1.0,1/3.);
// start of default appearance, this should be overwritten by LUA
- m_prop.visual = "upright-sprite";
+ m_prop.visual = "upright_sprite";
m_prop.visual_size = v2f(1, 2);
m_prop.textures.clear();
m_prop.textures.push_back("player.png");
m_prop.textures.push_back("player_back.png");
m_prop.spritediv = v2s16(1,1);
// end of default appearance
- m_prop.is_visible = (getHP() != 0);
+ m_prop.is_visible = (getHP() != 0); // TODO: Use a death animation instead for mesh players
m_prop.makes_footstep_sound = true;
}
}
}
-
std::string PlayerSAO::getPropertyPacket()
{
m_prop.is_visible = (getHP() != 0);
weight(5),
collisionbox(-0.5,-0.5,-0.5, 0.5,0.5,0.5),
visual("sprite"),
+ mesh(""),
+ texture(""),
visual_size(1,1),
spritediv(1,1),
initial_sprite_basepos(0,0),
os<<", weight="<<weight;
os<<", collisionbox="<<PP(collisionbox.MinEdge)<<","<<PP(collisionbox.MaxEdge);
os<<", visual="<<visual;
+ os<<", mesh="<<mesh;
+ os<<", texture="<<texture;
os<<", visual_size="<<PP2(visual_size);
os<<", textures=[";
for(u32 i=0; i<textures.size(); i++){
writeV3F1000(os, collisionbox.MinEdge);
writeV3F1000(os, collisionbox.MaxEdge);
os<<serializeString(visual);
+ os<<serializeString(mesh);
+ os<<serializeString(texture);
writeV2F1000(os, visual_size);
writeU16(os, textures.size());
for(u32 i=0; i<textures.size(); i++){
collisionbox.MinEdge = readV3F1000(is);
collisionbox.MaxEdge = readV3F1000(is);
visual = deSerializeString(is);
+ mesh = deSerializeString(is);
+ texture = deSerializeString(is);
visual_size = readV2F1000(is);
textures.clear();
u32 texture_count = readU16(is);
lua_pop(L, 1);
getstringfield(L, -1, "visual", prop->visual);
+
+ getstringfield(L, -1, "mesh", prop->mesh);
+ getstringfield(L, -1, "texture", prop->texture);
lua_getfield(L, -1, "visual_size");
if(lua_istable(L, -1))