Add install addon button in lobby for missing current track

This commit is contained in:
Benau 2020-07-29 01:30:47 +08:00
parent 82e884f3ca
commit 2e12eeaa83
3 changed files with 117 additions and 106 deletions

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: supertuxkart\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-07-19 14:21+0800\n"
"POT-Creation-Date: 2020-07-29 01:02+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -334,7 +334,7 @@ msgstr ""
#: src/states_screens/dialogs/add_device_dialog.cpp:125
#: src/states_screens/dialogs/addons_loading.cpp:213
#: src/states_screens/dialogs/press_a_key_dialog.cpp:45
#: src/states_screens/online/register_screen.cpp:132
#: src/states_screens/online/register_screen.cpp:130
#: src/states_screens/options/user_screen.cpp:128
msgid "Cancel"
msgstr ""
@ -1725,20 +1725,20 @@ msgstr ""
#. I18N: ./data/gui/screens/online/networking_lobby.stkgui
#. I18N: In networking lobby
#. I18N: In the networking lobby
#: src/states_screens/online/networking_lobby.cpp:197
#: src/states_screens/online/networking_lobby.cpp:201
msgid "Lobby"
msgstr ""
#. I18N: ./data/gui/screens/online/networking_lobby.stkgui
#. I18N: In the network lobby
#: src/states_screens/online/networking_lobby.cpp:183
#: src/states_screens/online/networking_lobby.cpp:186
msgid "Start race"
msgstr ""
#. I18N: ./data/gui/screens/online/networking_lobby.stkgui
#. I18N: In the network lobby
#. I18N: In networking lobby to configuration server settings
#: src/states_screens/online/networking_lobby.cpp:191
#: src/states_screens/online/networking_lobby.cpp:194
msgid "Configuration"
msgstr ""
@ -2737,20 +2737,20 @@ msgid ""
"created."
msgstr ""
#: src/graphics/irr_driver.cpp:631
#: src/graphics/irr_driver.cpp:613
msgid "Video recording started."
msgstr ""
#: src/graphics/irr_driver.cpp:638
#: src/graphics/irr_driver.cpp:620
#, c-format
msgid "Video saved in \"%s\"."
msgstr ""
#: src/graphics/irr_driver.cpp:642
#: src/graphics/irr_driver.cpp:624
msgid "Encoding progress:"
msgstr ""
#: src/graphics/irr_driver.cpp:1863 src/graphics/irr_driver.cpp:1868
#: src/graphics/irr_driver.cpp:1845 src/graphics/irr_driver.cpp:1850
#, c-format
msgid "FPS: %d/%d/%d - %d KTris, Ping: %dms"
msgstr ""
@ -2787,10 +2787,10 @@ msgstr ""
#: src/guiengine/widgets/player_kart_widget.cpp:758
#: src/karts/controller/local_player_controller.cpp:446
#: src/karts/controller/player_controller.cpp:413
#: src/network/protocols/client_lobby.cpp:816
#: src/network/protocols/client_lobby.cpp:817
#: src/states_screens/dialogs/splitscreen_player_dialog.cpp:121
#: src/states_screens/race_result_gui.cpp:1421
#: src/states_screens/race_result_gui.cpp:1479
#: src/states_screens/race_result_gui.cpp:1482
#, c-format
msgid "%s (handicapped)"
msgstr ""
@ -3395,12 +3395,12 @@ msgstr ""
msgid "Right trigger"
msgstr ""
#: src/input/input_manager.cpp:986
#: src/input/input_manager.cpp:985
#, c-format
msgid "Ignoring '%s'. You needed to join earlier to play!"
msgstr ""
#: src/input/input_manager.cpp:1023
#: src/input/input_manager.cpp:1022
msgid "Only the Game Master may act at this point!"
msgstr ""
@ -3456,7 +3456,7 @@ msgid "You finished the race!"
msgstr ""
#. I18N: Message shown in game to tell player left the game in network
#: src/karts/kart_rewinder.cpp:126 src/network/protocols/client_lobby.cpp:1114
#: src/karts/kart_rewinder.cpp:126 src/network/protocols/client_lobby.cpp:1115
#, c-format
msgid "%s left the game."
msgstr ""
@ -3595,12 +3595,12 @@ msgid "You were kicked: Ping too high."
msgstr ""
#: src/network/protocols/client_lobby.cpp:255
#: src/network/protocols/client_lobby.cpp:856
#: src/network/protocols/client_lobby.cpp:857
msgid "Bad network connection is detected."
msgstr ""
#: src/network/protocols/client_lobby.cpp:420
#: src/network/protocols/server_lobby.cpp:3629
#: src/network/protocols/server_lobby.cpp:3636
msgid "Bot"
msgstr ""
@ -3626,7 +3626,7 @@ msgstr ""
#. I18N: In server info dialog
#: src/network/protocols/client_lobby.cpp:688
#: src/states_screens/dialogs/server_info_dialog.cpp:84
#: src/states_screens/race_result_gui.cpp:1779
#: src/states_screens/race_result_gui.cpp:1785
#, c-format
msgid "Difficulty: %s"
msgstr ""
@ -3673,90 +3673,90 @@ msgstr ""
#. I18N: Display when all players are in red or blue team, which the race
#. will not be allowed to start
#: src/network/protocols/client_lobby.cpp:848
#: src/network/protocols/client_lobby.cpp:849
msgid "All players joined red or blue team."
msgstr ""
#. I18N: Display when a player is allow to control the server
#: src/network/protocols/client_lobby.cpp:868
#: src/network/protocols/client_lobby.cpp:869
msgid "You are now the owner of server."
msgstr ""
#: src/network/protocols/client_lobby.cpp:911
#: src/network/protocols/client_lobby.cpp:912
msgid "Connection refused: Server is busy."
msgstr ""
#: src/network/protocols/client_lobby.cpp:916
#: src/network/protocols/client_lobby.cpp:917
msgid "Connection refused: You are banned from the server."
msgstr ""
#: src/network/protocols/client_lobby.cpp:930
#: src/network/protocols/client_lobby.cpp:931
msgid "Connection refused: Server password is incorrect."
msgstr ""
#: src/network/protocols/client_lobby.cpp:934
#: src/network/protocols/client_lobby.cpp:935
msgid "Connection refused: Game data is incompatible."
msgstr ""
#: src/network/protocols/client_lobby.cpp:938
#: src/network/protocols/client_lobby.cpp:939
msgid "Connection refused: Server is full."
msgstr ""
#: src/network/protocols/client_lobby.cpp:942
#: src/network/protocols/client_lobby.cpp:943
msgid "Connection refused: Invalid player connecting."
msgstr ""
#: src/network/protocols/client_lobby.cpp:970
#: src/network/protocols/client_lobby.cpp:971
msgid "Failed to start the network game."
msgstr ""
#. I18N: Error message shown if live join or spectate failed in network
#: src/network/protocols/client_lobby.cpp:1183
#: src/network/protocols/client_lobby.cpp:1184
msgid "The game has ended, you can't live join or spectate anymore."
msgstr ""
#. I18N: Error message shown if live join failed in network
#: src/network/protocols/client_lobby.cpp:1187
#: src/network/protocols/client_lobby.cpp:1188
msgid "No remaining place in the arena - live join disabled."
msgstr ""
#. I18N: Error message shown if only 1 player remains in network
#: src/network/protocols/client_lobby.cpp:1191
#: src/network/protocols/client_lobby.cpp:1192
msgid "Only 1 player remaining, returning to lobby."
msgstr ""
#: src/network/protocols/client_lobby.cpp:1197
#: src/network/protocols/client_lobby.cpp:1198
msgid "Server owner quit the game."
msgstr ""
#. I18N: Status shown to player when he will be spectating the next game
#: src/network/protocols/client_lobby.cpp:1201
#: src/network/protocols/client_lobby.cpp:1202
msgid "You will be spectating the next game."
msgstr ""
#. I18N: Show when player join red team of the started game in
#. network
#: src/network/protocols/client_lobby.cpp:1369
#: src/network/protocols/client_lobby.cpp:1370
#, c-format
msgid "%s joined the red team."
msgstr ""
#. I18N: Show when player join blue team of the started game in
#. network
#: src/network/protocols/client_lobby.cpp:1375
#: src/network/protocols/client_lobby.cpp:1376
#, c-format
msgid "%s joined the blue team."
msgstr ""
#. I18N: Show when player join the started game in network
#: src/network/protocols/client_lobby.cpp:1381
#: src/network/protocols/client_lobby.cpp:1382
#, c-format
msgid "%s joined the game."
msgstr ""
#. I18N: Message shown in game to tell the player it's possible to change
#. the camera target in spectate mode of network
#: src/network/protocols/client_lobby.cpp:1536
#: src/network/protocols/client_lobby.cpp:1537
#, c-format
msgid ""
"Press <%s> or <%s> to change the targeted player, <%s> or <%s> for the "
@ -3764,7 +3764,7 @@ msgid ""
msgstr ""
#. I18N: Tell player he has successfully report this named player
#: src/network/protocols/client_lobby.cpp:1552
#: src/network/protocols/client_lobby.cpp:1553
#, c-format
msgid "Successfully reported %s."
msgstr ""
@ -3964,8 +3964,8 @@ msgstr ""
#: src/states_screens/arenas_screen.cpp:326
#: src/states_screens/easter_egg_screen.cpp:225
#: src/states_screens/easter_egg_screen.cpp:256
#: src/states_screens/kart_selection.cpp:935
#: src/states_screens/kart_selection.cpp:1576
#: src/states_screens/kart_selection.cpp:936
#: src/states_screens/kart_selection.cpp:1577
#: src/states_screens/race_setup_screen.cpp:100
msgid "Locked : solve active challenges to gain access to more!"
msgstr ""
@ -4398,12 +4398,12 @@ msgid "Current password invalid."
msgstr ""
#: src/states_screens/dialogs/change_password_dialog.cpp:141
#: src/states_screens/online/register_screen.cpp:324
#: src/states_screens/online/register_screen.cpp:322
msgid "Password has to be between 8 and 30 characters long!"
msgstr ""
#: src/states_screens/dialogs/change_password_dialog.cpp:148
#: src/states_screens/online/register_screen.cpp:308
#: src/states_screens/online/register_screen.cpp:306
msgid "Passwords don't match!"
msgstr ""
@ -4413,7 +4413,7 @@ msgstr ""
#: src/states_screens/dialogs/change_password_dialog.cpp:236
#: src/states_screens/dialogs/recovery_dialog.cpp:207
#: src/states_screens/online/register_screen.cpp:389
#: src/states_screens/online/register_screen.cpp:387
msgid "Validating info"
msgstr ""
@ -4609,8 +4609,8 @@ msgid "Press any key..."
msgstr ""
#: src/states_screens/dialogs/race_paused_dialog.cpp:115
#: src/states_screens/online/networking_lobby.cpp:240
#: src/states_screens/online/networking_lobby.cpp:825
#: src/states_screens/online/networking_lobby.cpp:244
#: src/states_screens/online/networking_lobby.cpp:832
msgid "Chat is disabled, enable in options menu."
msgstr ""
@ -4652,7 +4652,7 @@ msgstr ""
#. I18N: In the Select challenge dialog
#: src/states_screens/dialogs/select_challenge.cpp:72
#: src/states_screens/race_result_gui.cpp:1769
#: src/states_screens/race_result_gui.cpp:1775
#, c-format
msgid "Laps: %i"
msgstr ""
@ -4964,17 +4964,17 @@ msgstr ""
msgid "Connect a keyboard or gamepad to play splitscreen multiplayer"
msgstr ""
#: src/states_screens/kart_selection.cpp:911
#: src/states_screens/kart_selection.cpp:1594
#: src/states_screens/kart_selection.cpp:912
#: src/states_screens/kart_selection.cpp:1595
msgid "Random Kart"
msgstr ""
#: src/states_screens/kart_selection.cpp:930
#: src/states_screens/kart_selection.cpp:931
msgid "Locked"
msgstr ""
#: src/states_screens/kart_selection.cpp:1031
#: src/states_screens/online/networking_lobby.cpp:514
#: src/states_screens/kart_selection.cpp:1032
#: src/states_screens/online/networking_lobby.cpp:515
msgid ""
"Everyone:\n"
"Press the 'Select' button to join the game"
@ -5036,23 +5036,27 @@ msgstr ""
#. I18N: In the networking lobby, ready button is to allow player to tell
#. server that he is ready for next game for owner less server
#: src/states_screens/online/networking_lobby.cpp:186
#: src/states_screens/online/networking_lobby.cpp:189
msgid "Ready"
msgstr ""
#. I18N: Live join is displayed in networking lobby to allow players
#. to join the current started in-progress game
#: src/states_screens/online/networking_lobby.cpp:189
#: src/states_screens/online/networking_lobby.cpp:192
msgid "Live join"
msgstr ""
#. I18N: Spectate is displayed in networking lobby to allow players
#. to join the current started in-progress game
#: src/states_screens/online/networking_lobby.cpp:194
#: src/states_screens/online/networking_lobby.cpp:197
msgid "Spectate"
msgstr ""
#: src/states_screens/online/networking_lobby.cpp:332
#: src/states_screens/online/networking_lobby.cpp:198
msgid "Install addon"
msgstr ""
#: src/states_screens/online/networking_lobby.cpp:337
#, c-format
msgid "Lobby (ping: %dms)"
msgstr ""
@ -5060,7 +5064,7 @@ msgstr ""
#. I18N: In the networking lobby, show when player is required to
#. wait before the current game finish with remaining time,
#. showing the current track name inside bracket
#: src/states_screens/online/networking_lobby.cpp:378
#: src/states_screens/online/networking_lobby.cpp:383
#, c-format
msgid ""
"Please wait for the current game's (%s) end, estimated remaining time: %s."
@ -5068,7 +5072,7 @@ msgstr ""
#. I18N: In the networking lobby, show when player is required
#. to wait before the current game finish with remaining time
#: src/states_screens/online/networking_lobby.cpp:386
#: src/states_screens/online/networking_lobby.cpp:391
#, c-format
msgid "Please wait for the current game's end, estimated remaining time: %s."
msgstr ""
@ -5076,31 +5080,24 @@ msgstr ""
#. I18N: In the networking lobby, show when player is required
#. to wait before the current game finish with progress in
#. percent, showing the current track name inside bracket
#: src/states_screens/online/networking_lobby.cpp:398
#: src/states_screens/online/networking_lobby.cpp:403
msgid "Please wait for the current game's (%s) end, estimated progress: %s%."
msgstr ""
#. I18N: In the networking lobby, show when player is required
#. to wait before the current game finish with progress in
#. percent
#: src/states_screens/online/networking_lobby.cpp:407
#: src/states_screens/online/networking_lobby.cpp:412
msgid "Please wait for the current game's end, estimated progress: %d%."
msgstr ""
#. I18N: In the networking lobby, show when player is required to
#. wait before the current game finish
#: src/states_screens/online/networking_lobby.cpp:415
#: src/states_screens/online/networking_lobby.cpp:420
msgid "Please wait for the current game's end."
msgstr ""
#. I18N: In the networking lobby,
#. tell user the command to install addon now
#: src/states_screens/online/networking_lobby.cpp:429
#, c-format
msgid "Send %s in chat box to install addon now."
msgstr ""
#: src/states_screens/online/networking_lobby.cpp:483
#: src/states_screens/online/networking_lobby.cpp:484
#, c-format
msgid "Game will start if there is more than %d player."
msgid_plural "Game will start if there are more than %d players."
@ -5109,7 +5106,7 @@ msgstr[1] ""
#. I18N: In the networking lobby, display the starting timeout
#. for owner-less server to begin a game
#: src/states_screens/online/networking_lobby.cpp:497
#: src/states_screens/online/networking_lobby.cpp:498
#, c-format
msgid ""
"Starting after %d second, or once everyone has pressed the 'Ready' button."
@ -5118,12 +5115,12 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
#: src/states_screens/online/networking_lobby.cpp:534
#: src/states_screens/online/networking_lobby.cpp:535
#, c-format
msgid "Connecting to server %s"
msgstr ""
#: src/states_screens/online/networking_lobby.cpp:539
#: src/states_screens/online/networking_lobby.cpp:540
msgid "Finding a quick play server"
msgstr ""
@ -5201,48 +5198,48 @@ msgstr ""
msgid "Searching"
msgstr ""
#: src/states_screens/online/register_screen.cpp:133
#: src/states_screens/online/register_screen.cpp:131
#: src/states_screens/options/user_screen.cpp:127
msgid "Exit game"
msgstr ""
#: src/states_screens/online/register_screen.cpp:246
#: src/states_screens/online/register_screen.cpp:253
#: src/states_screens/online/register_screen.cpp:244
#: src/states_screens/online/register_screen.cpp:251
#, c-format
msgid "Could not create player '%s'."
msgstr ""
#: src/states_screens/online/register_screen.cpp:270
#: src/states_screens/online/register_screen.cpp:268
msgid "User name cannot be empty."
msgstr ""
#: src/states_screens/online/register_screen.cpp:312
#: src/states_screens/online/register_screen.cpp:310
msgid "Emails don't match!"
msgstr ""
#: src/states_screens/online/register_screen.cpp:316
#: src/states_screens/online/register_screen.cpp:314
msgid "Online username has to be between 3 and 30 characters long!"
msgstr ""
#: src/states_screens/online/register_screen.cpp:320
#: src/states_screens/online/register_screen.cpp:318
msgid "Online username must not start with a number!"
msgstr ""
#: src/states_screens/online/register_screen.cpp:328
#: src/states_screens/online/register_screen.cpp:326
msgid "Email has to be between 5 and 254 characters long!"
msgstr ""
#: src/states_screens/online/register_screen.cpp:334
#: src/states_screens/online/register_screen.cpp:332
msgid "Email is invalid!"
msgstr ""
#: src/states_screens/online/register_screen.cpp:397
#: src/states_screens/online/register_screen.cpp:395
msgid ""
"You will receive an email with further instructions regarding account "
"activation. Please be patient and be sure to check your spam folder."
msgstr ""
#: src/states_screens/online/register_screen.cpp:436
#: src/states_screens/online/register_screen.cpp:434
msgid "Internet access is disabled, please enable it in the options"
msgstr ""
@ -5851,30 +5848,30 @@ msgstr ""
#. I18N: indicates a player that scored in their own goal in result screen
#: src/states_screens/race_result_gui.cpp:1427
#: src/states_screens/race_result_gui.cpp:1485
#: src/states_screens/race_result_gui.cpp:1488
msgid "(Own Goal)"
msgstr ""
#: src/states_screens/race_result_gui.cpp:1560
#: src/states_screens/race_result_gui.cpp:1566
#, c-format
msgid "Track %i/%i"
msgstr ""
#: src/states_screens/race_result_gui.cpp:1644
#: src/states_screens/race_result_gui.cpp:1650
msgid "Grand Prix progress:"
msgstr ""
#: src/states_screens/race_result_gui.cpp:1690
#: src/states_screens/race_result_gui.cpp:1696
msgid "Highscores"
msgstr ""
#: src/states_screens/race_result_gui.cpp:1793
#: src/states_screens/race_result_gui.cpp:1799
#, c-format
msgid "Best lap time: %s"
msgstr ""
#. I18N: is used to indicate who has the bast laptime (best laptime "by kart_name")
#: src/states_screens/race_result_gui.cpp:1807
#: src/states_screens/race_result_gui.cpp:1813
#, c-format
msgid "by %s"
msgstr ""

