forked from chinosk/gkms-localify-dmm
只替换普通字体,保留特殊数字字体
This commit is contained in:
parent
8a0e332292
commit
635062bb24
|
|
@ -519,6 +519,8 @@ namespace GakumasLocal::HookMain {
|
|||
"TMPro", "TMP_Text", "get_font");
|
||||
static auto set_font = Il2cppUtils::GetMethod("Unity.TextMeshPro.dll",
|
||||
"TMPro", "TMP_Text", "set_font");
|
||||
static auto get_name = Il2cppUtils::GetMethod("UnityEngine.CoreModule.dll",
|
||||
"UnityEngine", "Object", "get_name");
|
||||
// static auto set_fontMaterial = Il2cppUtils::GetMethod("Unity.TextMeshPro.dll",
|
||||
// "TMPro", "TMP_Text", "set_fontMaterial");
|
||||
// static auto ForceMeshUpdate = Il2cppUtils::GetMethod("Unity.TextMeshPro.dll",
|
||||
|
|
@ -532,21 +534,32 @@ namespace GakumasLocal::HookMain {
|
|||
static auto UpdateFontAssetData = Il2cppUtils::GetMethod("Unity.TextMeshPro.dll", "TMPro",
|
||||
"TMP_FontAsset", "UpdateFontAssetData");
|
||||
|
||||
auto fontAsset = get_font->Invoke<void*>(TMP_Textself);
|
||||
if (!fontAsset) {
|
||||
Log::Error("UpdateFont: fontAsset is null.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查字体名称,跳过 CampusAlphanumeric 系列字体
|
||||
auto fontAssetName = get_name->Invoke<Il2cppString*>(fontAsset);
|
||||
if (fontAssetName) {
|
||||
std::string fontName = fontAssetName->ToString();
|
||||
std::transform(fontName.begin(), fontName.end(), fontName.begin(), ::tolower);
|
||||
if (fontName.find("campusalphanumeric") != std::string::npos) {
|
||||
return; // 保持原版数字字体
|
||||
}
|
||||
}
|
||||
|
||||
auto newFont = GetReplaceFont();
|
||||
if (!newFont) return;
|
||||
|
||||
auto fontAsset = get_font->Invoke<void*>(TMP_Textself);
|
||||
if (fontAsset) {
|
||||
set_sourceFontFile->Invoke<void>(fontAsset, newFont);
|
||||
if (!updatedFontPtrs.contains(fontAsset)) {
|
||||
updatedFontPtrs.emplace(fontAsset);
|
||||
UpdateFontAssetData->Invoke<void>(fontAsset);
|
||||
}
|
||||
if (updatedFontPtrs.size() > 200) updatedFontPtrs.clear();
|
||||
}
|
||||
else {
|
||||
Log::Error("UpdateFont: fontAsset is null.");
|
||||
set_sourceFontFile->Invoke<void>(fontAsset, newFont);
|
||||
if (!updatedFontPtrs.contains(fontAsset)) {
|
||||
updatedFontPtrs.emplace(fontAsset);
|
||||
UpdateFontAssetData->Invoke<void>(fontAsset);
|
||||
}
|
||||
if (updatedFontPtrs.size() > 200) updatedFontPtrs.clear();
|
||||
|
||||
set_font->Invoke<void>(TMP_Textself, fontAsset);
|
||||
|
||||
// auto fontMaterial = get_material->Invoke<void*>(fontAsset);
|
||||
|
|
|
|||
Loading…
Reference in New Issue