}
catch(SerializationError &e)
{
- infostream<<"WARNING: "<<__FUNCTION_NAME
+ warningstream<<FUNCTION_NAME
<<": error deSerializing itemstring \""
<<m_itemstring<<std::endl;
}
u8 li = m_last_light;
setMeshColor(m_animated_meshnode->getMesh(), video::SColor(255,li,li,li));
+ bool backface_culling = m_prop.backface_culling;
+ if (m_is_player)
+ backface_culling = false;
+
m_animated_meshnode->setMaterialFlag(video::EMF_LIGHTING, false);
m_animated_meshnode->setMaterialFlag(video::EMF_BILINEAR_FILTER, false);
m_animated_meshnode->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF);
m_animated_meshnode->setMaterialFlag(video::EMF_FOG_ENABLE, true);
+ m_animated_meshnode->setMaterialFlag(video::EMF_BACK_FACE_CULLING, backface_culling);
}
else
errorstream<<"GenericCAO::addToScene(): Could not load mesh "<<m_prop.mesh<<std::endl;
if (node && m_is_player && !m_is_local_player) {
// Add a text node for showing the name
gui::IGUIEnvironment* gui = irr->getGUIEnvironment();
- std::wstring wname = narrow_to_wide(m_name);
+ std::wstring wname = utf8_to_wide(m_name);
m_textnode = smgr->addTextSceneNode(gui->getSkin()->getFont(),
wname.c_str(), m_nametag_color, node);
m_textnode->grab();
m_textnode->setPosition(v3f(0, BS*1.1, 0));
+
+ // Enforce hiding nametag,
+ // because if freetype is enabled, a grey
+ // shadow can remain.
+ m_textnode->setVisible(m_nametag_color.getAlpha() > 0);
}
updateNodePos();
}
void GenericCAO::updateLight(u8 light_at_pos)
+{
+ // Don't update light of attached one
+ if (getParent() != NULL) {
+ return;
+ }
+
+ updateLightNoCheck(light_at_pos);
+
+ // Update light of all children
+ for (std::vector<u16>::size_type i = 0; i < m_children.size(); i++) {
+ ClientActiveObject *obj = m_env->getActiveObject(m_children[i]);
+ if (obj) {
+ obj->updateLightNoCheck(light_at_pos);
+ }
+ }
+}
+
+void GenericCAO::updateLightNoCheck(u8 light_at_pos)
{
u8 li = decode_light(light_at_pos);
- if(li != m_last_light)
- {
+ if (li != m_last_light) {
m_last_light = li;
video::SColor color(255,li,li,li);
- if(m_meshnode)
+ if (m_meshnode) {
setMeshColor(m_meshnode->getMesh(), color);
- if(m_animated_meshnode)
+ } else if (m_animated_meshnode) {
setMeshColor(m_animated_meshnode->getMesh(), color);
- if(m_wield_meshnode)
+ } else if (m_wield_meshnode) {
m_wield_meshnode->setColor(color);
- if(m_spritenode)
+ } else if (m_spritenode) {
m_spritenode->setColor(color);
+ }
}
}
os<<"GenericCAO hp="<<m_hp<<"\n";
os<<"armor={";
for(ItemGroupList::const_iterator i = m_armor_groups.begin();
- i != m_armor_groups.end(); i++)
+ i != m_armor_groups.end(); ++i)
{
os<<i->first<<"="<<i->second<<", ";
}