Add ability to scale HUD text (#9814)
authorLoneWolfHT <lonewolf04361@gmail.com>
Tue, 19 May 2020 17:10:39 +0000 (10:10 -0700)
committerGitHub <noreply@github.com>
Tue, 19 May 2020 17:10:39 +0000 (19:10 +0200)
Add 'size' property to HUD text elements that is used for relative font size calculations.

doc/lua_api.txt
src/client/hud.cpp

index 07758c23747732506fd52595a99bed1b0c6702db..9c7c42436eb573a6e83247ec1d22415a4dc3a671 100644 (file)
@@ -1356,6 +1356,8 @@ Displays text on the HUD.
   text. Specify `0xFFFFFF` for white text, `0xFF0000` for red, and so on.
 * `alignment`: The alignment of the text.
 * `offset`: offset in pixels from position.
+* `size`: size of the text.
+  The player-set font size is multiplied by size.x (y value isn't used).
 
 ### `statbar`
 
index f8f712762ef0ed5643685bb94dec188c0ff2c78b..4edc229b2b7af02d87ac494a5af497538cbf3e89 100644 (file)
@@ -319,16 +319,21 @@ void Hud::drawLuaElements(const v3s16 &camera_offset)
                                floor(e->pos.Y * (float) m_screensize.Y + 0.5));
                switch (e->type) {
                        case HUD_ELEM_TEXT: {
+                               irr::gui::IGUIFont *textfont = font;
+                               if (e->size.X > 0)
+                                       textfont = g_fontengine->getFont(
+                                               e->size.X * g_fontengine->getDefaultFontSize());
+
                                video::SColor color(255, (e->number >> 16) & 0xFF,
                                                                                 (e->number >> 8)  & 0xFF,
                                                                                 (e->number >> 0)  & 0xFF);
                                core::rect<s32> size(0, 0, e->scale.X, text_height * e->scale.Y);
                                std::wstring text = unescape_translate(utf8_to_wide(e->text));
-                               core::dimension2d<u32> textsize = font->getDimension(text.c_str());
+                               core::dimension2d<u32> textsize = textfont->getDimension(text.c_str());
                                v2s32 offset((e->align.X - 1.0) * (textsize.Width / 2),
                                             (e->align.Y - 1.0) * (textsize.Height / 2));
                                v2s32 offs(e->offset.X, e->offset.Y);
-                               font->draw(text.c_str(), size + pos + offset + offs, color);
+                               textfont->draw(text.c_str(), size + pos + offset + offs, color);
                                break; }
                        case HUD_ELEM_STATBAR: {
                                v2s32 offs(e->offset.X, e->offset.Y);