mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-11 02:28:18 +00:00
706eb0d015
The include of `base/system.h` in `src/engine/shared/protocol.h` is not required and only used transitively in `teamscore.h` for `dbg_assert`. To avoid adding back the include in `teamscore.h`, the function definitions are moved to the cpp file. Both definitions are moved for consistency.
68 lines
1.8 KiB
C++
68 lines
1.8 KiB
C++
/* (c) Shereef Marzouk. See "licence DDRace.txt" and the readme.txt in the root of the distribution for more information. */
|
|
#include "teamscore.h"
|
|
#include <engine/shared/config.h>
|
|
|
|
CTeamsCore::CTeamsCore()
|
|
{
|
|
Reset();
|
|
}
|
|
|
|
bool CTeamsCore::SameTeam(int ClientID1, int ClientID2) const
|
|
{
|
|
return m_aTeam[ClientID1] == TEAM_SUPER || m_aTeam[ClientID2] == TEAM_SUPER || m_aTeam[ClientID1] == m_aTeam[ClientID2];
|
|
}
|
|
|
|
int CTeamsCore::Team(int ClientID) const
|
|
{
|
|
return m_aTeam[ClientID];
|
|
}
|
|
|
|
void CTeamsCore::Team(int ClientID, int Team)
|
|
{
|
|
dbg_assert(Team >= TEAM_FLOCK && Team <= TEAM_SUPER, "invalid team");
|
|
m_aTeam[ClientID] = Team;
|
|
}
|
|
|
|
bool CTeamsCore::CanKeepHook(int ClientID1, int ClientID2) const
|
|
{
|
|
if(m_aTeam[ClientID1] == (m_IsDDRace16 ? VANILLA_TEAM_SUPER : TEAM_SUPER) || m_aTeam[ClientID2] == (m_IsDDRace16 ? VANILLA_TEAM_SUPER : TEAM_SUPER) || ClientID1 == ClientID2)
|
|
return true;
|
|
return m_aTeam[ClientID1] == m_aTeam[ClientID2];
|
|
}
|
|
|
|
bool CTeamsCore::CanCollide(int ClientID1, int ClientID2) const
|
|
{
|
|
if(m_aTeam[ClientID1] == (m_IsDDRace16 ? VANILLA_TEAM_SUPER : TEAM_SUPER) || m_aTeam[ClientID2] == (m_IsDDRace16 ? VANILLA_TEAM_SUPER : TEAM_SUPER) || ClientID1 == ClientID2)
|
|
return true;
|
|
if(m_aIsSolo[ClientID1] || m_aIsSolo[ClientID2])
|
|
return false;
|
|
return m_aTeam[ClientID1] == m_aTeam[ClientID2];
|
|
}
|
|
|
|
void CTeamsCore::Reset()
|
|
{
|
|
m_IsDDRace16 = false;
|
|
|
|
for(int i = 0; i < MAX_CLIENTS; ++i)
|
|
{
|
|
if(g_Config.m_SvTeam == SV_TEAM_FORCED_SOLO)
|
|
m_aTeam[i] = i;
|
|
else
|
|
m_aTeam[i] = TEAM_FLOCK;
|
|
m_aIsSolo[i] = false;
|
|
}
|
|
}
|
|
|
|
void CTeamsCore::SetSolo(int ClientID, bool Value)
|
|
{
|
|
dbg_assert(ClientID >= 0 && ClientID < MAX_CLIENTS, "Invalid client id");
|
|
m_aIsSolo[ClientID] = Value;
|
|
}
|
|
|
|
bool CTeamsCore::GetSolo(int ClientID) const
|
|
{
|
|
if(ClientID < 0 || ClientID >= MAX_CLIENTS)
|
|
return false;
|
|
return m_aIsSolo[ClientID];
|
|
}
|