Scoreboard deserialization
This commit is contained in:
@@ -11,22 +11,74 @@
|
||||
|
||||
|
||||
|
||||
cObjective::cObjective(cObjective::eType a_Type) : m_Type(a_Type)
|
||||
{}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cObjective::SetDisplaySlot(cObjective::eDisplaySlot a_Display)
|
||||
AString cObjective::TypeToString(eType a_Type)
|
||||
{
|
||||
m_Display = a_Display;
|
||||
switch (a_Type)
|
||||
{
|
||||
case E_TYPE_DUMMY: return "dummy";
|
||||
case E_TYPE_DEATH_COUNT: return "deathCount";
|
||||
case E_TYPE_PLAYER_KILL_COUNT: return "playerKillCount";
|
||||
case E_TYPE_TOTAL_KILL_COUNT: return "totalKillCount";
|
||||
case E_TYPE_HEALTH: return "health";
|
||||
case E_TYPE_ACHIEVEMENT: return "achievement";
|
||||
case E_TYPE_STAT: return "stat";
|
||||
case E_TYPE_STAT_ITEM_CRAFT: return "stat.craftItem";
|
||||
case E_TYPE_STAT_ITEM_USE: return "stat.useItem";
|
||||
case E_TYPE_STAT_ITEM_BREAK: return "stat.breakItem";
|
||||
case E_TYPE_STAT_BLOCK_MINE: return "stat.mineBlock";
|
||||
case E_TYPE_STAT_ENTITY_KILL: return "stat.killEntity";
|
||||
case E_TYPE_STAT_ENTITY_KILLED_BY: return "stat.entityKilledBy";
|
||||
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
cObjective::eType cObjective::StringToType(const AString & a_Name)
|
||||
{
|
||||
static struct {
|
||||
eType m_Type;
|
||||
const char * m_String;
|
||||
} TypeMap [] =
|
||||
{
|
||||
{E_TYPE_DUMMY, "dummy"},
|
||||
{E_TYPE_DEATH_COUNT, "deathCount"},
|
||||
{E_TYPE_PLAYER_KILL_COUNT, "playerKillCount"},
|
||||
{E_TYPE_TOTAL_KILL_COUNT, "totalKillCount"},
|
||||
{E_TYPE_HEALTH, "health"},
|
||||
{E_TYPE_ACHIEVEMENT, "achievement"},
|
||||
{E_TYPE_STAT, "stat"},
|
||||
{E_TYPE_STAT_ITEM_CRAFT, "stat.craftItem"},
|
||||
{E_TYPE_STAT_ITEM_USE, "stat.useItem"},
|
||||
{E_TYPE_STAT_ITEM_BREAK, "stat.breakItem"},
|
||||
{E_TYPE_STAT_BLOCK_MINE, "stat.mineBlock"},
|
||||
{E_TYPE_STAT_ENTITY_KILL, "stat.killEntity"},
|
||||
{E_TYPE_STAT_ENTITY_KILLED_BY, "stat.entityKilledBy"}
|
||||
};
|
||||
for (size_t i = 0; i < ARRAYCOUNT(TypeMap); i++)
|
||||
{
|
||||
if (NoCaseCompare(TypeMap[i].m_String, a_Name) == 0)
|
||||
{
|
||||
return TypeMap[i].m_Type;
|
||||
}
|
||||
} // for i - TypeMap[]
|
||||
return E_TYPE_DUMMY;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
cObjective::cObjective(const AString & a_DisplayName, cObjective::eType a_Type) : m_DisplayName(a_DisplayName), m_Type(a_Type)
|
||||
{}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cObjective::Reset(void)
|
||||
{
|
||||
m_Scores.clear();
|
||||
@@ -132,6 +184,17 @@ bool cTeam::RemovePlayer(const AString & a_Name)
|
||||
|
||||
|
||||
|
||||
bool cTeam::HasPlayer(const AString & a_Name) const
|
||||
{
|
||||
cPlayerNameSet::const_iterator it = m_Players.find(a_Name);
|
||||
|
||||
return it != m_Players.end();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cTeam::Reset(void)
|
||||
{
|
||||
m_Players.clear();
|
||||
@@ -149,11 +212,23 @@ unsigned int cTeam::GetNumPlayers(void) const
|
||||
|
||||
|
||||
|
||||
cObjective* cScoreboard::RegisterObjective(const AString & a_Name, cObjective::eType a_Type)
|
||||
cScoreboard::cScoreboard()
|
||||
{
|
||||
cObjective Objective(a_Type);
|
||||
for (int i = 0; i < (int) E_DISPLAY_SLOT_COUNT; ++i)
|
||||
{
|
||||
m_Display[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
std::pair<ObjectiveMap::iterator, bool> Status = m_Objectives.insert(NamedObjective(a_Name, Objective));
|
||||
|
||||
|
||||
|
||||
|
||||
cObjective* cScoreboard::RegisterObjective(const AString & a_Name, const AString & a_DisplayName, cObjective::eType a_Type)
|
||||
{
|
||||
cObjective Objective(a_DisplayName, a_Type);
|
||||
|
||||
std::pair<cObjectiveMap::iterator, bool> Status = m_Objectives.insert(cNamedObjective(a_Name, Objective));
|
||||
|
||||
return Status.second ? &Status.first->second : NULL;
|
||||
}
|
||||
@@ -164,7 +239,7 @@ cObjective* cScoreboard::RegisterObjective(const AString & a_Name, cObjective::e
|
||||
|
||||
bool cScoreboard::RemoveObjective(const AString & a_Name)
|
||||
{
|
||||
ObjectiveMap::iterator it = m_Objectives.find(a_Name);
|
||||
cObjectiveMap::iterator it = m_Objectives.find(a_Name);
|
||||
|
||||
if (it == m_Objectives.end())
|
||||
{
|
||||
@@ -180,9 +255,9 @@ bool cScoreboard::RemoveObjective(const AString & a_Name)
|
||||
|
||||
|
||||
|
||||
cObjective* cScoreboard::GetObjective(const AString & a_Name)
|
||||
cObjective * cScoreboard::GetObjective(const AString & a_Name)
|
||||
{
|
||||
ObjectiveMap::iterator it = m_Objectives.find(a_Name);
|
||||
cObjectiveMap::iterator it = m_Objectives.find(a_Name);
|
||||
|
||||
if (it == m_Objectives.end())
|
||||
{
|
||||
@@ -198,14 +273,14 @@ cObjective* cScoreboard::GetObjective(const AString & a_Name)
|
||||
|
||||
|
||||
|
||||
cTeam* cScoreboard::RegisterTeam(
|
||||
cTeam * cScoreboard::RegisterTeam(
|
||||
const AString & a_Name, const AString & a_DisplayName,
|
||||
const AString & a_Prefix, const AString & a_Suffix
|
||||
)
|
||||
{
|
||||
cTeam Team(a_Name, a_DisplayName, a_Prefix, a_Suffix);
|
||||
|
||||
std::pair<TeamMap::iterator, bool> Status = m_Teams.insert(NamedTeam(a_Name, Team));
|
||||
std::pair<cTeamMap::iterator, bool> Status = m_Teams.insert(cNamedTeam(a_Name, Team));
|
||||
|
||||
return Status.second ? &Status.first->second : NULL;
|
||||
}
|
||||
@@ -216,7 +291,7 @@ cTeam* cScoreboard::RegisterTeam(
|
||||
|
||||
bool cScoreboard::RemoveTeam(const AString & a_Name)
|
||||
{
|
||||
TeamMap::iterator it = m_Teams.find(a_Name);
|
||||
cTeamMap::iterator it = m_Teams.find(a_Name);
|
||||
|
||||
if (it == m_Teams.end())
|
||||
{
|
||||
@@ -232,9 +307,9 @@ bool cScoreboard::RemoveTeam(const AString & a_Name)
|
||||
|
||||
|
||||
|
||||
cTeam* cScoreboard::GetTeam(const AString & a_Name)
|
||||
cTeam * cScoreboard::GetTeam(const AString & a_Name)
|
||||
{
|
||||
TeamMap::iterator it = m_Teams.find(a_Name);
|
||||
cTeamMap::iterator it = m_Teams.find(a_Name);
|
||||
|
||||
if (it == m_Teams.end())
|
||||
{
|
||||
@@ -250,9 +325,50 @@ cTeam* cScoreboard::GetTeam(const AString & a_Name)
|
||||
|
||||
|
||||
|
||||
cTeam * cScoreboard::QueryPlayerTeam(const AString & a_Name)
|
||||
{
|
||||
for (cTeamMap::iterator it = m_Teams.begin(); it != m_Teams.end(); ++it)
|
||||
{
|
||||
if (it->second.HasPlayer(a_Name))
|
||||
{
|
||||
return &it->second;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cScoreboard::SetDisplay(const AString & a_Objective, eDisplaySlot a_Slot)
|
||||
{
|
||||
ASSERT(a_Slot < E_DISPLAY_SLOT_COUNT);
|
||||
|
||||
cObjective * Objective = GetObjective(a_Objective);
|
||||
|
||||
m_Display[a_Slot] = Objective;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
cObjective* cScoreboard::GetObjectiveIn(eDisplaySlot a_Slot)
|
||||
{
|
||||
ASSERT(a_Slot < E_DISPLAY_SLOT_COUNT);
|
||||
|
||||
return m_Display[a_Slot];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cScoreboard::ForEachObjectiveWith(cObjective::eType a_Type, cObjectiveCallback& a_Callback)
|
||||
{
|
||||
for (ObjectiveMap::iterator it = m_Objectives.begin(); it != m_Objectives.end(); ++it)
|
||||
for (cObjectiveMap::iterator it = m_Objectives.begin(); it != m_Objectives.end(); ++it)
|
||||
{
|
||||
if (it->second.GetType() == a_Type)
|
||||
{
|
||||
@@ -268,3 +384,21 @@ void cScoreboard::ForEachObjectiveWith(cObjective::eType a_Type, cObjectiveCallb
|
||||
|
||||
|
||||
|
||||
|
||||
unsigned int cScoreboard::GetNumObjectives(void) const
|
||||
{
|
||||
return m_Objectives.size();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
unsigned int cScoreboard::GetNumTeams(void) const
|
||||
{
|
||||
return m_Teams.size();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user