Show game started info in server screen with icon
This commit is contained in:
parent
ca9f66a8a8
commit
8fc2bdcc3f
Binary file not shown.
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 4.3 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 3.7 KiB |
@ -17,6 +17,10 @@
|
||||
<spacer width="10"/>
|
||||
<label proportion="1" height="100%" text_align="left"
|
||||
I18N="In the server selection screen" text="Show only private server(s)"/>
|
||||
<checkbox width="fit" id="game_started" text_align="left"/>
|
||||
<spacer width="10"/>
|
||||
<label proportion="1" height="100%" text_align="left"
|
||||
I18N="In the server selection screen" text="Hide server(s) which has already begun a game"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 4.3 KiB |
@ -1187,7 +1187,7 @@ int handleCmdLine()
|
||||
NetworkConfig::get()->setIsWAN();
|
||||
NetworkConfig::get()->setIsServer(false);
|
||||
auto server = std::make_shared<Server>(0, L"", 0, 0, 0, 0, server_addr,
|
||||
!server_password.empty());
|
||||
!server_password.empty(), false);
|
||||
NetworkConfig::get()->addNetworkPlayer(
|
||||
input_manager->getDeviceManager()->getLatestUsedDevice(),
|
||||
PlayerManager::getCurrentPlayer(), PLAYER_DIFFICULTY_NORMAL);
|
||||
|
@ -956,7 +956,7 @@ void ServerLobby::checkIncomingConnectionRequests()
|
||||
const TransportAddress &addr = STKHost::get()->getPublicAddress();
|
||||
request->addParameter("address", addr.getIP() );
|
||||
request->addParameter("port", addr.getPort());
|
||||
request->addParameter("current_players", m_game_setup->getPlayerCount());
|
||||
request->addParameter("current-players", m_game_setup->getPlayerCount());
|
||||
request->queue();
|
||||
|
||||
} // checkIncomingConnectionRequests
|
||||
|
@ -60,6 +60,7 @@ Server::Server(const XMLNode& xml) : m_supports_encrytion(true)
|
||||
m_address.setPort(port);
|
||||
xml.get("private_port", &m_private_port);
|
||||
xml.get("password", &m_password_protected);
|
||||
xml.get("game_started", &m_game_started);
|
||||
xml.get("distance", &m_distance);
|
||||
m_server_owner_name = L"-";
|
||||
m_server_owner_lower_case_name = "-";
|
||||
@ -118,10 +119,12 @@ Server::Server(const XMLNode& xml) : m_supports_encrytion(true)
|
||||
* \param server_mode The game modes of server (including minor and major).
|
||||
* \param address IP and port of the server.
|
||||
* \param password_protected True if can only be joined with a password.
|
||||
* \param game_started True if there is already game begun in server.
|
||||
*/
|
||||
Server::Server(unsigned server_id, const core::stringw &name, int max_players,
|
||||
int current_players, unsigned difficulty, unsigned server_mode,
|
||||
const TransportAddress &address, bool password_protected)
|
||||
const TransportAddress &address, bool password_protected,
|
||||
bool game_started)
|
||||
: m_supports_encrytion(false)
|
||||
{
|
||||
m_name = name;
|
||||
@ -138,6 +141,7 @@ Server::Server(unsigned server_id, const core::stringw &name, int max_players,
|
||||
m_password_protected = password_protected;
|
||||
m_distance = 0.0f;
|
||||
m_official = false;
|
||||
m_game_started = game_started;
|
||||
} // server(server_id, ...)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@ -84,6 +84,8 @@ protected:
|
||||
bool m_official;
|
||||
|
||||
bool m_supports_encrytion;
|
||||
|
||||
bool m_game_started;
|
||||
public:
|
||||
|
||||
/** Initialises the object from an XML node. */
|
||||
@ -91,7 +93,7 @@ public:
|
||||
Server(unsigned server_id, const irr::core::stringw &name,
|
||||
int max_players, int current_players, unsigned difficulty,
|
||||
unsigned server_mode, const TransportAddress &address,
|
||||
bool password_protected);
|
||||
bool password_protected, bool game_started);
|
||||
bool filterByWords(const irr::core::stringw words) const;
|
||||
// ------------------------------------------------------------------------
|
||||
/** Returns ip address and port of this server. */
|
||||
@ -134,6 +136,7 @@ public:
|
||||
bool supportsEncryption() const { return m_supports_encrytion; }
|
||||
// ------------------------------------------------------------------------
|
||||
bool isOfficial() const { return m_official; }
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
bool isGameStarted() const { return m_game_started; }
|
||||
}; // Server
|
||||
#endif // HEADER_SERVER_HPP
|
||||
|
@ -193,10 +193,11 @@ Online::XMLRequest* ServersManager::getLANRefreshRequest() const
|
||||
uint8_t mode = s.getUInt8();
|
||||
sender.setPort(port);
|
||||
uint8_t password = s.getUInt8();
|
||||
uint8_t game_started = s.getUInt8();
|
||||
servers_now.insert(std::make_pair(name,
|
||||
std::make_shared<Server>(cur_server_id++, name,
|
||||
max_players, players, difficulty, mode, sender,
|
||||
password == 1)));
|
||||
password == 1, game_started == 1)));
|
||||
//all_servers.[name] = servers_now.back();
|
||||
} // if received_data
|
||||
} // while still waiting
|
||||
|
@ -1031,6 +1031,7 @@ void STKHost::handleDirectSocketRequest(Network* direct_socket,
|
||||
s.addUInt8((uint8_t)race_manager->getDifficulty());
|
||||
s.addUInt8((uint8_t)NetworkConfig::get()->getServerMode());
|
||||
s.addUInt8(!NetworkConfig::get()->getPassword().empty());
|
||||
s.addUInt8(0);
|
||||
direct_socket->sendRawPacket(s, sender);
|
||||
} // if message is server-requested
|
||||
else if (command == connection_cmd)
|
||||
|
@ -267,7 +267,7 @@ void CreateServerScreen::createServer()
|
||||
auto server = std::make_shared<Server>(0/*server_id*/, name,
|
||||
max_players, /*current_player*/0, (RaceManager::Difficulty)
|
||||
difficulty_widget->getSelection(PLAYER_ID_GAME_MASTER),
|
||||
0, server_address, !password.empty());
|
||||
0, server_address, !password.empty(), false);
|
||||
|
||||
#undef USE_GRAPHICS_SERVER
|
||||
#ifdef USE_GRAPHICS_SERVER
|
||||
|
@ -261,7 +261,7 @@ void OnlineScreen::eventCallback(Widget* widget, const std::string& name,
|
||||
NetworkConfig::get()->setIsServer(false);
|
||||
NetworkConfig::get()->setPassword("");
|
||||
auto server = std::make_shared<Server>(0, L"", 0, 0, 0, 0,
|
||||
server_addr, false);
|
||||
server_addr, false, false);
|
||||
STKHost::create();
|
||||
auto cts = std::make_shared<ConnectToServer>(server);
|
||||
cts->setup();
|
||||
|
@ -18,10 +18,13 @@
|
||||
#include "states_screens/server_selection.hpp"
|
||||
|
||||
#include "audio/sfx_manager.hpp"
|
||||
#include "graphics/irr_driver.hpp"
|
||||
#include "guiengine/CGUISpriteBank.hpp"
|
||||
#include "guiengine/widgets/check_box_widget.hpp"
|
||||
#include "guiengine/widgets/icon_button_widget.hpp"
|
||||
#include "guiengine/widgets/label_widget.hpp"
|
||||
#include "guiengine/modaldialog.hpp"
|
||||
#include "io/file_manager.hpp"
|
||||
#include "network/network_config.hpp"
|
||||
#include "network/server.hpp"
|
||||
#include "network/servers_manager.hpp"
|
||||
@ -92,6 +95,16 @@ void ServerSelection::loadedFromFile()
|
||||
m_private_server = getWidget<GUIEngine::CheckBoxWidget>("private_server");
|
||||
assert(m_private_server != NULL);
|
||||
m_private_server->setState(false);
|
||||
m_game_started = getWidget<GUIEngine::CheckBoxWidget>("game_started");
|
||||
assert(m_game_started != NULL);
|
||||
m_game_started->setState(false);
|
||||
m_icon_bank = new irr::gui::STKModifiedSpriteBank(GUIEngine::getGUIEnv());
|
||||
video::ITexture* icon1 = irr_driver->getTexture(
|
||||
file_manager->getAsset(FileManager::GUI, "green_check.png"));
|
||||
video::ITexture* icon2 = irr_driver->getTexture(
|
||||
file_manager->getAsset(FileManager::GUI, "hourglass.png"));
|
||||
m_icon_bank->addTextureAsSprite(icon1);
|
||||
m_icon_bank->addTextureAsSprite(icon2);
|
||||
} // loadedFromFile
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -120,6 +133,8 @@ void ServerSelection::beforeAddingWidget()
|
||||
void ServerSelection::init()
|
||||
{
|
||||
Screen::init();
|
||||
m_icon_bank->setScale((float)getHeight() / 20.0f / 128.0f);
|
||||
m_server_list_widget->setIcons(m_icon_bank);
|
||||
m_sort_desc = false;
|
||||
/** Triggers the loading of the server list in the servers manager. */
|
||||
refresh(true);
|
||||
@ -164,19 +179,23 @@ void ServerSelection::loadList(unsigned sort_case)
|
||||
assert(false);
|
||||
return false;
|
||||
});
|
||||
for (auto server : m_servers)
|
||||
for (auto& server : m_servers)
|
||||
{
|
||||
const int icon = server->isGameStarted() ? 1 : 0;
|
||||
core::stringw num_players;
|
||||
num_players.append(StringUtils::toWString(server->getCurrentPlayers()));
|
||||
num_players.append("/");
|
||||
num_players.append(StringUtils::toWString(server->getMaxPlayers()));
|
||||
std::vector<GUIEngine::ListWidget::ListCell> row;
|
||||
row.push_back(GUIEngine::ListWidget::ListCell(server->getName(), -1, 3));
|
||||
row.push_back(GUIEngine::ListWidget::ListCell(num_players, -1, 1, true));
|
||||
row.push_back(GUIEngine::ListWidget::ListCell(server->getName(), icon,
|
||||
3));
|
||||
row.push_back(GUIEngine::ListWidget::ListCell(num_players, -1, 1,
|
||||
true));
|
||||
|
||||
core::stringw difficulty =
|
||||
race_manager->getDifficultyName(server->getDifficulty());
|
||||
row.push_back(GUIEngine::ListWidget::ListCell(difficulty, -1, 1, true));
|
||||
row.push_back(GUIEngine::ListWidget::ListCell(difficulty, -1, 1,
|
||||
true));
|
||||
|
||||
core::stringw mode =
|
||||
NetworkConfig::get()->getModeName(server->getServerMode());
|
||||
@ -228,7 +247,7 @@ void ServerSelection::eventCallback(GUIEngine::Widget* widget,
|
||||
{
|
||||
refresh(true);
|
||||
}
|
||||
else if (name == "private_server")
|
||||
else if (name == "private_server" || name == "game_started")
|
||||
{
|
||||
copyFromServersManager();
|
||||
}
|
||||
@ -313,9 +332,23 @@ void ServerSelection::copyFromServersManager()
|
||||
if (m_servers.empty())
|
||||
return;
|
||||
m_servers.erase(std::remove_if(m_servers.begin(), m_servers.end(),
|
||||
[this](const std::shared_ptr<Server> a)->bool
|
||||
[this](const std::shared_ptr<Server>& a)->bool
|
||||
{
|
||||
return a->isPasswordProtected() != m_private_server->getState();
|
||||
}), m_servers.end());
|
||||
m_servers.erase(std::remove_if(m_servers.begin(), m_servers.end(),
|
||||
[this](const std::shared_ptr<Server>& a)->bool
|
||||
{
|
||||
if (m_game_started->getState() && a->isGameStarted())
|
||||
return true;
|
||||
return false;
|
||||
}), m_servers.end());
|
||||
loadList(/* distance */ 5);
|
||||
} // copyFromServersManager
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void ServerSelection::unloaded()
|
||||
{
|
||||
delete m_icon_bank;
|
||||
m_icon_bank = NULL;
|
||||
} // unloaded
|
||||
|
@ -32,6 +32,15 @@ namespace GUIEngine
|
||||
class LabelWidget;
|
||||
class ListWidget;
|
||||
}
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace gui
|
||||
{
|
||||
class STKModifiedSpriteBank;
|
||||
}
|
||||
}
|
||||
|
||||
class Server;
|
||||
|
||||
/**
|
||||
@ -51,9 +60,11 @@ private:
|
||||
std::vector<std::shared_ptr<Server> > m_servers;
|
||||
|
||||
GUIEngine::CheckBoxWidget* m_private_server;
|
||||
GUIEngine::CheckBoxWidget* m_game_started;
|
||||
GUIEngine::IconButtonWidget* m_reload_widget;
|
||||
GUIEngine::LabelWidget* m_update_status;
|
||||
GUIEngine::ListWidget* m_server_list_widget;
|
||||
irr::gui::STKModifiedSpriteBank* m_icon_bank;
|
||||
|
||||
/** \brief To check (and set) if sort order is descending **/
|
||||
bool m_sort_desc;
|
||||
@ -86,6 +97,8 @@ public:
|
||||
|
||||
virtual void tearDown() OVERRIDE;
|
||||
|
||||
virtual void unloaded() OVERRIDE;
|
||||
|
||||
/** \brief implement callback from parent class GUIEngine::Screen */
|
||||
virtual void onUpdate(float dt) OVERRIDE;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user