]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/hud.cpp
Fix getCraftRecipe returing wrong reciep due to way to unspecific output matching
[dragonfireclient.git] / src / hud.cpp
index 6d0fc8a8998de2bc892e3dab27523b08ceb9cedf..a74d926d7353e35f9d9af2ab16274a1d9f53d632 100644 (file)
@@ -31,18 +31,19 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "localplayer.h"
 #include "camera.h"
 #include "porting.h"
+#include "fontengine.h"
 #include <IGUIStaticText.h>
 
+#ifdef HAVE_TOUCHSCREENGUI
+#include "touchscreengui.h"
+#endif
 
 Hud::Hud(video::IVideoDriver *driver, scene::ISceneManager* smgr,
-               gui::IGUIEnvironment* guienv, gui::IGUIFont *font,
-               u32 text_height, IGameDef *gamedef,
-               LocalPlayer *player, Inventory *inventory) {
+               gui::IGUIEnvironment* guienv, IGameDef *gamedef, LocalPlayer *player,
+               Inventory *inventory) {
        this->driver      = driver;
        this->smgr        = smgr;
        this->guienv      = guienv;
-       this->font        = font;
-       this->text_height = text_height;
        this->gamedef     = gamedef;
        this->player      = player;
        this->inventory   = inventory;
@@ -50,6 +51,7 @@ Hud::Hud(video::IVideoDriver *driver, scene::ISceneManager* smgr,
        m_screensize       = v2u32(0, 0);
        m_displaycenter    = v2s32(0, 0);
        m_hotbar_imagesize = floor(HOTBAR_IMAGE_SIZE * porting::getDisplayDensity() + 0.5);
+       m_hotbar_imagesize *= g_settings->getFloat("hud_scaling");
        m_padding = m_hotbar_imagesize / 12;
 
        const video::SColor hbar_color(255, 255, 255, 255);
@@ -152,13 +154,18 @@ void Hud::drawItem(const ItemStack &item, const core::rect<s32>& rect, bool sele
                video::SColor bgcolor2(128, 0, 0, 0);
                if (!use_hotbar_image)
                        driver->draw2DRectangle(bgcolor2, rect, NULL);
-               drawItemStack(driver, font, item, rect, NULL, gamedef);
+               drawItemStack(driver, g_fontengine->getFont(), item, rect, NULL, gamedef);
        }
 
 //NOTE: selectitem = 0 -> no selected; selectitem 1-based
 void Hud::drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset,
                InventoryList *mainlist, u16 selectitem, u16 direction)
 {
+#ifdef HAVE_TOUCHSCREENGUI
+       if ( (g_touchscreengui) && (offset == 0))
+               g_touchscreengui->resetHud();
+#endif
+
        s32 height  = m_hotbar_imagesize + m_padding * 2;
        s32 width   = (itemcount - offset) * (m_hotbar_imagesize + m_padding * 2);
 
@@ -221,13 +228,20 @@ void Hud::drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset,
                }
 
                drawItem(mainlist->getItem(i), (imgrect + pos + steppos), (i +1) == selectitem );
+
+#ifdef HAVE_TOUCHSCREENGUI
+               if (g_touchscreengui)
+                       g_touchscreengui->registerHudItem(i, (imgrect + pos + steppos));
+#endif
        }
 }
 
 
 void Hud::drawLuaElements(v3s16 camera_offset) {
-       for (size_t i = 0; i != player->hud.size(); i++) {
-               HudElement *e = player->hud[i];
+       u32 text_height = g_fontengine->getTextHeight();
+       irr::gui::IGUIFont* font = g_fontengine->getFont();
+       for (size_t i = 0; i != player->maxHudId(); i++) {
+               HudElement *e = player->getHud(i);
                if (!e)
                        continue;
                
@@ -327,15 +341,15 @@ void Hud::drawStatbar(v2s32 pos, u16 corner, u16 drawdir, std::string texture,
        if (size == v2s32()) {
                dstd = srcd;
        } else {
-               dstd.Height = size.Y * g_settings->getFloat("gui_scaling") *
+               dstd.Height = size.Y * g_settings->getFloat("hud_scaling") *
                                porting::getDisplayDensity();
-               dstd.Width  = size.X * g_settings->getFloat("gui_scaling") *
+               dstd.Width  = size.X * g_settings->getFloat("hud_scaling") *
                                porting::getDisplayDensity();
 
-               offset.X *= g_settings->getFloat("gui_scaling") *
+               offset.X *= g_settings->getFloat("hud_scaling") *
                                porting::getDisplayDensity();
 
-               offset.Y *= g_settings->getFloat("gui_scaling") *
+               offset.Y *= g_settings->getFloat("hud_scaling") *
                                porting::getDisplayDensity();
        }
 
@@ -465,6 +479,7 @@ void Hud::drawSelectionBoxes(std::vector<aabb3f> &hilightboxes) {
 void Hud::resizeHotbar() {
        if (m_screensize != porting::getWindowSize()) {
                m_hotbar_imagesize = floor(HOTBAR_IMAGE_SIZE * porting::getDisplayDensity() + 0.5);
+               m_hotbar_imagesize *= g_settings->getFloat("hud_scaling");
                m_padding = m_hotbar_imagesize / 12;
                m_screensize = porting::getWindowSize();
                m_displaycenter = v2s32(m_screensize.X/2,m_screensize.Y/2);