View File

@ -48,6 +48,7 @@
#include "network/server.hpp"
#include "network/stk_host.hpp"
#include "network/network_timer_synchronizer.hpp"
#include "states_screens/dialogs/addons_pack.hpp"
#include "states_screens/dialogs/splitscreen_player_dialog.hpp"
#include "states_screens/dialogs/network_player_dialog.hpp"
#include "states_screens/dialogs/server_configuration_dialog.hpp"
@ -85,7 +86,7 @@ NetworkingLobby::NetworkingLobby() : Screen("online/networking_lobby.stkgui")
m_send_button = NULL;
m_icon_bank = NULL;
m_reload_server_info = false;
m_displayed_addon_install_cmd = false;
m_addon_install = NULL;
// Allows one to update chat and counter even if dialog window is opened
setUpdateInBackground(true);
@ -139,6 +140,8 @@ void NetworkingLobby::loadedFromFile()
(file_manager->getAsset(FileManager::GUI_ICON, "screen_other.png"));
video::ITexture* icon_6 = irr_driver->getTexture
(file_manager->getAsset(FileManager::GUI_ICON, "robot.png"));
m_addon_texture = irr_driver->getTexture
(file_manager->getAsset(FileManager::GUI_ICON, "package-update.png"));
m_icon_bank->addTextureAsSprite(icon_1);
m_icon_bank->addTextureAsSprite(icon_2);
m_icon_bank->addTextureAsSprite(icon_3);
@ -173,7 +176,7 @@ void NetworkingLobby::init()
m_allow_change_team = false;
m_has_auto_start_in_server = false;
m_client_live_joinable = false;
m_displayed_addon_install_cmd = false;
m_addon_install = NULL;
m_ping_update_timer = 0;
m_start_timeout = std::numeric_limits<float>::max();
m_cur_starting_timer = std::numeric_limits<int64_t>::max();
@ -192,6 +195,7 @@ void NetworkingLobby::init()
//I18N: Spectate is displayed in networking lobby to allow players
//to join the current started in-progress game
m_spectate_text = _("Spectate");
m_install_addon_text = _("Install addon");
//I18N: In the networking lobby
m_header->setText(_("Lobby"), false);
@ -297,6 +301,7 @@ void NetworkingLobby::updateServerInfos()
// ----------------------------------------------------------------------------
void NetworkingLobby::onUpdate(float delta)
{
m_addon_install = NULL;
if (NetworkConfig::get()->isServer() || !STKHost::existHost())
return;
@ -415,22 +420,6 @@ void NetworkingLobby::onUpdate(float delta)
msg = _("Please wait for the current game's end.");
}
#ifndef SERVER_ONLY
Addon* addon = addons_manager->getAddon(
Addon::createAddonId(missing_addon_track_id));
if (addon &&
!m_displayed_addon_install_cmd)
{
m_displayed_addon_install_cmd = true;
core::stringw cmd = L"/installaddon ";
cmd += missing_addon_track_id.c_str();
//I18N: In the networking lobby,
//tell user the command to install addon now
core::stringw info = _("Send %s in chat box to install addon now.", cmd);
addMoreServerInfo(info);
}
#endif
// You can live join or spectator if u have the current play track
// and network timer is synchronized, and no game protocols exist
bool no_gep = !RaceEventManager::get() ||
@ -447,6 +436,21 @@ void NetworkingLobby::onUpdate(float delta)
m_timeout_message->setText(msg, false);
m_cur_starting_timer = std::numeric_limits<int64_t>::max();
#ifndef SERVER_ONLY
if (!GUIEngine::ModalDialog::isADialogActive() &&
!ScreenKeyboard::isActive())
{
m_addon_install = addons_manager->getAddon(
Addon::createAddonId(missing_addon_track_id));
if (m_addon_install)
{
m_config_button->setLabel(m_install_addon_text);
m_config_button->setImage(m_addon_texture);
m_config_button->setVisible(true);
return;
}
}
#endif
if (m_client_live_joinable)
{
@ -674,6 +678,13 @@ void NetworkingLobby::eventCallback(Widget* widget, const std::string& name,
}
else if (name == m_config_button->m_properties[PROP_ID])
{
#ifndef SERVER_ONLY
if (m_addon_install)
{
AddonsPack::install(m_addon_install->getDirName());
return;
}
#endif
auto cl = LobbyProtocol::get<ClientLobby>();
if (m_client_live_joinable && cl)
{

View File

@ -25,6 +25,7 @@
#include <memory>
#include <utility>
class Addon;
class InputDevice;
class Server;
enum KartTeam : int8_t;
@ -74,7 +75,7 @@ private:
int m_server_info_height;
core::stringw m_start_text, m_ready_text, m_live_join_text,
m_configuration_text, m_spectate_text;
m_configuration_text, m_spectate_text, m_install_addon_text;
float m_start_timeout;
int64_t m_cur_starting_timer;
@ -82,10 +83,12 @@ private:
bool m_allow_change_team, m_has_auto_start_in_server,
m_server_configurable, m_client_live_joinable,
m_reload_server_info, m_displayed_addon_install_cmd;
m_reload_server_info;
Addon* m_addon_install;
video::ITexture* m_config_texture;
video::ITexture* m_spectate_texture;
video::ITexture* m_addon_texture;
GUIEngine::IconButtonWidget* m_back_widget;
GUIEngine::LabelWidget* m_header;