Permalink
Browse files

GameUI refactor (part 1/X): GameUI object creation + GameUIFlags move…

… 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 3, 2018
1 parent 549cfd9 commit 0ebaed430ad5cd2523d78d2e2c051576e948fe13
Showing with 229 additions and 131 deletions.
  1. +4 −28 src/client.cpp
  2. +4 −8 src/client.h
  3. +1 −0 src/client/CMakeLists.txt
  4. +35 −0 src/client/gameui.cpp
  5. +60 −0 src/client/gameui.h
  6. +64 −83 src/game.cpp
  7. +0 −12 src/game.h
  8. +1 −0 src/unittest/CMakeLists.txt
  9. +60 −0 src/unittest/test_gameui.cpp
@@ -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"
@@ -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),
@@ -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
@@ -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
@@ -112,7 +112,7 @@ class PacketCounter
};

class ClientScripting;
struct GameUIFlags;
class GameUI;

class Client : public con::PeerHandler, public InventoryManager, public IGameDef
{
@@ -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();
@@ -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();

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

@@ -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
@@ -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;
}
@@ -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
};
Oops, something went wrong.

0 comments on commit 0ebaed4

Please sign in to comment.