2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2025-09-01 14:37:25 +00:00

chore: dump font icons as json instead of csv

This commit is contained in:
Jan Laupetin
2025-07-22 22:48:48 +01:00
parent 745f545342
commit 9f4727789a
13 changed files with 483 additions and 265 deletions

View File

@@ -0,0 +1,23 @@
#include "FontIconCommonT6.h"
#include "Utils/StringUtils.h"
#include <filesystem>
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

View File

@@ -0,0 +1,8 @@
#pragma once
#include <string>
namespace T6::font_icon
{
std::string GetJsonFileNameForAssetName(const std::string& assetName);
}

View File

@@ -0,0 +1,33 @@
#pragma once
#include "Json/JsonCommon.h"
#include "Json/JsonExtension.h"
#include <memory>
#include <nlohmann/json.hpp>
#include <optional>
#include <string>
#include <vector>
namespace T6
{
class JsonFontIconEntry
{
public:
std::string name;
std::string material;
unsigned size;
std::optional<JsonVec2> scale;
std::vector<std::string> aliases;
std::optional<std::vector<unsigned>> aliasHashes;
};
NLOHMANN_DEFINE_TYPE_EXTENSION(JsonFontIconEntry, name, material, size, scale, aliases, aliasHashes);
class JsonFontIcon
{
public:
std::vector<JsonFontIconEntry> entries;
};
NLOHMANN_DEFINE_TYPE_EXTENSION(JsonFontIcon, entries);
} // namespace T6

View File

@@ -1,264 +0,0 @@
#include "AssetDumperFontIcon.h"
#include "Csv/CsvStream.h"
#include "Game/T6/CommonT6.h"
#include <format>
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<FontIcon>* asset)
{
return true;
}
void AssetDumperFontIcon::DumpAsset(AssetDumpingContext& context, XAssetInfo<FontIcon>* asset)
{
const auto assetFile = context.OpenAssetFile(asset->m_name);
if (!assetFile)
return;
AssetDumperFontIconInternal dumper(*assetFile);
dumper.DumpFontIcon(asset->Asset());
}

View File

@@ -0,0 +1,146 @@
#include "DumperFontIconCsvT6.h"
#include "Csv/CsvStream.h"
#include "Game/T6/CommonT6.h"
#include "KnownFontIconAliasesT6.h"
#include <format>
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

View File

@@ -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);
}

View File

@@ -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 <nlohmann/json.hpp>
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<unsigned>(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<unsigned>(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

View File

@@ -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);
}

View File

@@ -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<FontIcon>* asset)
{
return true;
}
void AssetDumperFontIcon::DumpAsset(AssetDumpingContext& context, XAssetInfo<FontIcon>* asset)
{
#ifdef DUMP_FONT_ICON_AS_CSV
DumpFontIconAsCsv(context, *asset->Asset());
#else
DumpFontIconAsJson(context, *asset->Asset());
#endif
}

View File

@@ -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

View File

@@ -0,0 +1,17 @@
#pragma once
#include <string>
namespace T6
{
class KnownAlias
{
public:
explicit KnownAlias(std::string aliasName);
std::string m_name;
int m_hash;
};
const KnownAlias* FindKnownFontIconAliasByHash(int hash);
} // namespace T6

View File

@@ -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"