X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclient%2Fgameui.h;h=cb460b1c38adc116dd800a3477a2841346b5ad14;hb=a049e8267fabd101cb5c6528b3270214cb0647f0;hp=bd9c0f626d64d5f7a9ea123d16cad687820cea2a;hpb=0ebaed430ad5cd2523d78d2e2c051576e948fe13;p=dragonfireclient.git diff --git a/src/client/gameui.h b/src/client/gameui.h index bd9c0f626..cb460b1c3 100644 --- a/src/client/gameui.h +++ b/src/client/gameui.h @@ -20,41 +20,115 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#include "IGUIEnvironment.h" +#include "irrlichttypes.h" +#include +#include "gui/guiFormSpecMenu.h" +#include "util/enriched_string.h" +#include "util/pointedthing.h" +#include "game.h" using namespace irr; +class Client; +class GUIChatConsole; +struct MapDrawControl; +/* + * This object intend to contain the core UI elements + * It includes: + * - status texts + * - debug texts + * - chat texts + * - hud flags + */ class GameUI { // Temporary between coding time to move things here friend class Game; + // Permit unittests to access members directly + friend class TestGameUI; + public: + GameUI(); + ~GameUI() = default; + // Flags that can, or may, change during main game loop struct Flags { - bool show_chat; - bool show_hud; - bool show_minimap; - bool force_fog_off; - bool show_debug; - bool show_profiler_graph; - bool disable_camera_update; + bool show_chat = true; + bool show_hud = true; + bool show_minimap = false; + bool show_minimal_debug = false; + bool show_basic_debug = false; + bool show_profiler_graph = false; }; + void init(); + void update(const RunStats &stats, Client *client, MapDrawControl *draw_control, + const CameraOrientation &cam, const PointedThing &pointed_old, + const GUIChatConsole *chat_console, float dtime); + void initFlags(); const Flags &getFlags() const { return m_flags; } - void showMinimap(const bool show); + void showMinimap(bool show); + + inline void setInfoText(const std::wstring &str) { m_infotext = str; } + inline void clearInfoText() { m_infotext.clear(); } + + inline void showStatusText(const std::wstring &str) + { + m_statustext = str; + m_statustext_time = 0.0f; + } + void showTranslatedStatusText(const char *str); + inline void clearStatusText() { m_statustext.clear(); } + + const bool isChatVisible() + { + return m_flags.show_chat && m_recent_chat_count != 0 && m_profiler_current_page == 0; + } + void setChatText(const EnrichedString &chat_text, u32 recent_chat_count); + + void updateProfiler(); + + void toggleChat(); + void toggleHud(); + void toggleProfiler(); + + GUIFormSpecMenu *&updateFormspec(const std::string &formname) + { + m_formname = formname; + return m_formspec; + } + + const std::string &getFormspecName() { return m_formname; } + GUIFormSpecMenu *&getFormspecGUI() { return m_formspec; } + void deleteFormspec(); private: Flags m_flags; - // @TODO future move - // gui::IGUIStaticText *m_guitext; // First line of debug text - // gui::IGUIStaticText *m_guitext2; // Second line of debug text - // gui::IGUIStaticText *m_guitext_info; // At the middle of the screen - // gui::IGUIStaticText *m_guitext_status; - // gui::IGUIStaticText *m_guitext_chat; // Chat text - // gui::IGUIStaticText *m_guitext_profiler; // Profiler text + gui::IGUIStaticText *m_guitext = nullptr; // First line of debug text + gui::IGUIStaticText *m_guitext2 = nullptr; // Second line of debug text + + gui::IGUIStaticText *m_guitext_info = nullptr; // At the middle of the screen + std::wstring m_infotext; + + gui::IGUIStaticText *m_guitext_status = nullptr; + std::wstring m_statustext; + float m_statustext_time = 0.0f; + video::SColor m_statustext_initial_color; + + gui::IGUIStaticText *m_guitext_chat = nullptr; // Chat text + u32 m_recent_chat_count = 0; + + gui::IGUIStaticText *m_guitext_profiler = nullptr; // Profiler text + u8 m_profiler_current_page = 0; + const u8 m_profiler_max_page = 3; + + // Default: "". If other than "": Empty show_formspec packets will only + // close the formspec when the formname matches + std::string m_formname; + GUIFormSpecMenu *m_formspec = nullptr; };