diff --git a/src/ObjCommon/Game/IW4/Json/JsonLeaderboardDef.h b/src/ObjCommon/Game/IW4/Json/JsonLeaderboardDef.h index e1924223..b4ba09ef 100644 --- a/src/ObjCommon/Game/IW4/Json/JsonLeaderboardDef.h +++ b/src/ObjCommon/Game/IW4/Json/JsonLeaderboardDef.h @@ -40,10 +40,10 @@ namespace IW4 std::string statName; LbColType type; 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 { diff --git a/src/ObjCommon/Game/IW5/Json/JsonLeaderboardDef.h b/src/ObjCommon/Game/IW5/Json/JsonLeaderboardDef.h index 944b0e2e..8b3c6687 100644 --- a/src/ObjCommon/Game/IW5/Json/JsonLeaderboardDef.h +++ b/src/ObjCommon/Game/IW5/Json/JsonLeaderboardDef.h @@ -55,17 +55,17 @@ namespace IW5 public: std::string name; int id; - int propertyId; - bool hidden; - std::string statName; + std::optional propertyId; + std::optional hidden; + std::optional statName; LbColType type; - int precision; - LbAggType agg; - int uiCalColX; - int uiCalColY; + std::optional precision; + LbAggType aggregationFunction; + std::optional uiCalColX; + std::optional 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 { diff --git a/src/ObjWriting/Game/IW4/LeaderboardDef/JsonLeaderboardDefWriter.cpp b/src/ObjWriting/Game/IW4/LeaderboardDef/JsonLeaderboardDefWriter.cpp index b556b058..c4be851e 100644 --- a/src/ObjWriting/Game/IW4/LeaderboardDef/JsonLeaderboardDefWriter.cpp +++ b/src/ObjWriting/Game/IW4/LeaderboardDef/JsonLeaderboardDefWriter.cpp @@ -19,7 +19,7 @@ namespace { } - void Dump(const LeaderboardDef* leaderboardDef) + void Dump(const LeaderboardDef* leaderboardDef) const { JsonLeaderboardDef jsonLeaderboardDef; CreateJsonLeaderboardDef(jsonLeaderboardDef, *leaderboardDef); @@ -37,19 +37,32 @@ namespace { jColumnDef.name = lbColumnDef.name; jColumnDef.id = lbColumnDef.id; - jColumnDef.propertyId = lbColumnDef.propertyId; - jColumnDef.hidden = lbColumnDef.hidden; - jColumnDef.statName = lbColumnDef.statName; + + if (lbColumnDef.propertyId != 0) + 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.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) { 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); for (auto i = 0; i < leaderboardDef.columnCount; ++i) diff --git a/src/ObjWriting/Game/IW5/LeaderboardDef/JsonLeaderboardDefWriter.cpp b/src/ObjWriting/Game/IW5/LeaderboardDef/JsonLeaderboardDefWriter.cpp index 3146a3b9..250ca39d 100644 --- a/src/ObjWriting/Game/IW5/LeaderboardDef/JsonLeaderboardDefWriter.cpp +++ b/src/ObjWriting/Game/IW5/LeaderboardDef/JsonLeaderboardDefWriter.cpp @@ -19,7 +19,7 @@ namespace { } - void Dump(const LeaderboardDef* leaderboardDef) + void Dump(const LeaderboardDef* leaderboardDef) const { JsonLeaderboardDef jsonLeaderboardDef; CreateJsonLeaderboardDef(jsonLeaderboardDef, *leaderboardDef); @@ -37,21 +37,38 @@ namespace { jColumnDef.name = lbColumnDef.name; jColumnDef.id = lbColumnDef.id; - jColumnDef.propertyId = lbColumnDef.propertyId; - jColumnDef.hidden = lbColumnDef.hidden; - jColumnDef.statName = lbColumnDef.statName; + + if (lbColumnDef.propertyId != 0) + 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.precision = lbColumnDef.precision; - jColumnDef.agg = lbColumnDef.agg; - jColumnDef.uiCalColX = lbColumnDef.uiCalColX; - jColumnDef.uiCalColY = lbColumnDef.uiCalColY; + + if (lbColumnDef.precision != 0) + jColumnDef.precision = lbColumnDef.precision; + + 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) { 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); for (auto i = 0; i < leaderboardDef.columnCount; ++i) @@ -59,12 +76,12 @@ namespace 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(i)); - } } }