mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-06-10 23:08:05 -05:00
Merge pull request #191 from diamante0018/t6/dump-leaderboard
feature: dump leaderboard definitions on T6
This commit is contained in:
@ -0,0 +1,28 @@
|
||||
#include "AssetDumperLeaderboardDef.h"
|
||||
|
||||
#include "Game/T6/Leaderboard/JsonLeaderboardDefWriter.h"
|
||||
|
||||
#include <format>
|
||||
#include <ranges>
|
||||
|
||||
using namespace T6;
|
||||
|
||||
std::string AssetDumperLeaderboardDef::GetFileNameForAsset(const std::string& assetName)
|
||||
{
|
||||
return std::format("leaderboards/{}.json", assetName);
|
||||
}
|
||||
|
||||
bool AssetDumperLeaderboardDef::ShouldDump(XAssetInfo<LeaderboardDef>* asset)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void AssetDumperLeaderboardDef::DumpAsset(AssetDumpingContext& context, XAssetInfo<LeaderboardDef>* asset)
|
||||
{
|
||||
const auto assetFile = context.OpenAssetFile(GetFileNameForAsset(asset->m_name));
|
||||
|
||||
if (!assetFile)
|
||||
return;
|
||||
|
||||
DumpLeaderboardDefAsJson(*assetFile, asset->Asset());
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
#pragma once
|
||||
|
||||
#include "Dumping/AbstractAssetDumper.h"
|
||||
#include "Game/T6/T6.h"
|
||||
|
||||
namespace T6
|
||||
{
|
||||
class AssetDumperLeaderboardDef final : public AbstractAssetDumper<LeaderboardDef>
|
||||
{
|
||||
static std::string GetFileNameForAsset(const std::string& assetName);
|
||||
|
||||
protected:
|
||||
_NODISCARD bool ShouldDump(XAssetInfo<LeaderboardDef>* asset) override;
|
||||
void DumpAsset(AssetDumpingContext& context, XAssetInfo<LeaderboardDef>* asset) override;
|
||||
};
|
||||
} // namespace T6
|
103
src/ObjWriting/Game/T6/Leaderboard/JsonLeaderboardDefWriter.cpp
Normal file
103
src/ObjWriting/Game/T6/Leaderboard/JsonLeaderboardDefWriter.cpp
Normal file
@ -0,0 +1,103 @@
|
||||
#include "JsonLeaderboardDefWriter.h"
|
||||
|
||||
#include "Game/T6/CommonT6.h"
|
||||
#include "Game/T6/Leaderboard/JsonLeaderboardDef.h"
|
||||
|
||||
#include <iomanip>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using namespace nlohmann;
|
||||
using namespace T6;
|
||||
|
||||
namespace
|
||||
{
|
||||
class JsonDumper
|
||||
{
|
||||
public:
|
||||
explicit JsonDumper(std::ostream& stream)
|
||||
: m_stream(stream)
|
||||
{
|
||||
}
|
||||
|
||||
void Dump(const LeaderboardDef* leaderboardDef) const
|
||||
{
|
||||
JsonLeaderboardDef jsonLeaderboardDef;
|
||||
CreateJsonLeaderboardDef(jsonLeaderboardDef, *leaderboardDef);
|
||||
|
||||
json jRoot = jsonLeaderboardDef;
|
||||
|
||||
jRoot["_type"] = "leaderboard";
|
||||
jRoot["_version"] = 1;
|
||||
|
||||
m_stream << std::setw(4) << jRoot << "\n";
|
||||
}
|
||||
|
||||
private:
|
||||
static void CreateJsonColumnDef(JsonColumnDef& jColumnDef, const LbColumnDef& lbColumnDef)
|
||||
{
|
||||
jColumnDef.name = lbColumnDef.name;
|
||||
jColumnDef.colId = lbColumnDef.colId;
|
||||
|
||||
if (lbColumnDef.dwColIndex >= 0)
|
||||
jColumnDef.dwColIndex = lbColumnDef.dwColIndex;
|
||||
|
||||
if (lbColumnDef.hidden)
|
||||
jColumnDef.hidden = lbColumnDef.hidden;
|
||||
|
||||
if (lbColumnDef.statName && lbColumnDef.statName[0])
|
||||
jColumnDef.statName = lbColumnDef.statName;
|
||||
|
||||
jColumnDef.type = lbColumnDef.type;
|
||||
|
||||
if (lbColumnDef.precision != 0)
|
||||
jColumnDef.precision = lbColumnDef.precision;
|
||||
|
||||
jColumnDef.aggregationFunction = lbColumnDef.agg;
|
||||
|
||||
if (lbColumnDef.localization && lbColumnDef.localization[0])
|
||||
jColumnDef.localization = lbColumnDef.localization;
|
||||
|
||||
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.dwColumnCount = leaderboardDef.dwColumnCount;
|
||||
|
||||
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)
|
||||
CreateJsonColumnDef(jLeaderboardDef.columns[i], leaderboardDef.columns[i]);
|
||||
|
||||
jLeaderboardDef.updateType = leaderboardDef.updateType;
|
||||
|
||||
for (auto i = 0; i < TRK_COUNT; ++i)
|
||||
{
|
||||
const auto trackTypeMask = 1 << i;
|
||||
|
||||
if (leaderboardDef.trackTypes & trackTypeMask)
|
||||
jLeaderboardDef.trackTypes.emplace_back(static_cast<LbTrackType>(i));
|
||||
}
|
||||
}
|
||||
|
||||
std::ostream& m_stream;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
namespace T6
|
||||
{
|
||||
void DumpLeaderboardDefAsJson(std::ostream& stream, const LeaderboardDef* leaderboardDef)
|
||||
{
|
||||
JsonDumper dumper(stream);
|
||||
dumper.Dump(leaderboardDef);
|
||||
}
|
||||
} // namespace T6
|
@ -0,0 +1,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "Dumping/AssetDumpingContext.h"
|
||||
#include "Game/T6/T6.h"
|
||||
|
||||
#include <ostream>
|
||||
|
||||
namespace T6
|
||||
{
|
||||
void DumpLeaderboardDefAsJson(std::ostream& stream, const LeaderboardDef* leaderboardDef);
|
||||
} // namespace T6
|
@ -2,6 +2,7 @@
|
||||
|
||||
#include "AssetDumpers/AssetDumperFontIcon.h"
|
||||
#include "AssetDumpers/AssetDumperGfxImage.h"
|
||||
#include "AssetDumpers/AssetDumperLeaderboardDef.h"
|
||||
#include "AssetDumpers/AssetDumperLocalizeEntry.h"
|
||||
#include "AssetDumpers/AssetDumperMaterial.h"
|
||||
#include "AssetDumpers/AssetDumperPhysConstraints.h"
|
||||
@ -75,7 +76,7 @@ bool ZoneDumper::DumpZone(AssetDumpingContext& context) const
|
||||
// DUMP_ASSET_POOL(AssetDumperFxImpactTable, m_fx_impact_table, ASSET_TYPE_IMPACT_FX)
|
||||
DUMP_ASSET_POOL(AssetDumperRawFile, m_raw_file, ASSET_TYPE_RAWFILE)
|
||||
DUMP_ASSET_POOL(AssetDumperStringTable, m_string_table, ASSET_TYPE_STRINGTABLE)
|
||||
// DUMP_ASSET_POOL(AssetDumperLeaderboardDef, m_leaderboard, ASSET_TYPE_LEADERBOARD)
|
||||
DUMP_ASSET_POOL(AssetDumperLeaderboardDef, m_leaderboard, ASSET_TYPE_LEADERBOARD)
|
||||
// DUMP_ASSET_POOL(AssetDumperXGlobals, m_xglobals, ASSET_TYPE_XGLOBALS)
|
||||
// DUMP_ASSET_POOL(AssetDumperDDLRoot, m_ddl, ASSET_TYPE_DDL)
|
||||
// DUMP_ASSET_POOL(AssetDumperGlasses, m_glasses, ASSET_TYPE_GLASSES)
|
||||
|
Reference in New Issue
Block a user