mirror of
				https://github.com/Laupetin/OpenAssetTools.git
				synced 2025-10-31 10:36:58 +00:00 
			
		
		
		
	feat: dump leaderboard definitions on T6
This commit is contained in:
		| @@ -0,0 +1,29 @@ | ||||
| #include "AssetDumperLeaderboardDef.h" | ||||
|  | ||||
| #include "Game/T6/LeaderboardDef/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 | ||||
| @@ -0,0 +1,84 @@ | ||||
| #include "JsonLeaderboardDefWriter.h" | ||||
|  | ||||
| #include "Game/T6/CommonT6.h" | ||||
| #include "Game/T6/Json/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) | ||||
|         { | ||||
|             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; | ||||
|             jColumnDef.dwColIndex = lbColumnDef.dwColIndex; | ||||
|             jColumnDef.hidden = lbColumnDef.hidden; | ||||
|             jColumnDef.statName = lbColumnDef.statName; | ||||
|             jColumnDef.type = lbColumnDef.type; | ||||
|             jColumnDef.precision = lbColumnDef.precision; | ||||
|             jColumnDef.agg = lbColumnDef.agg; | ||||
|             jColumnDef.localization = lbColumnDef.localization; | ||||
|             jColumnDef.uiCalColX = lbColumnDef.uiCalColX; | ||||
|             jColumnDef.uiCalColY = lbColumnDef.uiCalColY; | ||||
|         } | ||||
|  | ||||
|         static void CreateJsonLeaderboardDef(JsonLeaderboardDef& jLeaderboardDef, const LeaderboardDef& leaderboardDef) | ||||
|         { | ||||
|             jLeaderboardDef.id = leaderboardDef.id; | ||||
|             jLeaderboardDef.dwColumnCount = leaderboardDef.dwColumnCount; | ||||
|             jLeaderboardDef.xpColId = (leaderboardDef.xpColId < 0) ? std::nullopt : std::make_optional(leaderboardDef.xpColId); | ||||
|             jLeaderboardDef.prestigeColId = (leaderboardDef.prestigeColId < 0) ? std::nullopt : std::make_optional(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 < LbTrackType::TRK_COUNT; ++i) | ||||
|             { | ||||
|                 if ((leaderboardDef.trackTypes & (1 << i)) != 0) | ||||
|                 { | ||||
|                     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