|
@@ -79,6 +79,7 @@ Camera::Camera(MapDrawControl &draw_control, Client *client):
|
|
|
m_cache_fov = std::fmax(g_settings->getFloat("fov"), 45.0f);
|
|
|
m_arm_inertia = g_settings->getBool("arm_inertia");
|
|
|
m_nametags.clear();
|
|
|
+ m_show_nametag_backgrounds = g_settings->getBool("show_nametag_backgrounds");
|
|
|
}
|
|
|
|
|
|
Camera::~Camera()
|
|
@@ -696,18 +697,14 @@ void Camera::drawNametags()
|
|
|
v2u32 screensize = driver->getScreenSize();
|
|
|
|
|
|
for (const Nametag *nametag : m_nametags) {
|
|
|
- if (nametag->nametag_color.getAlpha() == 0) {
|
|
|
- // Enforce hiding nametag,
|
|
|
- // because if freetype is enabled, a grey
|
|
|
- // shadow can remain.
|
|
|
- continue;
|
|
|
- }
|
|
|
- v3f pos = nametag->parent_node->getAbsolutePosition() + nametag->nametag_pos * BS;
|
|
|
+ // Nametags are hidden in GenericCAO::updateNametag()
|
|
|
+
|
|
|
+ v3f pos = nametag->parent_node->getAbsolutePosition() + nametag->pos * BS;
|
|
|
f32 transformed_pos[4] = { pos.X, pos.Y, pos.Z, 1.0f };
|
|
|
trans.multiplyWith1x4Matrix(transformed_pos);
|
|
|
if (transformed_pos[3] > 0) {
|
|
|
std::wstring nametag_colorless =
|
|
|
- unescape_translate(utf8_to_wide(nametag->nametag_text));
|
|
|
+ unescape_translate(utf8_to_wide(nametag->text));
|
|
|
core::dimension2d<u32> textsize = font->getDimension(
|
|
|
nametag_colorless.c_str());
|
|
|
f32 zDiv = transformed_pos[3] == 0.0f ? 1.0f :
|
|
@@ -720,26 +717,22 @@ void Camera::drawNametags()
|
|
|
core::rect<s32> size(0, 0, textsize.Width, textsize.Height);
|
|
|
core::rect<s32> bg_size(-2, 0, textsize.Width+2, textsize.Height);
|
|
|
|
|
|
- video::SColor textColor = nametag->nametag_color;
|
|
|
-
|
|
|
- bool darkBackground = textColor.getLuminance() > 186;
|
|
|
- video::SColor backgroundColor = darkBackground
|
|
|
- ? video::SColor(50, 50, 50, 50)
|
|
|
- : video::SColor(50, 255, 255, 255);
|
|
|
- driver->draw2DRectangle(backgroundColor, bg_size + screen_pos);
|
|
|
+ auto bgcolor = nametag->getBgColor(m_show_nametag_backgrounds);
|
|
|
+ if (bgcolor.getAlpha() != 0)
|
|
|
+ driver->draw2DRectangle(bgcolor, bg_size + screen_pos);
|
|
|
|
|
|
font->draw(
|
|
|
- translate_string(utf8_to_wide(nametag->nametag_text)).c_str(),
|
|
|
- size + screen_pos, textColor);
|
|
|
+ translate_string(utf8_to_wide(nametag->text)).c_str(),
|
|
|
+ size + screen_pos, nametag->textcolor);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
Nametag *Camera::addNametag(scene::ISceneNode *parent_node,
|
|
|
- const std::string &nametag_text, video::SColor nametag_color,
|
|
|
- const v3f &pos)
|
|
|
+ const std::string &text, video::SColor textcolor,
|
|
|
+ Optional<video::SColor> bgcolor, const v3f &pos)
|
|
|
{
|
|
|
- Nametag *nametag = new Nametag(parent_node, nametag_text, nametag_color, pos);
|
|
|
+ Nametag *nametag = new Nametag(parent_node, text, textcolor, bgcolor, pos);
|
|
|
m_nametags.push_back(nametag);
|
|
|
return nametag;
|
|
|
}
|