Skip to content

Commit

Permalink
GameUI refactor (part 1/X): GameUI object creation + GameUIFlags move…
Browse files Browse the repository at this point in the history
… to GameUI

Game class is too huge and has too specialization on various subjects, like UI, formspecs, client, renderer. Start to move UI related things to GameUI object and cleanup them

Other improvements:
* updateChat: more performance on error messages by remove string copies
* Initialize all game class members in definition instead of constructor (with nullptr instead of NULL)
* Drop unused Client::show{GameChat,GameHud,Profiler,GameFog}
* Add GameUI unittests
  • Loading branch information
nerzhul committed Jan 5, 2018
1 parent 549cfd9 commit 0ebaed4
Show file tree
Hide file tree
Showing 9 changed files with 229 additions and 131 deletions.
32 changes: 4 additions & 28 deletions src/client.cpp
Expand Up @@ -28,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "network/networkpacket.h"
#include "threading/mutex_auto_lock.h"
#include "client/clientevent.h"
#include "client/gameui.h"
#include "client/renderingengine.h"
#include "client/tile.h"
#include "util/auth.h"
Expand Down Expand Up @@ -74,7 +75,7 @@ Client::Client(
ISoundManager *sound,
MtEventManager *event,
bool ipv6,
GameUIFlags *game_ui_flags
GameUI *game_ui
):
m_tsrc(tsrc),
m_shsrc(shsrc),
Expand All @@ -96,7 +97,7 @@ Client::Client(
m_chosen_auth_mech(AUTH_MECHANISM_NONE),
m_media_downloader(new ClientMediaDownloader()),
m_state(LC_Created),
m_game_ui_flags(game_ui_flags),
m_game_ui(game_ui),
m_modchannel_mgr(new ModChannelMgr())
{
// Add local player
Expand Down Expand Up @@ -1771,34 +1772,9 @@ void Client::pushToEventQueue(ClientEvent *event)
m_client_event_queue.push(event);
}

void Client::showGameChat(const bool show)
{
m_game_ui_flags->show_chat = show;
}

void Client::showGameHud(const bool show)
{
m_game_ui_flags->show_hud = show;
}

void Client::showMinimap(const bool show)
{
m_game_ui_flags->show_minimap = show;
}

void Client::showProfiler(const bool show)
{
m_game_ui_flags->show_profiler_graph = show;
}

void Client::showGameFog(const bool show)
{
m_game_ui_flags->force_fog_off = !show;
}

void Client::showGameDebug(const bool show)
{
m_game_ui_flags->show_debug = show;
m_game_ui->showMinimap(show);
}

// IGameDef interface
Expand Down
12 changes: 4 additions & 8 deletions src/client.h
Expand Up @@ -112,7 +112,7 @@ class PacketCounter
};

class ClientScripting;
struct GameUIFlags;
class GameUI;

class Client : public con::PeerHandler, public InventoryManager, public IGameDef
{
Expand All @@ -133,7 +133,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
ISoundManager *sound,
MtEventManager *event,
bool ipv6,
GameUIFlags *game_ui_flags
GameUI *game_ui
);

~Client();
Expand Down Expand Up @@ -400,12 +400,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef

void pushToEventQueue(ClientEvent *event);

void showGameChat(bool show = true);
void showGameHud(bool show = true);
void showMinimap(bool show = true);
void showProfiler(bool show = true);
void showGameFog(bool show = true);
void showGameDebug(bool show = true);

const Address getServerAddress();

Expand Down Expand Up @@ -570,6 +565,8 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
// own state
LocalClientState m_state;

GameUI *m_game_ui;

// Used for saving server map to disk client-side
MapDatabase *m_localdb = nullptr;
IntervalLimiter m_localdb_save_interval;
Expand All @@ -580,7 +577,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
std::unordered_map<std::string, ModMetadata *> m_mod_storages;
float m_mod_storage_save_timer = 10.0f;
std::vector<ModSpec> m_mods;
GameUIFlags *m_game_ui_flags;

bool m_shutdown = false;

Expand Down
1 change: 1 addition & 0 deletions src/client/CMakeLists.txt
Expand Up @@ -9,6 +9,7 @@ set(client_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/render/stereo.cpp
${CMAKE_CURRENT_SOURCE_DIR}/renderingengine.cpp
${CMAKE_CURRENT_SOURCE_DIR}/clientlauncher.cpp
${CMAKE_CURRENT_SOURCE_DIR}/gameui.cpp
${CMAKE_CURRENT_SOURCE_DIR}/inputhandler.cpp
${CMAKE_CURRENT_SOURCE_DIR}/tile.cpp
${CMAKE_CURRENT_SOURCE_DIR}/joystick_controller.cpp
Expand Down
35 changes: 35 additions & 0 deletions src/client/gameui.cpp
@@ -0,0 +1,35 @@
/*
Minetest
Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
Copyright (C) 2018 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
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
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

#include "gameui.h"
#include "settings.h"

void GameUI::initFlags()
{
memset(&m_flags, 0, sizeof(GameUI::Flags));
m_flags.show_chat = true;
m_flags.show_hud = true;
m_flags.show_debug = g_settings->getBool("show_debug");
}

void GameUI::showMinimap(const bool show)
{
m_flags.show_minimap = show;
}
60 changes: 60 additions & 0 deletions src/client/gameui.h
@@ -0,0 +1,60 @@
/*
Minetest
Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
Copyright (C) 2018 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
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
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

#pragma once

#include "IGUIEnvironment.h"

using namespace irr;

class GameUI
{
// Temporary between coding time to move things here
friend class Game;

public:
// 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;
};

void initFlags();
const Flags &getFlags() const { return m_flags; }

void showMinimap(const bool show);

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
};

0 comments on commit 0ebaed4

Please sign in to comment.