diff --git a/src/client/client.cpp b/src/client/client.cpp index 744c5eb90..122caa1fb 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -1776,7 +1776,6 @@ float Client::mediaReceiveProgress() } struct TextureUpdateArgs { - gui::IGUIEnvironment *guienv; u64 last_time_ms; u16 last_percent; std::wstring text_base; @@ -1802,7 +1801,7 @@ void Client::showUpdateProgressTexture(void *args, u32 progress, u32 max_progres targs->last_time_ms = time_ms; std::wostringstream strm; strm << targs->text_base << L" " << targs->last_percent << L"%..."; - m_rendering_engine->draw_load_screen(strm.str(), targs->guienv, targs->tsrc, 0, + m_rendering_engine->draw_load_screen(strm.str(), targs->tsrc, 0, 72 + (u16) ((18. / 100.) * (double) targs->last_percent)); } } @@ -1822,19 +1821,19 @@ void Client::afterContentReceived() // Rebuild inherited images and recreate textures infostream<<"- Rebuilding images and textures"<draw_load_screen(wstrgettext("Loading textures..."), - guienv, m_tsrc, 0, 70); + m_tsrc, 0, 70); m_tsrc->rebuildImagesAndTextures(); // Rebuild shaders infostream<<"- Rebuilding shaders"<draw_load_screen(wstrgettext("Rebuilding shaders..."), - guienv, m_tsrc, 0, 71); + m_tsrc, 0, 71); m_shsrc->rebuildShaders(); // Update node aliases infostream<<"- Updating node aliases"<draw_load_screen(wstrgettext("Initializing nodes..."), - guienv, m_tsrc, 0, 72); + m_tsrc, 0, 72); m_nodedef->updateAliases(m_itemdef); for (const auto &path : getTextureDirs()) { TextureOverrideSource override_source(path + DIR_DELIM + "override.txt"); @@ -1847,7 +1846,6 @@ void Client::afterContentReceived() // Update node textures and assign shaders to each tile infostream<<"- Updating node textures"<on_client_ready(m_env.getLocalPlayer()); - m_rendering_engine->draw_load_screen(wstrgettext("Done!"), guienv, m_tsrc, 0, 100); + m_rendering_engine->draw_load_screen(wstrgettext("Done!"), m_tsrc, 0, 100); infostream<<"Client::afterContentReceived() done"<get_scene_manager()->getParameters()-> setAttribute(scene::ALLOW_ZWRITE_ON_TRANSPARENT, true); - guienv = m_rendering_engine->get_gui_env(); + gui::IGUIEnvironment *guienv = m_rendering_engine->get_gui_env(); skin = guienv->getSkin(); skin->setColor(gui::EGDC_BUTTON_TEXT, video::SColor(255, 255, 255, 255)); skin->setColor(gui::EGDC_3D_LIGHT, video::SColor(0, 0, 0, 0)); diff --git a/src/client/game.cpp b/src/client/game.cpp index 8a91d352f..a9c26db2e 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -1530,7 +1530,9 @@ bool Game::createClient(const GameStartData &start_data) bool Game::initGui() { - m_game_ui->init(); + auto guienv = m_rendering_engine->get_gui_env(); + + m_game_ui->init(guienv); // Remove stale "recent" chat messages from previous connections chat_backend->clearRecentChat(); @@ -1725,11 +1727,11 @@ bool Game::getServerContent(bool *aborted) if (!client->itemdefReceived()) { progress = 25; m_rendering_engine->draw_load_screen(wstrgettext("Item definitions..."), - guienv, texture_src, dtime, progress); + texture_src, dtime, progress); } else if (!client->nodedefReceived()) { progress = 30; m_rendering_engine->draw_load_screen(wstrgettext("Node definitions..."), - guienv, texture_src, dtime, progress); + texture_src, dtime, progress); } else { std::ostringstream message; std::fixed(message); @@ -1754,7 +1756,7 @@ bool Game::getServerContent(bool *aborted) } progress = 30 + client->mediaReceiveProgress() * 35 + 0.5; - m_rendering_engine->draw_load_screen(utf8_to_wide(message.str()), guienv, + m_rendering_engine->draw_load_screen(utf8_to_wide(message.str()), texture_src, dtime, progress); } } @@ -1805,20 +1807,23 @@ inline bool Game::handleCallbacks() return false; } + auto guienv = m_rendering_engine->get_gui_env(); + auto guiroot = guienv->getRootGUIElement(); + if (g_gamecallback->changepassword_requested) { - (new GUIPasswordChange(guienv, guienv->getRootGUIElement(), -1, + (new GUIPasswordChange(guienv, guiroot, -1, &g_menumgr, client, texture_src))->drop(); g_gamecallback->changepassword_requested = false; } if (g_gamecallback->changevolume_requested) { - (new GUIVolumeChange(guienv, guienv->getRootGUIElement(), -1, + (new GUIVolumeChange(guienv, guiroot, -1, &g_menumgr, texture_src))->drop(); g_gamecallback->changevolume_requested = false; } if (g_gamecallback->keyconfig_requested) { - (new GUIKeyChangeMenu(guienv, guienv->getRootGUIElement(), -1, + (new GUIKeyChangeMenu(guienv, guiroot, -1, &g_menumgr, texture_src))->drop(); g_gamecallback->keyconfig_requested = false; } @@ -1949,6 +1954,8 @@ void Game::updateStats(RunStats *stats, const FpsControl &draw_times, void Game::processUserInput(f32 dtime) { + auto guienv = m_rendering_engine->get_gui_env(); + // Reset input if window not active or some menu is active if (!device->isWindowActive() || isMenuActive() || guienv->hasFocus(gui_chat_console)) { if(m_game_focused) { @@ -4282,7 +4289,7 @@ void FpsControl::limit(IrrlichtDevice *device, f32 *dtime) void Game::showOverlayMessage(const char *msg, float dtime, int percent, bool draw_sky) { - m_rendering_engine->draw_load_screen(wstrgettext(msg), guienv, texture_src, + m_rendering_engine->draw_load_screen(wstrgettext(msg), texture_src, dtime, percent, draw_sky); } diff --git a/src/client/gameui.cpp b/src/client/gameui.cpp index 4cc68fa10..17f4eb0c0 100644 --- a/src/client/gameui.cpp +++ b/src/client/gameui.cpp @@ -43,17 +43,12 @@ inline static const char *yawToDirectionString(int yaw) return direction[yaw]; } -GameUI::GameUI() +void GameUI::init(gui::IGUIEnvironment *guienv) { - if (guienv && guienv->getSkin()) + if (guienv->getSkin()) m_statustext_initial_color = guienv->getSkin()->getColor(gui::EGDC_BUTTON_TEXT); - else - m_statustext_initial_color = video::SColor(255, 0, 0, 0); -} -void GameUI::init() -{ - IGUIElement *guiroot = guienv->getRootGUIElement(); + gui::IGUIElement *guiroot = guienv->getRootGUIElement(); // First line of debug text m_guitext = gui::StaticText::add(guienv, utf8_to_wide(PROJECT_NAME_C).c_str(), diff --git a/src/client/gameui.h b/src/client/gameui.h index 589328a28..2856feb7d 100644 --- a/src/client/gameui.h +++ b/src/client/gameui.h @@ -49,9 +49,6 @@ class GameUI friend class TestGameUI; public: - GameUI(); - ~GameUI() = default; - // Flags that can, or may, change during main game loop struct Flags { @@ -63,7 +60,7 @@ public: bool show_profiler_graph = false; }; - void init(); + void init(gui::IGUIEnvironment *m_guienv); void update(const RunStats &stats, Client *client, MapDrawControl *draw_control, const CameraOrientation &cam, const PointedThing &pointed_old, const GUIChatConsole *chat_console, float dtime); @@ -121,7 +118,7 @@ private: gui::IGUIStaticText *m_guitext_status = nullptr; std::wstring m_statustext; float m_statustext_time = 0.0f; - video::SColor m_statustext_initial_color; + video::SColor m_statustext_initial_color = video::SColor(255, 0, 0, 0); gui::IGUIStaticText *m_guitext_chat = nullptr; // Chat text u32 m_recent_chat_count = 0; diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp index 2c3ad4403..7048f8525 100644 --- a/src/client/renderingengine.cpp +++ b/src/client/renderingengine.cpp @@ -226,9 +226,9 @@ bool RenderingEngine::setWindowIcon() Additionally, a progressbar can be drawn when percent is set between 0 and 100. */ void RenderingEngine::draw_load_screen(const std::wstring &text, - gui::IGUIEnvironment *guienv, ITextureSource *tsrc, float dtime, - int percent, bool sky) + ITextureSource *tsrc, float dtime, int percent, bool sky) { + gui::IGUIEnvironment *guienv = get_gui_env(); v2u32 screensize = getWindowSize(); v2s32 textsize(g_fontengine->getTextWidth(text), g_fontengine->getLineHeight()); diff --git a/src/client/renderingengine.h b/src/client/renderingengine.h index 22b8a3946..b5eac6da2 100644 --- a/src/client/renderingengine.h +++ b/src/client/renderingengine.h @@ -110,8 +110,7 @@ public: return m_device->getGUIEnvironment(); } - void draw_load_screen(const std::wstring &text, - gui::IGUIEnvironment *guienv, ITextureSource *tsrc, + void draw_load_screen(const std::wstring &text, ITextureSource *tsrc, float dtime = 0, int percent = 0, bool sky = true); void draw_scene(video::SColor skycolor, bool show_hud, diff --git a/src/gui/mainmenumanager.h b/src/gui/mainmenumanager.h index b86d1892a..2fba04d44 100644 --- a/src/gui/mainmenumanager.h +++ b/src/gui/mainmenumanager.h @@ -38,9 +38,6 @@ public: virtual void signalKeyConfigChange() = 0; }; -// FIXME: do we really need this global variable? -extern gui::IGUIEnvironment *guienv; - // Handler for the modal menus class MainMenuManager : public IMenuManager