Show country flag in soccer if client supports

This commit is contained in:
Benau 2019-06-16 15:25:53 +08:00
parent 970061358b
commit 275dbe3631
11 changed files with 67 additions and 19 deletions

View File

@ -586,5 +586,6 @@
--> -->
<network-capabilities> <network-capabilities>
<capabilities name="report_player"/> <capabilities name="report_player"/>
<capabilities name="country_flag"/>
</network-capabilities> </network-capabilities>
</config> </config>

View File

@ -537,9 +537,9 @@ const std::string& CaptureTheFlag::getIdent() const
} // getIdent } // getIdent
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void CaptureTheFlag::saveCompleteState(BareNetworkString* bns) void CaptureTheFlag::saveCompleteState(BareNetworkString* bns, STKPeer* peer)
{ {
FreeForAll::saveCompleteState(bns); FreeForAll::saveCompleteState(bns, peer);
bns->addUInt32(m_red_scores).addUInt32(m_blue_scores); bns->addUInt32(m_red_scores).addUInt32(m_blue_scores);
} // saveCompleteState } // saveCompleteState

View File

@ -157,7 +157,8 @@ public:
return progress; return progress;
} }
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
virtual void saveCompleteState(BareNetworkString* bns) OVERRIDE; virtual void saveCompleteState(BareNetworkString* bns,
STKPeer* peer) OVERRIDE;
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
virtual void restoreCompleteState(const BareNetworkString& b) OVERRIDE; virtual void restoreCompleteState(const BareNetworkString& b) OVERRIDE;
}; // CaptureTheFlag }; // CaptureTheFlag

View File

@ -252,7 +252,7 @@ bool FreeForAll::getKartFFAResult(int kart_id) const
} // getKartFFAResult } // getKartFFAResult
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void FreeForAll::saveCompleteState(BareNetworkString* bns) void FreeForAll::saveCompleteState(BareNetworkString* bns, STKPeer* peer)
{ {
for (unsigned i = 0; i < m_scores.size(); i++) for (unsigned i = 0; i < m_scores.size(); i++)
bns->addUInt32(m_scores[i]); bns->addUInt32(m_scores[i]);

View File

@ -80,7 +80,8 @@ public:
m_scores.at(kart_id) = 0; m_scores.at(kart_id) = 0;
} }
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
virtual void saveCompleteState(BareNetworkString* bns) OVERRIDE; virtual void saveCompleteState(BareNetworkString* bns,
STKPeer* peer) OVERRIDE;
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
virtual void restoreCompleteState(const BareNetworkString& b) OVERRIDE; virtual void restoreCompleteState(const BareNetworkString& b) OVERRIDE;
}; // FreeForAll }; // FreeForAll

View File

