Add server distance calculation
This commit is contained in:
parent
42e1873458
commit
0e2112d7f0
@ -38,6 +38,7 @@ Server::Server(const XMLNode& xml)
|
|||||||
m_server_id = 0;
|
m_server_id = 0;
|
||||||
m_current_players = 0;
|
m_current_players = 0;
|
||||||
m_max_players = 0;
|
m_max_players = 0;
|
||||||
|
m_distance = 0.0f;
|
||||||
unsigned server_data = 0;
|
unsigned server_data = 0;
|
||||||
xml.get("game_mode", &server_data);
|
xml.get("game_mode", &server_data);
|
||||||
m_minor_mode = NetworkConfig::get()->getLocalGameMode(server_data).first;
|
m_minor_mode = NetworkConfig::get()->getLocalGameMode(server_data).first;
|
||||||
@ -61,6 +62,7 @@ Server::Server(const XMLNode& xml)
|
|||||||
m_address.setPort(port);
|
m_address.setPort(port);
|
||||||
xml.get("private_port", &m_private_port);
|
xml.get("private_port", &m_private_port);
|
||||||
xml.get("password", &m_password_protected);
|
xml.get("password", &m_password_protected);
|
||||||
|
xml.get("distance", &m_distance);
|
||||||
m_server_owner_name = "-";
|
m_server_owner_name = "-";
|
||||||
|
|
||||||
// Display server owner name if he's your friend or localhost
|
// 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_minor_mode = NetworkConfig::get()->getLocalGameMode(server_mode).first;
|
||||||
m_major_mode = NetworkConfig::get()->getLocalGameMode(server_mode).second;
|
m_major_mode = NetworkConfig::get()->getLocalGameMode(server_mode).second;
|
||||||
m_password_protected = password_protected;
|
m_password_protected = password_protected;
|
||||||
|
m_distance = 0.0f;
|
||||||
} // server(server_id, ...)
|
} // server(server_id, ...)
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@ -80,6 +80,8 @@ protected:
|
|||||||
* for localhost or if you are friend with the server owner. */
|
* for localhost or if you are friend with the server owner. */
|
||||||
std::string m_server_owner_name;
|
std::string m_server_owner_name;
|
||||||
|
|
||||||
|
/* WAN server only, distance based on IP latitude and longitude. */
|
||||||
|
float m_distance;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/** Initialises the object from an XML node. */
|
/** Initialises the object from an XML node. */
|
||||||
@ -125,6 +127,8 @@ public:
|
|||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
const std::string& getServerOwnerName() const
|
const std::string& getServerOwnerName() const
|
||||||
{ return m_server_owner_name; }
|
{ return m_server_owner_name; }
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
float getDistance() const { return m_distance; }
|
||||||
|
|
||||||
}; // Server
|
}; // Server
|
||||||
#endif // HEADER_SERVER_HPP
|
#endif // HEADER_SERVER_HPP
|
||||||
|
@ -103,7 +103,11 @@ void ServerSelection::beforeAddingWidget()
|
|||||||
m_server_list_widget->addColumn(_("Difficulty"), 1);
|
m_server_list_widget->addColumn(_("Difficulty"), 1);
|
||||||
m_server_list_widget->addColumn(_("Game mode"), 1);
|
m_server_list_widget->addColumn(_("Game mode"), 1);
|
||||||
if (NetworkConfig::get()->isWAN())
|
if (NetworkConfig::get()->isWAN())
|
||||||
|
{
|
||||||
m_server_list_widget->addColumn(_("Server owner"), 1);
|
m_server_list_widget->addColumn(_("Server owner"), 1);
|
||||||
|
// I18N: In server selection screen, distance to server
|
||||||
|
m_server_list_widget->addColumn(_("Distance"), 1);
|
||||||
|
}
|
||||||
} // beforeAddingWidget
|
} // beforeAddingWidget
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -148,6 +152,9 @@ void ServerSelection::loadList(unsigned sort_case)
|
|||||||
case 4:
|
case 4:
|
||||||
return c->getServerOwnerName() > d->getServerOwnerName();
|
return c->getServerOwnerName() > d->getServerOwnerName();
|
||||||
break;
|
break;
|
||||||
|
case 5:
|
||||||
|
return c->getDistance() > d->getDistance();
|
||||||
|
break;
|
||||||
} // switch
|
} // switch
|
||||||
assert(false);
|
assert(false);
|
||||||
return false;
|
return false;
|
||||||
@ -173,6 +180,12 @@ void ServerSelection::loadList(unsigned sort_case)
|
|||||||
{
|
{
|
||||||
row.push_back(GUIEngine::ListWidget::ListCell(StringUtils::
|
row.push_back(GUIEngine::ListWidget::ListCell(StringUtils::
|
||||||
utf8ToWide(server->getServerOwnerName()), -1, 1, true));
|
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);
|
m_server_list_widget->addItem("server", row);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user