diff --git a/src/network/server.cpp b/src/network/server.cpp index 6cbbea9f9..903226c7e 100644 --- a/src/network/server.cpp +++ b/src/network/server.cpp @@ -38,6 +38,7 @@ Server::Server(const XMLNode& xml) m_server_id = 0; m_current_players = 0; m_max_players = 0; + m_distance = 0.0f; unsigned server_data = 0; xml.get("game_mode", &server_data); m_minor_mode = NetworkConfig::get()->getLocalGameMode(server_data).first; @@ -61,6 +62,7 @@ Server::Server(const XMLNode& xml) m_address.setPort(port); xml.get("private_port", &m_private_port); xml.get("password", &m_password_protected); + xml.get("distance", &m_distance); m_server_owner_name = "-"; // Display server owner name if he's your friend or localhost @@ -122,6 +124,7 @@ Server::Server(unsigned server_id, const core::stringw &name, int max_players, m_minor_mode = NetworkConfig::get()->getLocalGameMode(server_mode).first; m_major_mode = NetworkConfig::get()->getLocalGameMode(server_mode).second; m_password_protected = password_protected; + m_distance = 0.0f; } // server(server_id, ...) // ---------------------------------------------------------------------------- diff --git a/src/network/server.hpp b/src/network/server.hpp index b4f113b7c..a4023708d 100644 --- a/src/network/server.hpp +++ b/src/network/server.hpp @@ -80,6 +80,8 @@ protected: * for localhost or if you are friend with the server owner. */ std::string m_server_owner_name; + /* WAN server only, distance based on IP latitude and longitude. */ + float m_distance; public: /** Initialises the object from an XML node. */ @@ -125,6 +127,8 @@ public: // ------------------------------------------------------------------------ const std::string& getServerOwnerName() const { return m_server_owner_name; } + // ------------------------------------------------------------------------ + float getDistance() const { return m_distance; } }; // Server #endif // HEADER_SERVER_HPP diff --git a/src/states_screens/server_selection.cpp b/src/states_screens/server_selection.cpp index c1dbad69a..8410a81bd 100644 --- a/src/states_screens/server_selection.cpp +++ b/src/states_screens/server_selection.cpp @@ -103,7 +103,11 @@ void ServerSelection::beforeAddingWidget() m_server_list_widget->addColumn(_("Difficulty"), 1); m_server_list_widget->addColumn(_("Game mode"), 1); if (NetworkConfig::get()->isWAN()) + { m_server_list_widget->addColumn(_("Server owner"), 1); + // I18N: In server selection screen, distance to server + m_server_list_widget->addColumn(_("Distance"), 1); + } } // beforeAddingWidget // ---------------------------------------------------------------------------- @@ -148,6 +152,9 @@ void ServerSelection::loadList(unsigned sort_case) case 4: return c->getServerOwnerName() > d->getServerOwnerName(); break; + case 5: + return c->getDistance() > d->getDistance(); + break; } // switch assert(false); return false; @@ -173,6 +180,12 @@ void ServerSelection::loadList(unsigned sort_case) { row.push_back(GUIEngine::ListWidget::ListCell(StringUtils:: utf8ToWide(server->getServerOwnerName()), -1, 1, true)); + // I18N: In server selection screen, unknown distance to server + core::stringw distance = _("Unknown"); + if (!(server->getDistance() < 0.0f)) + distance = StringUtils::toWString(server->getDistance()); + row.push_back(GUIEngine::ListWidget::ListCell(distance, -1, 1, + true)); } m_server_list_widget->addItem("server", row); }