@ -1116,7 +1116,7 @@ void LinearWorld::KartInfo::restoreCompleteState(const BareNetworkString& b)
} // restoreCompleteState } // restoreCompleteState
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void LinearWorld::saveCompleteState(BareNetworkString* bns) void LinearWorld::saveCompleteState(BareNetworkString* bns, STKPeer* peer)
{ {
bns->addUInt32(m_fastest_lap_ticks); bns->addUInt32(m_fastest_lap_ticks);
bns->addFloat(m_distance_increase); bns->addFloat(m_distance_increase);

View File

@ -226,7 +226,8 @@ public:
virtual std::pair<uint32_t, uint32_t> getGameStartedProgress() const virtual std::pair<uint32_t, uint32_t> getGameStartedProgress() const
OVERRIDE; OVERRIDE;
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
virtual void saveCompleteState(BareNetworkString* bns) OVERRIDE; virtual void saveCompleteState(BareNetworkString* bns,
STKPeer* peer) OVERRIDE;
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
virtual void restoreCompleteState(const BareNetworkString& b) OVERRIDE; virtual void restoreCompleteState(const BareNetworkString& b) OVERRIDE;
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------

View File

@ -32,6 +32,7 @@
#include "network/network_string.hpp" #include "network/network_string.hpp"
#include "network/protocols/game_events_protocol.hpp" #include "network/protocols/game_events_protocol.hpp"
#include "network/stk_host.hpp" #include "network/stk_host.hpp"
#include "network/stk_peer.hpp"
#include "physics/physics.hpp" #include "physics/physics.hpp"
#include "states_screens/race_gui_base.hpp" #include "states_screens/race_gui_base.hpp"
#include "tracks/graph.hpp" #include "tracks/graph.hpp"
@ -40,6 +41,7 @@
#include "tracks/track_object_manager.hpp" #include "tracks/track_object_manager.hpp"
#include "tracks/track_sector.hpp" #include "tracks/track_sector.hpp"
#include "utils/constants.hpp" #include "utils/constants.hpp"
#include "utils/string_utils.hpp"
#include <IMeshSceneNode.h> #include <IMeshSceneNode.h>
#include <numeric> #include <numeric>
@ -275,7 +277,8 @@ void SoccerWorld::onCheckGoalTriggered(bool first_goal)
sd.m_correct_goal = isCorrectGoal(m_ball_hitter, first_goal); sd.m_correct_goal = isCorrectGoal(m_ball_hitter, first_goal);
sd.m_kart = getKart(m_ball_hitter)->getIdent(); sd.m_kart = getKart(m_ball_hitter)->getIdent();
sd.m_player = getKart(m_ball_hitter)->getController()->getName(); sd.m_player = getKart(m_ball_hitter)->getController()->getName();
sd.m_country_flag = StringUtils::getCountryFlag(
race_manager->getKartInfo(m_ball_hitter).getCountryCode());
if (sd.m_correct_goal) if (sd.m_correct_goal)
{ {
m_karts[m_ball_hitter]->getKartModel() m_karts[m_ball_hitter]->getKartModel()
@ -319,9 +322,32 @@ void SoccerWorld::onCheckGoalTriggered(bool first_goal)
.addUInt8((uint8_t)sd.m_id).addUInt8(sd.m_correct_goal) .addUInt8((uint8_t)sd.m_id).addUInt8(sd.m_correct_goal)
.addUInt8(first_goal).addFloat(sd.m_time) .addUInt8(first_goal).addFloat(sd.m_time)
.addTime(m_ticks_back_to_own_goal) .addTime(m_ticks_back_to_own_goal)
.encodeString(sd.m_kart) .encodeString(sd.m_kart);
.encodeString(sd.m_player); core::stringw player_name = sd.m_player;
STKHost::get()->sendPacketToAllPeers(&p, true); NetworkString p_with_flag = p;
p.encodeString(player_name);
if (!sd.m_country_flag.empty())
{
player_name += L" ";
player_name += sd.m_country_flag;
}
p_with_flag.encodeString(player_name);
auto peers = STKHost::get()->getPeers();
for (auto& peer : peers)
{
if (peer->isValidated() && !peer->isWaitingForGame())
{
if (peer->getClientCapabilities().find("country_flag") !=
peer->getClientCapabilities().end())
{
peer->sendPacket(&p_with_flag, true/*reliable*/);
}
else
{
peer->sendPacket(&p, true/*reliable*/);
}
}
}
} }
} }
for (unsigned i = 0; i < m_karts.size(); i++) for (unsigned i = 0; i < m_karts.size(); i++)
@ -740,7 +766,7 @@ void SoccerWorld::enterRaceOverState()
} // enterRaceOverState } // enterRaceOverState
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void SoccerWorld::saveCompleteState(BareNetworkString* bns) void SoccerWorld::saveCompleteState(BareNetworkString* bns, STKPeer* peer)
{ {
const unsigned red_scorers = (unsigned)m_red_scorers.size(); const unsigned red_scorers = (unsigned)m_red_scorers.size();
bns->addUInt32(red_scorers); bns->addUInt32(red_scorers);
@ -749,8 +775,15 @@ void SoccerWorld::saveCompleteState(BareNetworkString* bns)
bns->addUInt8((uint8_t)m_red_scorers[i].m_id) bns->addUInt8((uint8_t)m_red_scorers[i].m_id)
.addUInt8(m_red_scorers[i].m_correct_goal) .addUInt8(m_red_scorers[i].m_correct_goal)
.addFloat(m_red_scorers[i].m_time) .addFloat(m_red_scorers[i].m_time)
.encodeString(m_red_scorers[i].m_kart) .encodeString(m_red_scorers[i].m_kart);
.encodeString(m_red_scorers[i].m_player); core::stringw player_name = m_red_scorers[i].m_player;
if (peer->getClientCapabilities().find("country_flag") !=
peer->getClientCapabilities().end())
{
player_name += L" ";
player_name += m_red_scorers[i].m_country_flag;
}
bns->encodeString(player_name);
} }
const unsigned blue_scorers = (unsigned)m_blue_scorers.size(); const unsigned blue_scorers = (unsigned)m_blue_scorers.size();
@ -760,8 +793,15 @@ void SoccerWorld::saveCompleteState(BareNetworkString* bns)
bns->addUInt8((uint8_t)m_blue_scorers[i].m_id) bns->addUInt8((uint8_t)m_blue_scorers[i].m_id)
.addUInt8(m_blue_scorers[i].m_correct_goal) .addUInt8(m_blue_scorers[i].m_correct_goal)
.addFloat(m_blue_scorers[i].m_time) .addFloat(m_blue_scorers[i].m_time)
.encodeString(m_blue_scorers[i].m_kart) .encodeString(m_blue_scorers[i].m_kart);
.encodeString(m_blue_scorers[i].m_player); core::stringw player_name = m_blue_scorers[i].m_player;
if (peer->getClientCapabilities().find("country_flag") !=
peer->getClientCapabilities().end())
{
player_name += L" ";
player_name += m_blue_scorers[i].m_country_flag;
}
bns->encodeString(player_name);
} }
bns->addTime(m_reset_ball_ticks).addTime(m_ticks_back_to_own_goal); bns->addTime(m_reset_ball_ticks).addTime(m_ticks_back_to_own_goal);
} // saveCompleteState } // saveCompleteState

