Add server distance calculation

This commit is contained in:
Benau 2018-03-26 02:11:04 +08:00
parent 42e1873458
commit 0e2112d7f0
3 changed files with 20 additions and 0 deletions

View File

@ -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, ...)
// ----------------------------------------------------------------------------

View File

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

View File

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