]> git.lizzy.rs Git - minetest.git/blobdiff - src/hud.h
Don't use msvc libs for mingw build
[minetest.git] / src / hud.h
index 7e00a94e3ead8eeab1033c7f66918eaf4f55c691..c69867a23506b7123f8d9dfcc6889666a4ec5cd7 100644 (file)
--- a/src/hud.h
+++ b/src/hud.h
@@ -21,13 +21,29 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #define HUD_HEADER
 
 #include "irrlichttypes_extrabloated.h"
+#include <string>
 
 #define HUD_DIR_LEFT_RIGHT 0
 #define HUD_DIR_RIGHT_LEFT 1
 #define HUD_DIR_TOP_BOTTOM 2
 #define HUD_DIR_BOTTOM_TOP 3
 
-class Player;
+#define HUD_CORNER_UPPER  0
+#define HUD_CORNER_LOWER  1
+#define HUD_CORNER_CENTER 2
+
+#define HUD_FLAG_HOTBAR_VISIBLE    (1 << 0)
+#define HUD_FLAG_HEALTHBAR_VISIBLE (1 << 1)
+#define HUD_FLAG_CROSSHAIR_VISIBLE (1 << 2)
+#define HUD_FLAG_WIELDITEM_VISIBLE (1 << 3)
+#define HUD_FLAG_BREATHBAR_VISIBLE (1 << 4)
+
+#define HUD_PARAM_HOTBAR_ITEMCOUNT 1
+#define HUD_PARAM_HOTBAR_IMAGE 2
+#define HUD_PARAM_HOTBAR_SELECTED_IMAGE 3
+
+#define HUD_HOTBAR_ITEMCOUNT_DEFAULT 8
+#define HUD_HOTBAR_ITEMCOUNT_MAX     23
 
 enum HudElementType {
        HUD_ELEM_IMAGE     = 0,
@@ -37,13 +53,15 @@ enum HudElementType {
 };
 
 enum HudElementStat {
-       HUD_STAT_POS,
+       HUD_STAT_POS = 0,
        HUD_STAT_NAME,
        HUD_STAT_SCALE,
        HUD_STAT_TEXT,
        HUD_STAT_NUMBER,
        HUD_STAT_ITEM,
-       HUD_STAT_DIR
+       HUD_STAT_DIR,
+       HUD_STAT_ALIGN,
+       HUD_STAT_OFFSET
 };
 
 struct HudElement {
@@ -55,27 +73,22 @@ struct HudElement {
        u32 number;
        u32 item;
        u32 dir;
+       v2f align;
+       v2f offset;
 };
 
-
-inline u32 hud_get_free_id(Player *player) {
-       size_t size = player->hud.size();
-       for (size_t i = 0; i != size; i++) {
-               if (!player->hud[i])
-                       return i;
-       }
-       return size;
-}
-
 #ifndef SERVER
 
-#include <deque>
-
+#include <vector>
 #include <IGUIFont.h>
+#include "irr_aabb3d.h"
 
-#include "gamedef.h"
-#include "inventory.h"
-#include "localplayer.h"
+class IGameDef;
+class ITextureSource;
+class Inventory;
+class InventoryList;
+class LocalPlayer;
+struct ItemStack;
 
 class Hud {
 public:
@@ -86,14 +99,19 @@ class Hud {
        IGameDef *gamedef;
        LocalPlayer *player;
        Inventory *inventory;
-       
+       ITextureSource *tsrc;
+
        v2u32 screensize;
        v2s32 displaycenter;
        s32 hotbar_imagesize;
-       s32 hotbar_itemcount;
        
        video::SColor crosshair_argb;
        video::SColor selectionbox_argb;
+       bool use_crosshair_image;
+       std::string hotbar_image;
+       bool use_hotbar_image;
+       std::string hotbar_selected_image;
+       bool use_hotbar_selected_image;
        
        Hud(video::IVideoDriver *driver, gui::IGUIEnvironment* guienv,
                gui::IGUIFont *font, u32 text_height, IGameDef *gamedef,
@@ -102,15 +120,24 @@ class Hud {
        void drawItem(v2s32 upperleftpos, s32 imgsize, s32 itemcount,
                InventoryList *mainlist, u16 selectitem, u16 direction);
        void drawLuaElements();
-       void drawStatbar(v2s32 upperleftpos, std::string texture, s32 count);
+       void drawStatbar(v2s32 pos, u16 corner, u16 drawdir,
+                                        std::string texture, s32 count, v2s32 offset);
        
-       void drawHotbar(v2s32 centerlowerpos, s32 halfheartcount, u16 playeritem);
+       void drawHotbar(v2s32 centerlowerpos, s32 halfheartcount, u16 playeritem, s32 breath);
        void resizeHotbar();
        
        void drawCrosshair();
        void drawSelectionBoxes(std::vector<aabb3f> &hilightboxes);
 };
 
+void drawItemStack(video::IVideoDriver *driver,
+               gui::IGUIFont *font,
+               const ItemStack &item,
+               const core::rect<s32> &rect,
+               const core::rect<s32> *clip,
+               IGameDef *gamedef);
+
+
 #endif
 
 #endif