diff --git a/include/Game/Systems/ScoreScreenSystem.h b/include/Game/Systems/ScoreScreenSystem.h index 7f7c4064..a33d4684 100644 --- a/include/Game/Systems/ScoreScreenSystem.h +++ b/include/Game/Systems/ScoreScreenSystem.h @@ -30,12 +30,12 @@ private: struct PlayerData { int ID = -1; std::string Name = ""; - int Team = -1; + int Team = 1; EntityWrapper Player = EntityWrapper::Invalid; }; int m_PlayerCounter = 0; - std::unordered_map m_PlayerIdentities; + std::unordered_map m_PlayerIdentities; }; #endif \ No newline at end of file diff --git a/resources/Schema/Entities/CP_Rocky.xml b/resources/Schema/Entities/CP_Rocky.xml index 0adcbe6e..a6f6302d 100644 --- a/resources/Schema/Entities/CP_Rocky.xml +++ b/resources/Schema/Entities/CP_Rocky.xml @@ -29,6 +29,16 @@ + + + + + Models/Props/Walls/SciFiWallMedium.mesh + + + + + @@ -72,16 +82,6 @@ - - - - - Models/Props/Walls/SciFiWallMedium.mesh - - - - - @@ -127,11 +127,42 @@ - + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -765,6 +796,19 @@ + + + + + 2 + 1 + + + + + + + @@ -789,19 +833,6 @@ - - - - - 2 - 1 - - - - - - - @@ -827,11 +858,11 @@ 2 - + - + @@ -848,7 +879,7 @@ - + @@ -874,11 +905,11 @@ 2 - + - + @@ -895,7 +926,7 @@ - + @@ -921,11 +952,11 @@ 2 - + - + @@ -942,7 +973,7 @@ - + @@ -968,11 +999,11 @@ 2 - + - + @@ -989,7 +1020,7 @@ - + @@ -1015,11 +1046,11 @@ 2 - + - + @@ -1036,7 +1067,7 @@ - + @@ -1062,11 +1093,11 @@ 2 - + - + @@ -1083,7 +1114,7 @@ - + @@ -1109,11 +1140,11 @@ 2 - + - + @@ -1130,7 +1161,7 @@ - + @@ -2378,11 +2409,11 @@ 2 - + - + @@ -2399,7 +2430,7 @@ - + @@ -2425,11 +2456,11 @@ 2 - + - + @@ -2446,7 +2477,7 @@ - + @@ -2693,6 +2724,41 @@ + + + + Models/Core/UnitPlane.mesh + + true + + + + + + + + + + + + + + + + + + + Models/Props/Flora/SpecialRoot.mesh + + + + + + + + + + @@ -3138,6 +3204,94 @@ + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + Models/Props/Stones/AssaultHolder.mesh + + + + + + + + + + + + + @@ -3351,26 +3505,24 @@ - - - - Models/Core/UnitPlane.mesh - - true - - - - - - - - - + + + + + Models/Props/Walls/BigWallRed.mesh + + + + + + + + @@ -3384,45 +3536,6 @@ - - - - - Models/Props/Walls/SmallWall3.mesh - - - - - - - - - - - - - Models/Props/Walls/BigWallBlue.mesh - - - - - - - - - - - - Models/Props/Walls/BigWallBlue.mesh - - - - - - - - - @@ -3440,36 +3553,11 @@ - Models/Props/Walls/MediumWall1.mesh + Models/Props/Walls/SmallWall3.mesh - - - - - - - - - - Models/Props/Walls/BigWallRed.mesh - - - - - - - - - - - - - Models/Props/Walls/MediumWall2.mesh - - - - + + @@ -3500,6 +3588,45 @@ + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + Models/Props/Walls/BigWallBlue.mesh + + + + + + + + + + + + + + Models/Props/Walls/MediumWall2.mesh + + + + + + + + @@ -3518,11 +3645,23 @@ - Models/Props/Walls/MediumWall2.mesh + Models/Props/Walls/SmallWall3.mesh - - + + + + + + + + + + + Models/Props/Walls/MediumWall1.mesh + + + @@ -3534,8 +3673,21 @@ Models/Props/Walls/MediumWall2.mesh - - + + + + + + + + + + + Models/Props/Walls/MediumWall2.mesh + + + + @@ -3552,19 +3704,6 @@ - - - - - Models/Props/Walls/SmallWall3.mesh - - - - - - - - @@ -3580,169 +3719,11 @@ - - - - - - - - - - Models/Props/Flora/SpecialRoot.mesh - - - - - - - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - Models/Props/Stones/AssaultHolder.mesh - - - - - - - - - - - - - - - - - - 6 - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2 - - - - - - - - - @@ -3758,21 +3739,6 @@ - - - - - 6 - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - @@ -3801,6 +3767,71 @@ + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + @@ -3815,6 +3846,21 @@ + + + + + 6 + Models/Props/Stones/ShinyStoneCrystalBlue.mesh + + + + + + + + + @@ -3830,6 +3876,19 @@ + + + + + 2 + 1 + + + + + + + @@ -3854,19 +3913,6 @@ - - - - - 2 - 1 - - - - - - - @@ -3884,21 +3930,6 @@ - - - - - 6 - Models/Props/Stones/ShinyStoneCrystalBlue.mesh - - - - - - - - - @@ -3912,9 +3943,9 @@ Models/Props/PickUps/PickUpHolder.mesh - - - + + + @@ -3922,58 +3953,11 @@ 2 - + - - - - - - - - - - 8 - - - - Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - - - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - - - - 2 - - - - - + @@ -3989,8 +3973,8 @@ Models/Props/PickUps/HealthPickUp.mesh - - + + @@ -4016,11 +4000,11 @@ 2 - + - + @@ -4037,7 +4021,7 @@ - + @@ -4053,8 +4037,8 @@ Models/Props/PickUps/PickUpHolder.mesh - - + + @@ -4063,11 +4047,11 @@ 2 - + - + @@ -4082,103 +4066,9 @@ Models/Props/PickUps/AmmoPickUp.mesh - - - - - - - - - - - - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - - - - 2 - - - - - - - - - - - - - - 8 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - - - - - - - - - - - - Models/Props/PickUps/PickUpHolder.mesh - - - - - - - - - - - - 2 - - - - - - - - - - - - - - 8 - - - - Models/Props/PickUps/HealthPickUp.mesh - - - - + @@ -4204,11 +4094,11 @@ 2 - + - + @@ -4225,7 +4115,148 @@ - + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + 2 + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + 2 + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/AmmoPickUp.mesh + + + + + + + + + + + + + + + + + Models/Props/PickUps/PickUpHolder.mesh + + + + + + + + + + + + 2 + + + + + + + + + + + + + + 8 + + + + Models/Props/PickUps/HealthPickUp.mesh + + + + @@ -4264,9 +4295,9 @@ Models/Props/Pillars/StonePillar.mesh - - - + + + @@ -4278,9 +4309,9 @@ Models/Props/Pillars/StonePillar.mesh - - - + + + @@ -4579,7 +4610,7 @@ false - + @@ -4592,7 +4623,7 @@ false - + @@ -4630,6 +4661,41 @@ + + + + 0.40000000596046448 + + + + + + + + + + + + 10 + + + + + + + + + + + + 10 + + + + + + + @@ -4650,18 +4716,6 @@ - - - - - 10 - - - - - - - @@ -4673,17 +4727,6 @@ - - - - 0.40000000596046448 - - - - - - - @@ -4695,18 +4738,6 @@ - - - - - 10 - - - - - - - diff --git a/src/Game/Systems/CapturePointHUDSystem.cpp b/src/Game/Systems/CapturePointHUDSystem.cpp index 6f1392e0..b7376249 100644 --- a/src/Game/Systems/CapturePointHUDSystem.cpp +++ b/src/Game/Systems/CapturePointHUDSystem.cpp @@ -9,7 +9,7 @@ CapturePointHUDSystem::CapturePointHUDSystem(SystemParams params) void CapturePointHUDSystem::Update(double dt) { - bool LoadCheck = true; + bool loadCheck = true; int redTeam; int blueTeam; int spectatorTeam; @@ -35,11 +35,11 @@ void CapturePointHUDSystem::Update(double dt) //Check if the HUD corresponds to the Capture Point Number if (HUD_ID == (int)entityCP["CapturePoint"]["CapturePointNumber"]) { ComponentWrapper& teamComponent = entityCP["Team"]; - if (LoadCheck) { + if (loadCheck) { redTeam = (int)teamComponent["Team"].Enum("Red"); blueTeam = (int)teamComponent["Team"].Enum("Blue"); spectatorTeam = (int)teamComponent["Team"].Enum("Spectator"); - LoadCheck = false; + loadCheck = false; } //Color hud with team color auto capturePointTeam = (int)teamComponent["Team"]; diff --git a/src/Game/Systems/ScoreScreenSystem.cpp b/src/Game/Systems/ScoreScreenSystem.cpp index 01a03b52..361d9f1f 100644 --- a/src/Game/Systems/ScoreScreenSystem.cpp +++ b/src/Game/Systems/ScoreScreenSystem.cpp @@ -18,32 +18,53 @@ void ScoreScreenSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& 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"); for (auto it = m_PlayerIdentities.begin(); it != m_PlayerIdentities.end(); ++it) { + bool found = false; for (auto child : children) { - std::string name = (std::string)child["ScoreIdentity"]["Name"]; - if (it->first == name) { + int ID = (int)child["ScoreIdentity"]["ID"]; + if (it->first == ID) { + if (it->second.Team != currentTeam) { + m_World->DeleteEntity(child.ID); + break; + } found = true; break; } } 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. auto entityFile = ResourceManager::Load("Schema/Entities/ScoreIdentity.xml"); EntityWrapper scoreIdentity = entityFile->MergeInto(m_World); auto cScoreIdentity = scoreIdentity["ScoreIdentity"]; auto data = it->second; - std::printf("\n\n"); - std::printf(data.Name.c_str()); - std::printf("\n\n"); (std::string&)cScoreIdentity["Name"] = data.Name; (int&)cScoreIdentity["ID"] = data.ID; (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); } } @@ -61,37 +82,36 @@ bool ScoreScreenSystem::OnPlayerDeath(const Events::PlayerDeath& e) bool ScoreScreenSystem::OnPlayerSpawn(const Events::PlayerSpawned& e) { - //When a player spawn, add a new entry to the score screen. - if(!e.Player.Valid()) { + //When a player spawn, add data to the list entry with the same ID. + + std::unordered_map::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; } - EntityWrapper entity = e.Player; + auto& data = got->second; + data.Player = e.Player; + data.Team = (int)data.Player["Team"]["Team"]; - std::unordered_map::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 list (data.Name, data); - m_PlayerIdentities.insert(list); - m_PlayerCounter++; - } return 0; } 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; } bool ScoreScreenSystem::OnPlayerDisconnected(const Events::PlayerDisconnected& e) { + //player has disconnected, remove him from list of ScoreIdentities + m_PlayerIdentities.erase(e.PlayerID); return 0; }