WIP
This commit is contained in:
@@ -30,12 +30,12 @@ private:
|
|||||||
struct PlayerData {
|
struct PlayerData {
|
||||||
int ID = -1;
|
int ID = -1;
|
||||||
std::string Name = "";
|
std::string Name = "";
|
||||||
int Team = -1;
|
int Team = 1;
|
||||||
EntityWrapper Player = EntityWrapper::Invalid;
|
EntityWrapper Player = EntityWrapper::Invalid;
|
||||||
};
|
};
|
||||||
|
|
||||||
int m_PlayerCounter = 0;
|
int m_PlayerCounter = 0;
|
||||||
std::unordered_map<std::string, PlayerData> m_PlayerIdentities;
|
std::unordered_map<int, PlayerData> m_PlayerIdentities;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -9,7 +9,7 @@ CapturePointHUDSystem::CapturePointHUDSystem(SystemParams params)
|
|||||||
|
|
||||||
void CapturePointHUDSystem::Update(double dt)
|
void CapturePointHUDSystem::Update(double dt)
|
||||||
{
|
{
|
||||||
bool LoadCheck = true;
|
bool loadCheck = true;
|
||||||
int redTeam;
|
int redTeam;
|
||||||
int blueTeam;
|
int blueTeam;
|
||||||
int spectatorTeam;
|
int spectatorTeam;
|
||||||
@@ -35,11 +35,11 @@ void CapturePointHUDSystem::Update(double dt)
|
|||||||
//Check if the HUD corresponds to the Capture Point Number
|
//Check if the HUD corresponds to the Capture Point Number
|
||||||
if (HUD_ID == (int)entityCP["CapturePoint"]["CapturePointNumber"]) {
|
if (HUD_ID == (int)entityCP["CapturePoint"]["CapturePointNumber"]) {
|
||||||
ComponentWrapper& teamComponent = entityCP["Team"];
|
ComponentWrapper& teamComponent = entityCP["Team"];
|
||||||
if (LoadCheck) {
|
if (loadCheck) {
|
||||||
redTeam = (int)teamComponent["Team"].Enum("Red");
|
redTeam = (int)teamComponent["Team"].Enum("Red");
|
||||||
blueTeam = (int)teamComponent["Team"].Enum("Blue");
|
blueTeam = (int)teamComponent["Team"].Enum("Blue");
|
||||||
spectatorTeam = (int)teamComponent["Team"].Enum("Spectator");
|
spectatorTeam = (int)teamComponent["Team"].Enum("Spectator");
|
||||||
LoadCheck = false;
|
loadCheck = false;
|
||||||
}
|
}
|
||||||
//Color hud with team color
|
//Color hud with team color
|
||||||
auto capturePointTeam = (int)teamComponent["Team"];
|
auto capturePointTeam = (int)teamComponent["Team"];
|
||||||
|
|||||||
@@ -18,32 +18,53 @@ void ScoreScreenSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper&
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int redTeamEnum;
|
||||||
|
int blueTeamEnum;
|
||||||
|
int spectatorTeamEnum;
|
||||||
|
int currentTeam = 0;
|
||||||
|
|
||||||
|
if(entity.HasComponent("Team")) {
|
||||||
|
auto cTeam = entity["Team"];
|
||||||
|
redTeamEnum = (int)cTeam["Team"].Enum("Red");
|
||||||
|
blueTeamEnum = (int)cTeam["Team"].Enum("Blue");
|
||||||
|
spectatorTeamEnum = (int)cTeam["Team"].Enum("Spectator");
|
||||||
|
currentTeam = (int)cTeam["Team"];
|
||||||
|
}
|
||||||
|
|
||||||
auto children = entity.ChildrenWithComponent("ScoreIdentity");
|
auto children = entity.ChildrenWithComponent("ScoreIdentity");
|
||||||
|
|
||||||
for (auto it = m_PlayerIdentities.begin(); it != m_PlayerIdentities.end(); ++it) {
|
for (auto it = m_PlayerIdentities.begin(); it != m_PlayerIdentities.end(); ++it) {
|
||||||
|
|
||||||
bool found = false;
|
bool found = false;
|
||||||
for (auto child : children) {
|
for (auto child : children) {
|
||||||
std::string name = (std::string)child["ScoreIdentity"]["Name"];
|
int ID = (int)child["ScoreIdentity"]["ID"];
|
||||||
if (it->first == name) {
|
if (it->first == ID) {
|
||||||
|
if (it->second.Team != currentTeam) {
|
||||||
|
m_World->DeleteEntity(child.ID);
|
||||||
|
break;
|
||||||
|
}
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(found == false) {
|
if(found == false) {
|
||||||
|
if(it->second.Team != currentTeam) {
|
||||||
|
//This player is not the same team as this scoreboard should show.
|
||||||
|
break;
|
||||||
|
}
|
||||||
//There is no entry for this player, create one.
|
//There is no entry for this player, create one.
|
||||||
auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/ScoreIdentity.xml");
|
auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/ScoreIdentity.xml");
|
||||||
EntityWrapper scoreIdentity = entityFile->MergeInto(m_World);
|
EntityWrapper scoreIdentity = entityFile->MergeInto(m_World);
|
||||||
auto cScoreIdentity = scoreIdentity["ScoreIdentity"];
|
auto cScoreIdentity = scoreIdentity["ScoreIdentity"];
|
||||||
auto data = it->second;
|
auto data = it->second;
|
||||||
std::printf("\n\n");
|
|
||||||
std::printf(data.Name.c_str());
|
|
||||||
std::printf("\n\n");
|
|
||||||
|
|
||||||
(std::string&)cScoreIdentity["Name"] = data.Name;
|
(std::string&)cScoreIdentity["Name"] = data.Name;
|
||||||
(int&)cScoreIdentity["ID"] = data.ID;
|
(int&)cScoreIdentity["ID"] = data.ID;
|
||||||
(int&)cScoreIdentity["Ping"] = 1337;
|
(int&)cScoreIdentity["Ping"] = 1337;
|
||||||
|
|
||||||
m_World->SetName(scoreIdentity.ID, data.Name);
|
std::string IdentityName = "#" + std::to_string(data.ID) + ": " + data.Name;
|
||||||
|
|
||||||
|
m_World->SetName(scoreIdentity.ID, IdentityName);
|
||||||
m_World->SetParent(scoreIdentity.ID, entity.ID);
|
m_World->SetParent(scoreIdentity.ID, entity.ID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -61,37 +82,36 @@ bool ScoreScreenSystem::OnPlayerDeath(const Events::PlayerDeath& e)
|
|||||||
|
|
||||||
bool ScoreScreenSystem::OnPlayerSpawn(const Events::PlayerSpawned& e)
|
bool ScoreScreenSystem::OnPlayerSpawn(const Events::PlayerSpawned& e)
|
||||||
{
|
{
|
||||||
//When a player spawn, add a new entry to the score screen.
|
//When a player spawn, add data to the list entry with the same ID.
|
||||||
if(!e.Player.Valid()) {
|
|
||||||
|
std::unordered_map<int, PlayerData>::iterator got;
|
||||||
|
|
||||||
|
got = m_PlayerIdentities.find(e.PlayerID);
|
||||||
|
if(got == m_PlayerIdentities.end()) {
|
||||||
|
LOG_ERROR("Player spawned without having an entry on score screen");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EntityWrapper entity = e.Player;
|
auto& data = got->second;
|
||||||
|
data.Player = e.Player;
|
||||||
|
data.Team = (int)data.Player["Team"]["Team"];
|
||||||
|
|
||||||
std::unordered_map<std::string, PlayerData>::const_iterator got;
|
|
||||||
got = m_PlayerIdentities.find(e.PlayerName);
|
|
||||||
if (got == m_PlayerIdentities.end()) {
|
|
||||||
PlayerData data;
|
|
||||||
data.ID = m_PlayerCounter;
|
|
||||||
data.Name = e.PlayerName;
|
|
||||||
data.Player = e.Player;
|
|
||||||
if(!entity.HasComponent("Team")) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
data.Team = (int)entity["Team"]["Team"];
|
|
||||||
|
|
||||||
std::pair<std::string, PlayerData> list (data.Name, data);
|
|
||||||
m_PlayerIdentities.insert(list);
|
|
||||||
m_PlayerCounter++;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ScoreScreenSystem::OnPlayerConnected(const Events::PlayerConnected& e)
|
bool ScoreScreenSystem::OnPlayerConnected(const Events::PlayerConnected& e)
|
||||||
{
|
{
|
||||||
|
//player has connected, add his data to the list of ScoreIdentities
|
||||||
|
PlayerData data;
|
||||||
|
data.ID = e.PlayerID;
|
||||||
|
data.Name = e.PlayerName;
|
||||||
|
m_PlayerIdentities.insert( {data.ID, data} );
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ScoreScreenSystem::OnPlayerDisconnected(const Events::PlayerDisconnected& e)
|
bool ScoreScreenSystem::OnPlayerDisconnected(const Events::PlayerDisconnected& e)
|
||||||
{
|
{
|
||||||
|
//player has disconnected, remove him from list of ScoreIdentities
|
||||||
|
m_PlayerIdentities.erase(e.PlayerID);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user