X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fhud.h;h=699313980ee8ab337f76689d314717d9b553c55a;hb=a1c5a011421840f4b2f9d8b6cc9b9724cf333168;hp=7a1dff3d82a46e06c98e026403ae7a4bd38b294c;hpb=7c37b1891adcddc0e7d11e5faafddaa554443318;p=oweals%2Fminetest.git diff --git a/src/hud.h b/src/hud.h index 7a1dff3d8..699313980 100644 --- a/src/hud.h +++ b/src/hud.h @@ -1,6 +1,7 @@ /* Minetest Copyright (C) 2010-2013 kwolekr, Ryan Kwolek +Copyright (C) 2017 red-001 This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -21,6 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #define HUD_HEADER #include "irrlichttypes_extrabloated.h" +#include +#include "common/c_types.h" #define HUD_DIR_LEFT_RIGHT 0 #define HUD_DIR_RIGHT_LEFT 1 @@ -31,24 +34,47 @@ with this program; if not, write to the Free Software Foundation, Inc., #define HUD_CORNER_LOWER 1 #define HUD_CORNER_CENTER 2 -class Player; +// Note that these visibility flags do not determine if the hud items are +// actually drawn, but rather, whether to draw the item should the rest +// of the game state permit it. +#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_FLAG_MINIMAP_VISIBLE (1 << 5) +#define HUD_FLAG_MINIMAP_RADAR_VISIBLE (1 << 6) + +#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 + + +#define HOTBAR_IMAGE_SIZE 48 enum HudElementType { HUD_ELEM_IMAGE = 0, HUD_ELEM_TEXT = 1, HUD_ELEM_STATBAR = 2, - HUD_ELEM_INVENTORY = 3 + HUD_ELEM_INVENTORY = 3, + HUD_ELEM_WAYPOINT = 4, }; 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_ALIGN + HUD_STAT_ALIGN, + HUD_STAT_OFFSET, + HUD_STAT_WORLD_POS, + HUD_STAT_SIZE }; struct HudElement { @@ -61,62 +87,13 @@ struct HudElement { u32 item; u32 dir; v2f align; + v2f offset; + v3f world_pos; + v2s32 size; }; - -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 - -#include - -#include "gamedef.h" -#include "inventory.h" -#include "localplayer.h" - -class Hud { -public: - video::IVideoDriver *driver; - gui::IGUIEnvironment *guienv; - gui::IGUIFont *font; - u32 text_height; - IGameDef *gamedef; - LocalPlayer *player; - Inventory *inventory; - - v2u32 screensize; - v2s32 displaycenter; - s32 hotbar_imagesize; - s32 hotbar_itemcount; - - video::SColor crosshair_argb; - video::SColor selectionbox_argb; - - Hud(video::IVideoDriver *driver, gui::IGUIEnvironment* guienv, - gui::IGUIFont *font, u32 text_height, IGameDef *gamedef, - LocalPlayer *player, Inventory *inventory); - - void drawItem(v2s32 upperleftpos, s32 imgsize, s32 itemcount, - InventoryList *mainlist, u16 selectitem, u16 direction); - void drawLuaElements(); - void drawStatbar(v2s32 pos, u16 corner, u16 drawdir, std::string texture, s32 count); - - void drawHotbar(v2s32 centerlowerpos, s32 halfheartcount, u16 playeritem); - void resizeHotbar(); - - void drawCrosshair(); - void drawSelectionBoxes(std::vector &hilightboxes); -}; - -#endif +extern const EnumString es_HudElementType[]; +extern const EnumString es_HudElementStat[]; +extern const EnumString es_HudBuiltinElement[]; #endif