View File

@ -53,6 +53,8 @@ public:
std::string m_kart; std::string m_kart;
/** Player name which scores. */ /** Player name which scores. */
core::stringw m_player; core::stringw m_player;
/** Country flag of player (used in server only). */
core::stringw m_country_flag;
}; // ScorerData }; // ScorerData
private: private:
@ -414,7 +416,8 @@ public:
return progress; return progress;
} }
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
virtual void saveCompleteState(BareNetworkString* bns) OVERRIDE; virtual void saveCompleteState(BareNetworkString* bns,
STKPeer* peer) OVERRIDE;
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
virtual void restoreCompleteState(const BareNetworkString& b) OVERRIDE; virtual void restoreCompleteState(const BareNetworkString& b) OVERRIDE;
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------

View File

@ -46,6 +46,7 @@ class btRigidBody;
class Controller; class Controller;
class ItemState; class ItemState;
class PhysicalObject; class PhysicalObject;
class STKPeer;
namespace Scripting namespace Scripting
{ {
@ -339,7 +340,7 @@ public:
m_eliminated_karts--; m_eliminated_karts--;
} }
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
virtual void saveCompleteState(BareNetworkString* bns) {} virtual void saveCompleteState(BareNetworkString* bns, STKPeer* peer) {}
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
virtual void restoreCompleteState(const BareNetworkString& buffer) {} virtual void restoreCompleteState(const BareNetworkString& buffer) {}
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------

View File

@ -1575,7 +1575,7 @@ void ServerLobby::finishedLoadingLiveJoinClient(Event* event)
nim->saveCompleteState(ns); nim->saveCompleteState(ns);
nim->addLiveJoinPeer(peer); nim->addLiveJoinPeer(peer);
w->saveCompleteState(ns); w->saveCompleteState(ns, peer.get());
if (race_manager->supportsLiveJoining()) if (race_manager->supportsLiveJoining())
{ {
// Only needed in non-racing mode as no need players can added after // Only needed in non-racing mode as no need players can added after