diff --git a/src/ObjCommon/Game/T6/FontIcon/FontIconCommonT6.cpp b/src/ObjCommon/Game/T6/FontIcon/FontIconCommonT6.cpp new file mode 100644 index 00000000..5ae57d48 --- /dev/null +++ b/src/ObjCommon/Game/T6/FontIcon/FontIconCommonT6.cpp @@ -0,0 +1,23 @@ +#include "FontIconCommonT6.h" + +#include "Utils/StringUtils.h" + +#include +namespace fs = std::filesystem; + +namespace T6::font_icon +{ + std::string GetJsonFileNameForAssetName(const std::string& assetName) + { + std::string originalFileName(assetName); + utils::MakeStringLowerCase(originalFileName); + if (originalFileName.ends_with(".csv")) + { + fs::path p(assetName); + p.replace_extension(".json"); + return p.string(); + } + + return assetName; + } +} // namespace T6::font_icon diff --git a/src/ObjCommon/Game/T6/FontIcon/FontIconCommonT6.h b/src/ObjCommon/Game/T6/FontIcon/FontIconCommonT6.h new file mode 100644 index 00000000..bcce4518 --- /dev/null +++ b/src/ObjCommon/Game/T6/FontIcon/FontIconCommonT6.h @@ -0,0 +1,8 @@ +#pragma once + +#include + +namespace T6::font_icon +{ + std::string GetJsonFileNameForAssetName(const std::string& assetName); +} diff --git a/src/ObjCommon/Game/T6/FontIcon/JsonFontIconT6.h b/src/ObjCommon/Game/T6/FontIcon/JsonFontIconT6.h new file mode 100644 index 00000000..583f5ac9 --- /dev/null +++ b/src/ObjCommon/Game/T6/FontIcon/JsonFontIconT6.h @@ -0,0 +1,33 @@ +#pragma once + +#include "Json/JsonCommon.h" +#include "Json/JsonExtension.h" +#include +#include +#include +#include +#include + +namespace T6 +{ + class JsonFontIconEntry + { + public: + std::string name; + std::string material; + unsigned size; + std::optional scale; + std::vector aliases; + std::optional> aliasHashes; + }; + + NLOHMANN_DEFINE_TYPE_EXTENSION(JsonFontIconEntry, name, material, size, scale, aliases, aliasHashes); + + class JsonFontIcon + { + public: + std::vector entries; + }; + + NLOHMANN_DEFINE_TYPE_EXTENSION(JsonFontIcon, entries); +} // namespace T6 diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperFontIcon.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperFontIcon.cpp deleted file mode 100644 index 20e375f7..00000000 --- a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperFontIcon.cpp +++ /dev/null @@ -1,264 +0,0 @@ -#include "AssetDumperFontIcon.h" - -#include "Csv/CsvStream.h" -#include "Game/T6/CommonT6.h" - -#include - -using namespace T6; - -class AssetDumperFontIconInternal -{ - class KnownAlias - { - public: - std::string m_name; - int m_hash; - - explicit KnownAlias(std::string aliasName) - : m_name(std::move(aliasName)) - { - m_hash = Common::Com_HashString(m_name.c_str(), 0); - } - }; - - inline static const std::string TYPE_ICON = "icon"; - inline static const std::string ICON_HEADERS[]{ - "# index", - "# type", - "# name", - "# material", - "# size", - "# xScale", - "# yScale", - }; - - inline static const std::string TYPE_ALIAS = "alias"; - inline static const std::string ALIAS_HEADERS[]{ - "# index", - "# type", - "# alias", - "# button", - }; - - inline static const KnownAlias KNOWN_ALIASES[]{ - KnownAlias("BUTTON_ADS"), - KnownAlias("BUTTON_CAC_NEXT"), - KnownAlias("BUTTON_CAC_PREV"), - KnownAlias("BUTTON_CANCEL"), - KnownAlias("BUTTON_CAROUSEL_STICK"), - KnownAlias("BUTTON_CREATE"), - KnownAlias("BUTTON_CYCLE_LEFT"), - KnownAlias("BUTTON_CYCLE_LEFT_ACTIVE"), - KnownAlias("BUTTON_CYCLE_RIGHT"), - KnownAlias("BUTTON_CYCLE_RIGHT_ACTIVE"), - KnownAlias("BUTTON_DELETE"), - KnownAlias("BUTTON_EDIT"), - KnownAlias("BUTTON_EMBLEM_BACKWARD"), - KnownAlias("BUTTON_EMBLEM_FLIP"), - KnownAlias("BUTTON_EMBLEM_FORWARD"), - KnownAlias("BUTTON_EMBLEM_FORWARD_BACKWARD"), - KnownAlias("BUTTON_EMBLEM_MOVE"), - KnownAlias("BUTTON_EMBLEM_OUTLINE"), - KnownAlias("BUTTON_EMBLEM_PALETTE_CYCLE"), - KnownAlias("BUTTON_EMBLEM_PALETTE_NEXT"), - KnownAlias("BUTTON_EMBLEM_PALETTE_PREV"), - KnownAlias("BUTTON_EMBLEM_RESET"), - KnownAlias("BUTTON_EMBLEM_ROTATE_LEFT"), - KnownAlias("BUTTON_EMBLEM_ROTATE_RIGHT"), - KnownAlias("BUTTON_EMBLEM_SCALE"), - KnownAlias("BUTTON_FIRE"), - KnownAlias("BUTTON_FRIENDSLIST"), - KnownAlias("BUTTON_INTERACT"), - KnownAlias("BUTTON_LOOKSTICK"), - KnownAlias("BUTTON_LOOK"), - KnownAlias("BUTTON_LUI_ALT1"), - KnownAlias("BUTTON_LUI_ALT2"), - KnownAlias("BUTTON_LUI_DPAD_ALL"), - KnownAlias("BUTTON_LUI_DPAD_D"), - KnownAlias("BUTTON_LUI_DPAD_L"), - KnownAlias("BUTTON_LUI_DPAD_RL"), - KnownAlias("BUTTON_LUI_DPAD_R"), - KnownAlias("BUTTON_LUI_DPAD_UD"), - KnownAlias("BUTTON_LUI_DPAD_U"), - KnownAlias("BUTTON_LUI_LEFT_STICK_UP"), - KnownAlias("BUTTON_LUI_LEFT_TRIGGER"), - KnownAlias("BUTTON_LUI_PRIMARY"), - KnownAlias("BUTTON_LUI_RIGHT_STICK"), - KnownAlias("BUTTON_LUI_RIGHT_TRIGGER"), - KnownAlias("BUTTON_LUI_SECONDARY"), - KnownAlias("BUTTON_LUI_SELECT"), - KnownAlias("BUTTON_LUI_SHOULDERL"), - KnownAlias("BUTTON_LUI_SHOULDERR"), - KnownAlias("BUTTON_LUI_START"), - KnownAlias("BUTTON_MOUSE_CLICK"), - KnownAlias("BUTTON_MOUSE_CLICK_ACTIVE"), - KnownAlias("BUTTON_MOUSE_EDIT"), - KnownAlias("BUTTON_MOUSE_EDIT_ACTIVE"), - KnownAlias("BUTTON_MOUSE_LEFT"), - KnownAlias("BUTTON_MOUSE_MIDDLE"), - KnownAlias("BUTTON_MOUSE_RIGHT"), - KnownAlias("BUTTON_MOVESTICK"), - KnownAlias("BUTTON_MOVE"), - KnownAlias("BUTTON_MP_CANCELCOMMAND"), - KnownAlias("BUTTON_MP_CHANGESETTINGS"), - KnownAlias("BUTTON_MP_GAMERCARD"), - KnownAlias("BUTTON_MP_GAMERREVIEW"), - KnownAlias("BUTTON_MP_JOINGAME"), - KnownAlias("BUTTON_MP_KICKPLAYER"), - KnownAlias("BUTTON_MP_LEAVEGAME"), - KnownAlias("BUTTON_MP_LOBBY_GAMERCARD"), - KnownAlias("BUTTON_MP_NOTREADY"), - KnownAlias("BUTTON_MP_PGDOWN"), - KnownAlias("BUTTON_MP_PGUP"), - KnownAlias("BUTTON_MP_READY"), - KnownAlias("BUTTON_MP_REFRESH"), - KnownAlias("BUTTON_MP_SCOREBOARD"), - KnownAlias("BUTTON_MP_SIGNIN"), - KnownAlias("BUTTON_MP_SPECNEXT"), - KnownAlias("BUTTON_MP_SPECPREV"), - KnownAlias("BUTTON_MP_STARTGAME"), - KnownAlias("BUTTON_MP_TOGGLECHASECAM"), - KnownAlias("BUTTON_MP_TOGGLEVIEW"), - KnownAlias("BUTTON_NO"), - KnownAlias("BUTTON_RECORD_VIEW_NEXT"), - KnownAlias("BUTTON_RECORD_VIEW_PREV"), - KnownAlias("BUTTON_SELECTCHOICE"), - KnownAlias("BUTTON_SP_TOGGLEMENU"), - KnownAlias("BUTTON_YES"), - KnownAlias("CP"), - KnownAlias("FONT_CAPITAL_I"), - KnownAlias("FONT_NUMBER_ZERO"), - KnownAlias("KEY_DOWN_ARROW"), - KnownAlias("KEY_LEFT_ARROW"), - KnownAlias("KEY_RIGHT_ARROW"), - KnownAlias("KEY_UP_ARROW"), - KnownAlias("MOUSE_WHEEL_DOWN"), - KnownAlias("MOUSE_WHEEL_UP"), - KnownAlias("Remote_LStick"), - }; - - CsvOutputStream m_csv; - - static FontIconEntry* FindEntryByHash(const FontIcon* fontIcon, const int hash) - { - auto lowerBound = 0u; - auto upperBound = fontIcon->numEntries; - - while (true) - { - const auto entryIndex = (lowerBound + upperBound) / 2u; - auto* entry = &fontIcon->fontIconEntry[entryIndex]; - - if (entry->fontIconName.hash == hash) - return entry; - - if (lowerBound == upperBound) - return nullptr; - - if (entry->fontIconName.hash < hash) - lowerBound = entryIndex + 1u; - else - upperBound = entryIndex - 1u; - } - } - - static const KnownAlias* FindKnownAliasByHash(const int hash) - { - for (const auto& i : KNOWN_ALIASES) - { - if (i.m_hash == hash) - return &i; - } - - return nullptr; - } - - void WriteFontIconEntries(const FontIcon* fontIcon) - { - for (const auto& header : ICON_HEADERS) - m_csv.WriteColumn(header); - m_csv.NextRow(); - - for (auto iconIndex = 0u; iconIndex < fontIcon->numEntries; iconIndex++) - { - const auto* entry = &fontIcon->fontIconEntry[iconIndex]; - m_csv.WriteColumn(std::to_string(iconIndex)); - m_csv.WriteColumn(TYPE_ICON); - - if (entry->fontIconName.string) - m_csv.WriteColumn(entry->fontIconName.string); - else - m_csv.WriteColumn(""); - - if (entry->fontIconMaterialHandle && entry->fontIconMaterialHandle->info.name) - m_csv.WriteColumn(entry->fontIconMaterialHandle->info.name); - else - m_csv.WriteColumn(""); - - m_csv.WriteColumn(std::to_string(entry->fontIconSize)); - m_csv.WriteColumn(std::to_string(entry->xScale)); - m_csv.WriteColumn(std::to_string(entry->yScale)); - - m_csv.NextRow(); - } - } - - void WriteFontIconAliases(const FontIcon* fontIcon) - { - for (const auto& header : ALIAS_HEADERS) - m_csv.WriteColumn(header); - m_csv.NextRow(); - - for (auto aliasIndex = 0u; aliasIndex < fontIcon->numAliasEntries; aliasIndex++) - { - const auto* alias = &fontIcon->fontIconAlias[aliasIndex]; - m_csv.WriteColumn(std::to_string(aliasIndex)); - m_csv.WriteColumn(TYPE_ALIAS); - - auto* knownAlias = FindKnownAliasByHash(alias->aliasHash); - if (knownAlias) - m_csv.WriteColumn(knownAlias->m_name); - else - m_csv.WriteColumn(std::format("@{:x}", alias->aliasHash)); - - const auto* referencedEntry = FindEntryByHash(fontIcon, alias->buttonHash); - if (referencedEntry && referencedEntry->fontIconName.string) - m_csv.WriteColumn(referencedEntry->fontIconName.string); - else - m_csv.WriteColumn(""); - - m_csv.NextRow(); - } - } - -public: - explicit AssetDumperFontIconInternal(std::ostream& stream) - : m_csv(stream) - { - } - - void DumpFontIcon(const FontIcon* fontIcon) - { - WriteFontIconEntries(fontIcon); - m_csv.NextRow(); - - WriteFontIconAliases(fontIcon); - } -}; - -bool AssetDumperFontIcon::ShouldDump(XAssetInfo* asset) -{ - return true; -} - -void AssetDumperFontIcon::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) -{ - const auto assetFile = context.OpenAssetFile(asset->m_name); - - if (!assetFile) - return; - - AssetDumperFontIconInternal dumper(*assetFile); - dumper.DumpFontIcon(asset->Asset()); -} diff --git a/src/ObjWriting/Game/T6/FontIcon/DumperFontIconCsvT6.cpp b/src/ObjWriting/Game/T6/FontIcon/DumperFontIconCsvT6.cpp new file mode 100644 index 00000000..a6b199ae --- /dev/null +++ b/src/ObjWriting/Game/T6/FontIcon/DumperFontIconCsvT6.cpp @@ -0,0 +1,146 @@ +#include "DumperFontIconCsvT6.h" + +#include "Csv/CsvStream.h" +#include "Game/T6/CommonT6.h" +#include "KnownFontIconAliasesT6.h" + +#include + +using namespace T6; + +namespace +{ + const std::string TYPE_ICON = "icon"; + const std::string ICON_HEADERS[]{ + "# index", + "# type", + "# name", + "# material", + "# size", + "# xScale", + "# yScale", + }; + + const std::string TYPE_ALIAS = "alias"; + const std::string ALIAS_HEADERS[]{ + "# index", + "# type", + "# alias", + "# button", + }; + + FontIconEntry* FindEntryByHash(const FontIcon& fontIcon, const int hash) + { + auto lowerBound = 0u; + auto upperBound = fontIcon.numEntries; + + while (true) + { + const auto entryIndex = (lowerBound + upperBound) / 2u; + auto* entry = &fontIcon.fontIconEntry[entryIndex]; + + if (entry->fontIconName.hash == hash) + return entry; + + if (lowerBound == upperBound) + return nullptr; + + if (entry->fontIconName.hash < hash) + lowerBound = entryIndex + 1u; + else + upperBound = entryIndex - 1u; + } + } + + class DumperFontIconCsv + { + public: + explicit DumperFontIconCsv(std::ostream& stream) + : m_csv(stream) + { + } + + void DumpFontIcon(const FontIcon& fontIcon) + { + WriteFontIconEntries(fontIcon); + m_csv.NextRow(); + + WriteFontIconAliases(fontIcon); + } + + private: + void WriteFontIconEntries(const FontIcon& fontIcon) + { + for (const auto& header : ICON_HEADERS) + m_csv.WriteColumn(header); + m_csv.NextRow(); + + for (auto iconIndex = 0u; iconIndex < fontIcon.numEntries; iconIndex++) + { + const auto* entry = &fontIcon.fontIconEntry[iconIndex]; + m_csv.WriteColumn(std::to_string(iconIndex)); + m_csv.WriteColumn(TYPE_ICON); + + if (entry->fontIconName.string) + m_csv.WriteColumn(entry->fontIconName.string); + else + m_csv.WriteColumn(""); + + if (entry->fontIconMaterialHandle && entry->fontIconMaterialHandle->info.name) + m_csv.WriteColumn(entry->fontIconMaterialHandle->info.name); + else + m_csv.WriteColumn(""); + + m_csv.WriteColumn(std::to_string(entry->fontIconSize)); + m_csv.WriteColumn(std::to_string(entry->xScale)); + m_csv.WriteColumn(std::to_string(entry->yScale)); + + m_csv.NextRow(); + } + } + + void WriteFontIconAliases(const FontIcon& fontIcon) + { + for (const auto& header : ALIAS_HEADERS) + m_csv.WriteColumn(header); + m_csv.NextRow(); + + for (auto aliasIndex = 0u; aliasIndex < fontIcon.numAliasEntries; aliasIndex++) + { + const auto* alias = &fontIcon.fontIconAlias[aliasIndex]; + m_csv.WriteColumn(std::to_string(aliasIndex)); + m_csv.WriteColumn(TYPE_ALIAS); + + auto* knownAlias = FindKnownFontIconAliasByHash(alias->aliasHash); + if (knownAlias) + m_csv.WriteColumn(knownAlias->m_name); + else + m_csv.WriteColumn(std::format("@{:x}", alias->aliasHash)); + + const auto* referencedEntry = FindEntryByHash(fontIcon, alias->buttonHash); + if (referencedEntry && referencedEntry->fontIconName.string) + m_csv.WriteColumn(referencedEntry->fontIconName.string); + else + m_csv.WriteColumn(""); + + m_csv.NextRow(); + } + } + + CsvOutputStream m_csv; + }; +} // namespace + +namespace T6 +{ + void DumpFontIconAsCsv(const AssetDumpingContext& context, const FontIcon& fontIcon) + { + const auto assetFile = context.OpenAssetFile(fontIcon.name); + + if (!assetFile) + return; + + DumperFontIconCsv dumperFontIconCsv(*assetFile); + dumperFontIconCsv.DumpFontIcon(fontIcon); + } +} // namespace T6 diff --git a/src/ObjWriting/Game/T6/FontIcon/DumperFontIconCsvT6.h b/src/ObjWriting/Game/T6/FontIcon/DumperFontIconCsvT6.h new file mode 100644 index 00000000..bbdc5649 --- /dev/null +++ b/src/ObjWriting/Game/T6/FontIcon/DumperFontIconCsvT6.h @@ -0,0 +1,9 @@ +#pragma once + +#include "Dumping/AbstractAssetDumper.h" +#include "Game/T6/T6.h" + +namespace T6 +{ + void DumpFontIconAsCsv(const AssetDumpingContext& context, const FontIcon& fontIcon); +} diff --git a/src/ObjWriting/Game/T6/FontIcon/DumperFontIconJsonT6.cpp b/src/ObjWriting/Game/T6/FontIcon/DumperFontIconJsonT6.cpp new file mode 100644 index 00000000..f532ebe3 --- /dev/null +++ b/src/ObjWriting/Game/T6/FontIcon/DumperFontIconJsonT6.cpp @@ -0,0 +1,90 @@ +#include "DumperFontIconJsonT6.h" + +#include "Game/T6/CommonT6.h" +#include "Game/T6/FontIcon/FontIconCommonT6.h" +#include "Game/T6/FontIcon/JsonFontIconT6.h" +#include "KnownFontIconAliasesT6.h" + +#include + +using namespace nlohmann; +using namespace T6; + +namespace +{ + void AddFontIconEntryAlias(JsonFontIconEntry& jFontIconEntry, const int aliasHash) + { + auto* knownAlias = FindKnownFontIconAliasByHash(aliasHash); + if (knownAlias) + { + jFontIconEntry.aliases.emplace_back(knownAlias->m_name); + } + else + { + if (!jFontIconEntry.aliasHashes.has_value()) + jFontIconEntry.aliasHashes.emplace(); + + jFontIconEntry.aliasHashes->emplace_back(static_cast(aliasHash)); + } + } + + void CreateJsonFontIconEntry(JsonFontIconEntry& jFontIconEntry, const FontIconEntry& fontIconEntry, const FontIcon& fontIcon) + { + jFontIconEntry.name = fontIconEntry.fontIconName.string; + + if (fontIconEntry.fontIconMaterialHandle && fontIconEntry.fontIconMaterialHandle->info.name) + jFontIconEntry.material = fontIconEntry.fontIconMaterialHandle->info.name; + + jFontIconEntry.size = static_cast(fontIconEntry.fontIconSize); + jFontIconEntry.scale = JsonVec2(); + jFontIconEntry.scale->x = fontIconEntry.xScale; + jFontIconEntry.scale->y = fontIconEntry.yScale; + + if (fontIcon.fontIconAlias) + { + for (auto aliasIndex = 0u; aliasIndex < fontIcon.numAliasEntries; aliasIndex++) + { + const auto& alias = fontIcon.fontIconAlias[aliasIndex]; + if (alias.buttonHash == fontIconEntry.fontIconName.hash) + AddFontIconEntryAlias(jFontIconEntry, alias.aliasHash); + } + } + } + + void CreateJsonFontIconFile(JsonFontIcon& jFontIcon, const FontIcon& fontIcon) + { + if (fontIcon.fontIconEntry == nullptr) + return; + + jFontIcon.entries.resize(fontIcon.numEntries); + for (auto i = 0u; i < fontIcon.numEntries; i++) + CreateJsonFontIconEntry(jFontIcon.entries[i], fontIcon.fontIconEntry[i], fontIcon); + } + + void DumpFontIcon(std::ostream& stream, const FontIcon& fontIcon) + { + JsonFontIcon jFontIcon; + CreateJsonFontIconFile(jFontIcon, fontIcon); + json jRoot = jFontIcon; + + jRoot["$schema"] = "http://openassettools.dev/schema/font-icon.v1.json"; + jRoot["_type"] = "font-icon"; + jRoot["_version"] = 1; + jRoot["_game"] = "t6"; + + stream << std::setw(4) << jRoot << "\n"; + } +} // namespace + +namespace T6 +{ + void DumpFontIconAsJson(const AssetDumpingContext& context, const FontIcon& fontIcon) + { + const auto assetFile = context.OpenAssetFile(font_icon::GetJsonFileNameForAssetName(fontIcon.name)); + + if (!assetFile) + return; + + DumpFontIcon(*assetFile, fontIcon); + } +} // namespace T6 diff --git a/src/ObjWriting/Game/T6/FontIcon/DumperFontIconJsonT6.h b/src/ObjWriting/Game/T6/FontIcon/DumperFontIconJsonT6.h new file mode 100644 index 00000000..7603e35d --- /dev/null +++ b/src/ObjWriting/Game/T6/FontIcon/DumperFontIconJsonT6.h @@ -0,0 +1,9 @@ +#pragma once + +#include "Dumping/AbstractAssetDumper.h" +#include "Game/T6/T6.h" + +namespace T6 +{ + void DumpFontIconAsJson(const AssetDumpingContext& context, const FontIcon& fontIcon); +} diff --git a/src/ObjWriting/Game/T6/FontIcon/DumperFontIconT6.cpp b/src/ObjWriting/Game/T6/FontIcon/DumperFontIconT6.cpp new file mode 100644 index 00000000..91dc5946 --- /dev/null +++ b/src/ObjWriting/Game/T6/FontIcon/DumperFontIconT6.cpp @@ -0,0 +1,22 @@ +#include "DumperFontIconT6.h" + +#include "DumperFontIconCsvT6.h" +#include "DumperFontIconJsonT6.h" + +using namespace T6; + +// #define DUMP_FONT_ICON_AS_CSV 1 + +bool AssetDumperFontIcon::ShouldDump(XAssetInfo* asset) +{ + return true; +} + +void AssetDumperFontIcon::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) +{ +#ifdef DUMP_FONT_ICON_AS_CSV + DumpFontIconAsCsv(context, *asset->Asset()); +#else + DumpFontIconAsJson(context, *asset->Asset()); +#endif +} diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperFontIcon.h b/src/ObjWriting/Game/T6/FontIcon/DumperFontIconT6.h similarity index 100% rename from src/ObjWriting/Game/T6/AssetDumpers/AssetDumperFontIcon.h rename to src/ObjWriting/Game/T6/FontIcon/DumperFontIconT6.h diff --git a/src/ObjWriting/Game/T6/FontIcon/KnownFontIconAliasesT6.cpp b/src/ObjWriting/Game/T6/FontIcon/KnownFontIconAliasesT6.cpp new file mode 100644 index 00000000..ef391651 --- /dev/null +++ b/src/ObjWriting/Game/T6/FontIcon/KnownFontIconAliasesT6.cpp @@ -0,0 +1,125 @@ +#include "KnownFontIconAliasesT6.h" + +#include "Game/T6/CommonT6.h" + +using namespace T6; + +namespace +{ + inline const KnownAlias KNOWN_ALIASES[]{ + KnownAlias("BUTTON_ADS"), + KnownAlias("BUTTON_CAC_NEXT"), + KnownAlias("BUTTON_CAC_PREV"), + KnownAlias("BUTTON_CANCEL"), + KnownAlias("BUTTON_CAROUSEL_STICK"), + KnownAlias("BUTTON_CREATE"), + KnownAlias("BUTTON_CYCLE_LEFT"), + KnownAlias("BUTTON_CYCLE_LEFT_ACTIVE"), + KnownAlias("BUTTON_CYCLE_RIGHT"), + KnownAlias("BUTTON_CYCLE_RIGHT_ACTIVE"), + KnownAlias("BUTTON_DELETE"), + KnownAlias("BUTTON_EDIT"), + KnownAlias("BUTTON_EMBLEM_BACKWARD"), + KnownAlias("BUTTON_EMBLEM_FLIP"), + KnownAlias("BUTTON_EMBLEM_FORWARD"), + KnownAlias("BUTTON_EMBLEM_FORWARD_BACKWARD"), + KnownAlias("BUTTON_EMBLEM_MOVE"), + KnownAlias("BUTTON_EMBLEM_OUTLINE"), + KnownAlias("BUTTON_EMBLEM_PALETTE_CYCLE"), + KnownAlias("BUTTON_EMBLEM_PALETTE_NEXT"), + KnownAlias("BUTTON_EMBLEM_PALETTE_PREV"), + KnownAlias("BUTTON_EMBLEM_RESET"), + KnownAlias("BUTTON_EMBLEM_ROTATE_LEFT"), + KnownAlias("BUTTON_EMBLEM_ROTATE_RIGHT"), + KnownAlias("BUTTON_EMBLEM_SCALE"), + KnownAlias("BUTTON_FIRE"), + KnownAlias("BUTTON_FRIENDSLIST"), + KnownAlias("BUTTON_INTERACT"), + KnownAlias("BUTTON_LOOKSTICK"), + KnownAlias("BUTTON_LOOK"), + KnownAlias("BUTTON_LUI_ALT1"), + KnownAlias("BUTTON_LUI_ALT2"), + KnownAlias("BUTTON_LUI_DPAD_ALL"), + KnownAlias("BUTTON_LUI_DPAD_D"), + KnownAlias("BUTTON_LUI_DPAD_L"), + KnownAlias("BUTTON_LUI_DPAD_RL"), + KnownAlias("BUTTON_LUI_DPAD_R"), + KnownAlias("BUTTON_LUI_DPAD_UD"), + KnownAlias("BUTTON_LUI_DPAD_U"), + KnownAlias("BUTTON_LUI_LEFT_STICK_UP"), + KnownAlias("BUTTON_LUI_LEFT_TRIGGER"), + KnownAlias("BUTTON_LUI_PRIMARY"), + KnownAlias("BUTTON_LUI_RIGHT_STICK"), + KnownAlias("BUTTON_LUI_RIGHT_TRIGGER"), + KnownAlias("BUTTON_LUI_SECONDARY"), + KnownAlias("BUTTON_LUI_SELECT"), + KnownAlias("BUTTON_LUI_SHOULDERL"), + KnownAlias("BUTTON_LUI_SHOULDERR"), + KnownAlias("BUTTON_LUI_START"), + KnownAlias("BUTTON_MOUSE_CLICK"), + KnownAlias("BUTTON_MOUSE_CLICK_ACTIVE"), + KnownAlias("BUTTON_MOUSE_EDIT"), + KnownAlias("BUTTON_MOUSE_EDIT_ACTIVE"), + KnownAlias("BUTTON_MOUSE_LEFT"), + KnownAlias("BUTTON_MOUSE_MIDDLE"), + KnownAlias("BUTTON_MOUSE_RIGHT"), + KnownAlias("BUTTON_MOVESTICK"), + KnownAlias("BUTTON_MOVE"), + KnownAlias("BUTTON_MP_CANCELCOMMAND"), + KnownAlias("BUTTON_MP_CHANGESETTINGS"), + KnownAlias("BUTTON_MP_GAMERCARD"), + KnownAlias("BUTTON_MP_GAMERREVIEW"), + KnownAlias("BUTTON_MP_JOINGAME"), + KnownAlias("BUTTON_MP_KICKPLAYER"), + KnownAlias("BUTTON_MP_LEAVEGAME"), + KnownAlias("BUTTON_MP_LOBBY_GAMERCARD"), + KnownAlias("BUTTON_MP_NOTREADY"), + KnownAlias("BUTTON_MP_PGDOWN"), + KnownAlias("BUTTON_MP_PGUP"), + KnownAlias("BUTTON_MP_READY"), + KnownAlias("BUTTON_MP_REFRESH"), + KnownAlias("BUTTON_MP_SCOREBOARD"), + KnownAlias("BUTTON_MP_SIGNIN"), + KnownAlias("BUTTON_MP_SPECNEXT"), + KnownAlias("BUTTON_MP_SPECPREV"), + KnownAlias("BUTTON_MP_STARTGAME"), + KnownAlias("BUTTON_MP_TOGGLECHASECAM"), + KnownAlias("BUTTON_MP_TOGGLEVIEW"), + KnownAlias("BUTTON_NO"), + KnownAlias("BUTTON_RECORD_VIEW_NEXT"), + KnownAlias("BUTTON_RECORD_VIEW_PREV"), + KnownAlias("BUTTON_SELECTCHOICE"), + KnownAlias("BUTTON_SP_TOGGLEMENU"), + KnownAlias("BUTTON_YES"), + KnownAlias("CP"), + KnownAlias("FONT_CAPITAL_I"), + KnownAlias("FONT_NUMBER_ZERO"), + KnownAlias("KEY_DOWN_ARROW"), + KnownAlias("KEY_LEFT_ARROW"), + KnownAlias("KEY_RIGHT_ARROW"), + KnownAlias("KEY_UP_ARROW"), + KnownAlias("MOUSE_WHEEL_DOWN"), + KnownAlias("MOUSE_WHEEL_UP"), + KnownAlias("Remote_LStick"), + }; +} + +namespace T6 +{ + KnownAlias::KnownAlias(std::string aliasName) + : m_name(std::move(aliasName)), + m_hash(Common::Com_HashString(m_name.c_str())) + { + } + + const KnownAlias* FindKnownFontIconAliasByHash(const int hash) + { + for (const auto& i : KNOWN_ALIASES) + { + if (i.m_hash == hash) + return &i; + } + + return nullptr; + } +} // namespace T6 diff --git a/src/ObjWriting/Game/T6/FontIcon/KnownFontIconAliasesT6.h b/src/ObjWriting/Game/T6/FontIcon/KnownFontIconAliasesT6.h new file mode 100644 index 00000000..bca5a007 --- /dev/null +++ b/src/ObjWriting/Game/T6/FontIcon/KnownFontIconAliasesT6.h @@ -0,0 +1,17 @@ +#pragma once + +#include + +namespace T6 +{ + class KnownAlias + { + public: + explicit KnownAlias(std::string aliasName); + + std::string m_name; + int m_hash; + }; + + const KnownAlias* FindKnownFontIconAliasByHash(int hash); +} // namespace T6 diff --git a/src/ObjWriting/Game/T6/ObjWriterT6.cpp b/src/ObjWriting/Game/T6/ObjWriterT6.cpp index bb4bcb15..971462b8 100644 --- a/src/ObjWriting/Game/T6/ObjWriterT6.cpp +++ b/src/ObjWriting/Game/T6/ObjWriterT6.cpp @@ -1,6 +1,5 @@ #include "ObjWriterT6.h" -#include "AssetDumpers/AssetDumperFontIcon.h" #include "AssetDumpers/AssetDumperGfxImage.h" #include "AssetDumpers/AssetDumperLeaderboardDef.h" #include "AssetDumpers/AssetDumperLocalizeEntry.h" @@ -23,6 +22,7 @@ #include "AssetDumpers/AssetDumperWeaponCamo.h" #include "AssetDumpers/AssetDumperXModel.h" #include "AssetDumpers/AssetDumperZBarrier.h" +#include "FontIcon/DumperFontIconT6.h" #include "Game/T6/GameAssetPoolT6.h" #include "Material/DumperMaterialT6.h" #include "ObjWriting.h"