chore: only dump leaderboard values when they are relevant for the column

This commit is contained in:
Jan 2024-05-19 11:38:20 +02:00
parent 7ba5a616cd
commit 489e4d033e
No known key found for this signature in database
GPG Key ID: 44B581F78FF5C57C
4 changed files with 62 additions and 32 deletions

View File

@ -40,10 +40,10 @@ namespace IW4
std::string statName; std::string statName;
LbColType type; LbColType type;
int precision; int precision;
LbAggType agg; LbAggType aggregationFunction;
}; };
NLOHMANN_DEFINE_TYPE_EXTENSION(JsonColumnDef, name, id, propertyId, hidden, statName, type, precision, agg); NLOHMANN_DEFINE_TYPE_EXTENSION(JsonColumnDef, name, id, propertyId, hidden, statName, type, precision, aggregationFunction);
class JsonLeaderboardDef class JsonLeaderboardDef
{ {

View File

@ -55,17 +55,17 @@ namespace IW5
public: public:
std::string name; std::string name;
int id; int id;
int propertyId; std::optional<int> propertyId;
bool hidden; std::optional<bool> hidden;
std::string statName; std::optional<std::string> statName;
LbColType type; LbColType type;
int precision; std::optional<int> precision;
LbAggType agg; LbAggType aggregationFunction;
int uiCalColX; std::optional<int> uiCalColX;
int uiCalColY; std::optional<int> uiCalColY;
}; };
NLOHMANN_DEFINE_TYPE_EXTENSION(JsonColumnDef, name, id, propertyId, hidden, statName, type, precision, agg, uiCalColX, uiCalColY); NLOHMANN_DEFINE_TYPE_EXTENSION(JsonColumnDef, name, id, propertyId, hidden, statName, type, precision, aggregationFunction, uiCalColX, uiCalColY);
class JsonLeaderboardDef class JsonLeaderboardDef
{ {

View File

@ -19,7 +19,7 @@ namespace
{ {
} }
void Dump(const LeaderboardDef* leaderboardDef) void Dump(const LeaderboardDef* leaderboardDef) const
{ {
JsonLeaderboardDef jsonLeaderboardDef; JsonLeaderboardDef jsonLeaderboardDef;
CreateJsonLeaderboardDef(jsonLeaderboardDef, *leaderboardDef); CreateJsonLeaderboardDef(jsonLeaderboardDef, *leaderboardDef);
@ -37,19 +37,32 @@ namespace
{ {
jColumnDef.name = lbColumnDef.name; jColumnDef.name = lbColumnDef.name;
jColumnDef.id = lbColumnDef.id; jColumnDef.id = lbColumnDef.id;
jColumnDef.propertyId = lbColumnDef.propertyId;
jColumnDef.hidden = lbColumnDef.hidden; if (lbColumnDef.propertyId != 0)
jColumnDef.statName = lbColumnDef.statName; jColumnDef.propertyId = lbColumnDef.propertyId;
if (lbColumnDef.hidden)
jColumnDef.hidden = lbColumnDef.hidden;
if (lbColumnDef.statName && lbColumnDef.statName[0])
jColumnDef.statName = lbColumnDef.statName;
jColumnDef.type = lbColumnDef.type; jColumnDef.type = lbColumnDef.type;
jColumnDef.precision = lbColumnDef.precision;
jColumnDef.agg = lbColumnDef.agg; if (lbColumnDef.precision != 0)
jColumnDef.precision = lbColumnDef.precision;
jColumnDef.aggregationFunction = lbColumnDef.agg;
} }
static void CreateJsonLeaderboardDef(JsonLeaderboardDef& jLeaderboardDef, const LeaderboardDef& leaderboardDef) static void CreateJsonLeaderboardDef(JsonLeaderboardDef& jLeaderboardDef, const LeaderboardDef& leaderboardDef)
{ {
jLeaderboardDef.id = leaderboardDef.id; jLeaderboardDef.id = leaderboardDef.id;
jLeaderboardDef.xpColId = (leaderboardDef.xpColId < 0) ? std::nullopt : std::make_optional(leaderboardDef.xpColId);
jLeaderboardDef.prestigeColId = (leaderboardDef.prestigeColId < 0) ? std::nullopt : std::make_optional(leaderboardDef.prestigeColId); if (leaderboardDef.xpColId != 0)
jLeaderboardDef.xpColId = leaderboardDef.xpColId;
if (leaderboardDef.prestigeColId != 0)
jLeaderboardDef.prestigeColId = leaderboardDef.prestigeColId;
jLeaderboardDef.columns.resize(leaderboardDef.columnCount); jLeaderboardDef.columns.resize(leaderboardDef.columnCount);
for (auto i = 0; i < leaderboardDef.columnCount; ++i) for (auto i = 0; i < leaderboardDef.columnCount; ++i)

View File

@ -19,7 +19,7 @@ namespace
{ {
} }
void Dump(const LeaderboardDef* leaderboardDef) void Dump(const LeaderboardDef* leaderboardDef) const
{ {
JsonLeaderboardDef jsonLeaderboardDef; JsonLeaderboardDef jsonLeaderboardDef;
CreateJsonLeaderboardDef(jsonLeaderboardDef, *leaderboardDef); CreateJsonLeaderboardDef(jsonLeaderboardDef, *leaderboardDef);
@ -37,21 +37,38 @@ namespace
{ {
jColumnDef.name = lbColumnDef.name; jColumnDef.name = lbColumnDef.name;
jColumnDef.id = lbColumnDef.id; jColumnDef.id = lbColumnDef.id;
jColumnDef.propertyId = lbColumnDef.propertyId;
jColumnDef.hidden = lbColumnDef.hidden; if (lbColumnDef.propertyId != 0)
jColumnDef.statName = lbColumnDef.statName; jColumnDef.propertyId = lbColumnDef.propertyId;
if (lbColumnDef.hidden)
jColumnDef.hidden = lbColumnDef.hidden;
if (lbColumnDef.statName && lbColumnDef.statName[0])
jColumnDef.statName = lbColumnDef.statName;
jColumnDef.type = lbColumnDef.type; jColumnDef.type = lbColumnDef.type;
jColumnDef.precision = lbColumnDef.precision;
jColumnDef.agg = lbColumnDef.agg; if (lbColumnDef.precision != 0)
jColumnDef.uiCalColX = lbColumnDef.uiCalColX; jColumnDef.precision = lbColumnDef.precision;
jColumnDef.uiCalColY = lbColumnDef.uiCalColY;
jColumnDef.aggregationFunction = lbColumnDef.agg;
if (lbColumnDef.uiCalColX != 0 || lbColumnDef.uiCalColY != 0)
{
jColumnDef.uiCalColX = lbColumnDef.uiCalColX;
jColumnDef.uiCalColY = lbColumnDef.uiCalColY;
}
} }
static void CreateJsonLeaderboardDef(JsonLeaderboardDef& jLeaderboardDef, const LeaderboardDef& leaderboardDef) static void CreateJsonLeaderboardDef(JsonLeaderboardDef& jLeaderboardDef, const LeaderboardDef& leaderboardDef)
{ {
jLeaderboardDef.id = leaderboardDef.id; jLeaderboardDef.id = leaderboardDef.id;
jLeaderboardDef.xpColId = (leaderboardDef.xpColId < 0) ? std::nullopt : std::make_optional(leaderboardDef.xpColId);
jLeaderboardDef.prestigeColId = (leaderboardDef.prestigeColId < 0) ? std::nullopt : std::make_optional(leaderboardDef.prestigeColId); if (leaderboardDef.xpColId != 0)
jLeaderboardDef.xpColId = leaderboardDef.xpColId;
if (leaderboardDef.prestigeColId != 0)
jLeaderboardDef.prestigeColId = leaderboardDef.prestigeColId;
jLeaderboardDef.columns.resize(leaderboardDef.columnCount); jLeaderboardDef.columns.resize(leaderboardDef.columnCount);
for (auto i = 0; i < leaderboardDef.columnCount; ++i) for (auto i = 0; i < leaderboardDef.columnCount; ++i)
@ -59,12 +76,12 @@ namespace
jLeaderboardDef.updateType = leaderboardDef.updateType; jLeaderboardDef.updateType = leaderboardDef.updateType;
for (auto i = 0; i < LbTrackType::TRK_COUNT; ++i) for (auto i = 0; i < TRK_COUNT; ++i)
{ {
if ((leaderboardDef.trackTypes & (1 << i)) != 0) const auto trackTypeMask = 1 << i;
{
if (leaderboardDef.trackTypes & trackTypeMask)
jLeaderboardDef.trackTypes.emplace_back(static_cast<LbTrackType>(i)); jLeaderboardDef.trackTypes.emplace_back(static_cast<LbTrackType>(i));
}
} }
} }