thai
This commit is contained in:
parent
c5ec2e1853
commit
6e799005ad
@ -7,6 +7,7 @@ using System;
|
|||||||
using UnityEngine.TextCore.LowLevel;
|
using UnityEngine.TextCore.LowLevel;
|
||||||
using TMPro.EditorUtilities;
|
using TMPro.EditorUtilities;
|
||||||
using Object = UnityEngine.Object;
|
using Object = UnityEngine.Object;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
namespace BFEditor.Resource
|
namespace BFEditor.Resource
|
||||||
{
|
{
|
||||||
@ -28,6 +29,7 @@ namespace BFEditor.Resource
|
|||||||
private const string AssetNumberName = "font_number_sdf.asset";
|
private const string AssetNumberName = "font_number_sdf.asset";
|
||||||
private const string AssetBattleName = "font_battle_sdf.asset";
|
private const string AssetBattleName = "font_battle_sdf.asset";
|
||||||
private const string AssetThaiName = "font_thai_sdf.asset";
|
private const string AssetThaiName = "font_thai_sdf.asset";
|
||||||
|
private const string AssetJaName = "font_ja_sdf.asset";
|
||||||
|
|
||||||
private const string DevStrPath = "Assets/Editor/BFResourceTools/FontTools/cn_3900.txt";
|
private const string DevStrPath = "Assets/Editor/BFResourceTools/FontTools/cn_3900.txt";
|
||||||
private const string CommonCNWordsPath = "Assets/Editor/BFResourceTools/FontTools/cn_1200.txt";
|
private const string CommonCNWordsPath = "Assets/Editor/BFResourceTools/FontTools/cn_1200.txt";
|
||||||
@ -158,6 +160,10 @@ namespace BFEditor.Resource
|
|||||||
var thaiFont = AssetDatabase.LoadAssetAtPath<Font>("Assets/arts/fonts/tmpfonts/default/tmpfont/font_thai.ttf");
|
var thaiFont = AssetDatabase.LoadAssetAtPath<Font>("Assets/arts/fonts/tmpfonts/default/tmpfont/font_thai.ttf");
|
||||||
GenTMPFontAsset(thaiFont, new TTFInfo("cn", "Assets/arts/fonts/tmpfonts/default/tmpfont", "Assets/arts/fonts/tmpfonts/default/tmpfont", 512, new List<string>()), AssetThaiName, isdevelop);
|
GenTMPFontAsset(thaiFont, new TTFInfo("cn", "Assets/arts/fonts/tmpfonts/default/tmpfont", "Assets/arts/fonts/tmpfonts/default/tmpfont", 512, new List<string>()), AssetThaiName, isdevelop);
|
||||||
|
|
||||||
|
// 日语
|
||||||
|
var jaFont = AssetDatabase.LoadAssetAtPath<Font>("Assets/arts/fonts/tmpfonts/default/tmpfont/font_ja.ttf");
|
||||||
|
GenTMPFontAsset(jaFont, new TTFInfo("cn", "Assets/arts/fonts/tmpfonts/default/tmpfont", "Assets/arts/fonts/tmpfonts/default/tmpfont", 512, new List<string>()), AssetJaName, isdevelop);
|
||||||
|
|
||||||
// 战斗用
|
// 战斗用
|
||||||
// var battleFont = AssetDatabase.LoadAssetAtPath<Font>("Assets/arts/fonts/tmpfonts/battle/font_battle.ttf");
|
// var battleFont = AssetDatabase.LoadAssetAtPath<Font>("Assets/arts/fonts/tmpfonts/battle/font_battle.ttf");
|
||||||
// GenTMPFontAsset(battleFont, new TTFInfo("cn", "Assets/arts/fonts/tmpfonts/battle", "Assets/arts/fonts/tmpfonts/battle", 1024, new List<string>()), AssetBattleName, isdevelop);
|
// GenTMPFontAsset(battleFont, new TTFInfo("cn", "Assets/arts/fonts/tmpfonts/battle", "Assets/arts/fonts/tmpfonts/battle", 1024, new List<string>()), AssetBattleName, isdevelop);
|
||||||
@ -238,6 +244,30 @@ namespace BFEditor.Resource
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static private void GetThaiWords(List<string> luaFolderPaths, out string words)
|
||||||
|
{
|
||||||
|
words = string.Empty;
|
||||||
|
//是否开发模式
|
||||||
|
var text = LocalizationMenuTools.CatWordsFromLuaConfig(new List<string>(){Application.dataPath + "/Developer/lua/app/config/strings/th"});
|
||||||
|
text += "ิ";
|
||||||
|
text += "ี";
|
||||||
|
text += "ึ";
|
||||||
|
text += "ื";
|
||||||
|
text += "ำ";
|
||||||
|
text += "ั";
|
||||||
|
text += "ํ";
|
||||||
|
|
||||||
|
text += "่";
|
||||||
|
text += "้";
|
||||||
|
text += "๊";
|
||||||
|
text += "๋";
|
||||||
|
foreach (var w in text)
|
||||||
|
{
|
||||||
|
if (!words.Contains(w.ToString()))
|
||||||
|
words += w;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static private void GenTMPFontAsset(Font font, TTFInfo ttfInfo, string assetName, bool isdevelop)
|
static private void GenTMPFontAsset(Font font, TTFInfo ttfInfo, string assetName, bool isdevelop)
|
||||||
{
|
{
|
||||||
EditorUtility.DisplayProgressBar("生成TMP字体", "正在生成中...", 0f);
|
EditorUtility.DisplayProgressBar("生成TMP字体", "正在生成中...", 0f);
|
||||||
@ -290,6 +320,20 @@ namespace BFEditor.Resource
|
|||||||
EditorUtility.SetDirty(fontAsset);
|
EditorUtility.SetDirty(fontAsset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 泰语使用静态并特殊处理
|
||||||
|
if (assetName == AssetThaiName)
|
||||||
|
{
|
||||||
|
var luaFolderPaths = new List<string>();
|
||||||
|
luaFolderPaths.Add(Application.dataPath + "/Developer/lua/app/config/strings/th");
|
||||||
|
var words = string.Empty;
|
||||||
|
GetThaiWords(luaFolderPaths, out words);
|
||||||
|
Debug.Log("泰语字符集:" + words);
|
||||||
|
fontAsset.TryAddCharacters(words);
|
||||||
|
fontAsset.atlasPopulationMode = AtlasPopulationMode.Static;
|
||||||
|
// 修订部分重音位置
|
||||||
|
_Adjust(fontAsset);
|
||||||
|
}
|
||||||
|
|
||||||
if (null != fontAsset)
|
if (null != fontAsset)
|
||||||
{
|
{
|
||||||
// DealWithMetric(fontAsset);
|
// DealWithMetric(fontAsset);
|
||||||
@ -306,6 +350,11 @@ namespace BFEditor.Resource
|
|||||||
{
|
{
|
||||||
fontAsset.fallbackFontAssetTable.Add(fallbackAsset);
|
fontAsset.fallbackFontAssetTable.Add(fallbackAsset);
|
||||||
}
|
}
|
||||||
|
fallbackAsset = AssetDatabase.LoadAssetAtPath<TMP_FontAsset>(Path.Combine(assetDirPath, AssetJaName));
|
||||||
|
if (fallbackAsset != null)
|
||||||
|
{
|
||||||
|
fontAsset.fallbackFontAssetTable.Add(fallbackAsset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EditorUtility.ClearProgressBar();
|
EditorUtility.ClearProgressBar();
|
||||||
@ -562,6 +611,147 @@ namespace BFEditor.Resource
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
// 针对泰语处理
|
||||||
|
static bool overrideAll = true;
|
||||||
|
static float wannayukHeight = 10f;
|
||||||
|
static float aumXPlacementAfter = -35f;
|
||||||
|
static float aumXPlacementBefore = 10f;
|
||||||
|
static void _Adjust(TMP_FontAsset fontAsset)
|
||||||
|
{
|
||||||
|
if (fontAsset == null)
|
||||||
|
{
|
||||||
|
Debug.Log("No FontAsset selected");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var glyphPairAdjustmentRecords = new List<TMP_GlyphPairAdjustmentRecord>(fontAsset.fontFeatureTable.glyphPairAdjustmentRecords);
|
||||||
|
var lookupTable = fontAsset.characterLookupTable;
|
||||||
|
|
||||||
|
var glyphPairAdjustmentRecordLookupDictionary =
|
||||||
|
(Dictionary<uint, TMP_GlyphPairAdjustmentRecord>) fontAsset.fontFeatureTable
|
||||||
|
.GetType()
|
||||||
|
.GetField("m_GlyphPairAdjustmentRecordLookupDictionary", BindingFlags.NonPublic | BindingFlags.Instance)?
|
||||||
|
.GetValue(fontAsset.fontFeatureTable);
|
||||||
|
|
||||||
|
int[] saras = new int[7];
|
||||||
|
int[] wannayuks = new int[4];
|
||||||
|
|
||||||
|
//get sara
|
||||||
|
saras[0] = (int) lookupTable[GetUnicodeCharacter("ิ")].glyphIndex; // อิ
|
||||||
|
saras[1] = (int) lookupTable[GetUnicodeCharacter("ี")].glyphIndex; // อี
|
||||||
|
saras[2] = (int) lookupTable[GetUnicodeCharacter("ึ")].glyphIndex; // อึ
|
||||||
|
saras[3] = (int) lookupTable[GetUnicodeCharacter("ื")].glyphIndex; // อื
|
||||||
|
saras[4] = (int) lookupTable[GetUnicodeCharacter("ำ")].glyphIndex; // ำ
|
||||||
|
saras[5] = (int) lookupTable[GetUnicodeCharacter("ั")].glyphIndex; // ั
|
||||||
|
saras[6] = (int) lookupTable[GetUnicodeCharacter("ํ")].glyphIndex; // ํ
|
||||||
|
//get wanna yuk
|
||||||
|
wannayuks[0] = (int) lookupTable[GetUnicodeCharacter("่")].glyphIndex; //เอก
|
||||||
|
wannayuks[1] = (int) lookupTable[GetUnicodeCharacter("้")].glyphIndex; //โท
|
||||||
|
wannayuks[2] = (int) lookupTable[GetUnicodeCharacter("๊")].glyphIndex; //ตรี
|
||||||
|
wannayuks[3] = (int) lookupTable[GetUnicodeCharacter("๋")].glyphIndex; //จัตวา
|
||||||
|
int recordAdd = 0;
|
||||||
|
foreach (var sara in saras)
|
||||||
|
{
|
||||||
|
foreach (var wannayuk in wannayuks)
|
||||||
|
{
|
||||||
|
float xPlacement = sara == saras[4] || sara == saras[6] ? aumXPlacementAfter : 0;
|
||||||
|
|
||||||
|
TMP_GlyphValueRecord saraPosition = new TMP_GlyphValueRecord(0, 0, 0, 0);
|
||||||
|
TMP_GlyphAdjustmentRecord saraGlyph = new TMP_GlyphAdjustmentRecord((uint) sara, saraPosition);
|
||||||
|
|
||||||
|
TMP_GlyphValueRecord wannayukPosition = new TMP_GlyphValueRecord(xPlacement, wannayukHeight, 0, 0);
|
||||||
|
TMP_GlyphAdjustmentRecord wannayukGlyph = new TMP_GlyphAdjustmentRecord((uint) wannayuk, wannayukPosition);
|
||||||
|
|
||||||
|
var saraThenWannayukGlyphPair = new TMP_GlyphPairAdjustmentRecord(saraGlyph, wannayukGlyph);
|
||||||
|
|
||||||
|
if (sara == saras[4] || sara == saras[6])
|
||||||
|
{
|
||||||
|
xPlacement = aumXPlacementBefore;
|
||||||
|
wannayukPosition = new TMP_GlyphValueRecord(xPlacement, wannayukHeight, 0, 0);
|
||||||
|
wannayukGlyph = new TMP_GlyphAdjustmentRecord((uint) wannayuk, wannayukPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
var wannayukThenSaraGlyphPair = new TMP_GlyphPairAdjustmentRecord(wannayukGlyph, saraGlyph);
|
||||||
|
|
||||||
|
uint firstPairKey = saraThenWannayukGlyphPair.firstAdjustmentRecord.glyphIndex << 16 | saraThenWannayukGlyphPair.secondAdjustmentRecord.glyphIndex;
|
||||||
|
uint secondPairKey = wannayukThenSaraGlyphPair.firstAdjustmentRecord.glyphIndex << 16 | wannayukThenSaraGlyphPair.secondAdjustmentRecord.glyphIndex;
|
||||||
|
|
||||||
|
if (overrideAll)
|
||||||
|
{
|
||||||
|
glyphPairAdjustmentRecords.RemoveAll(record => IsGlyphPairEqual(record, saraThenWannayukGlyphPair) ||
|
||||||
|
IsGlyphPairEqual(record, wannayukThenSaraGlyphPair));
|
||||||
|
|
||||||
|
glyphPairAdjustmentRecords.Add(saraThenWannayukGlyphPair);
|
||||||
|
glyphPairAdjustmentRecords.Add(wannayukThenSaraGlyphPair);
|
||||||
|
|
||||||
|
if (glyphPairAdjustmentRecordLookupDictionary != null && !glyphPairAdjustmentRecordLookupDictionary.ContainsKey(firstPairKey))
|
||||||
|
{
|
||||||
|
glyphPairAdjustmentRecordLookupDictionary.Add(firstPairKey, saraThenWannayukGlyphPair);
|
||||||
|
}
|
||||||
|
|
||||||
|
recordAdd += 2;
|
||||||
|
}
|
||||||
|
else if (glyphPairAdjustmentRecordLookupDictionary != null)
|
||||||
|
{
|
||||||
|
if (!glyphPairAdjustmentRecordLookupDictionary.ContainsKey(firstPairKey))
|
||||||
|
{
|
||||||
|
glyphPairAdjustmentRecords.Add(saraThenWannayukGlyphPair);
|
||||||
|
recordAdd++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!glyphPairAdjustmentRecordLookupDictionary.ContainsKey(secondPairKey))
|
||||||
|
{
|
||||||
|
glyphPairAdjustmentRecords.Add(wannayukThenSaraGlyphPair);
|
||||||
|
recordAdd++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (recordAdd > 0)
|
||||||
|
{
|
||||||
|
fontAsset.fontFeatureTable.glyphPairAdjustmentRecords = glyphPairAdjustmentRecords;
|
||||||
|
fontAsset.fontFeatureTable.SortGlyphPairAdjustmentRecords();
|
||||||
|
EditorUtility.SetDirty(fontAsset);
|
||||||
|
AssetDatabase.SaveAssets();
|
||||||
|
Canvas.ForceUpdateCanvases();
|
||||||
|
UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log("Adjust font : <color=#2bcaff>" + fontAsset.name + "</color>" +
|
||||||
|
" Height offset : <color=#d8ff2b>" + wannayukHeight + "</color>" +
|
||||||
|
" Number of adjustment add : <color=#5dfa41>" + recordAdd + "</color>");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _Clear(TMP_FontAsset fontAsset)
|
||||||
|
{
|
||||||
|
fontAsset.fontFeatureTable.glyphPairAdjustmentRecords = new List<TMP_GlyphPairAdjustmentRecord>();
|
||||||
|
EditorUtility.SetDirty(fontAsset);
|
||||||
|
AssetDatabase.SaveAssets();
|
||||||
|
Canvas.ForceUpdateCanvases();
|
||||||
|
UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint GetUnicodeCharacter (string source)
|
||||||
|
{
|
||||||
|
uint unicode;
|
||||||
|
|
||||||
|
if (source.Length == 1)
|
||||||
|
unicode = source[0];
|
||||||
|
else if (source.Length == 6)
|
||||||
|
unicode = (uint)TMP_TextUtilities.StringHexToInt(source.Replace("\\u", ""));
|
||||||
|
else
|
||||||
|
unicode = (uint)TMP_TextUtilities.StringHexToInt(source.Replace("\\U", ""));
|
||||||
|
|
||||||
|
return unicode;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool IsGlyphPairEqual(TMP_GlyphPairAdjustmentRecord a, TMP_GlyphPairAdjustmentRecord b)
|
||||||
|
{
|
||||||
|
return a.firstAdjustmentRecord.glyphIndex == b.firstAdjustmentRecord.glyphIndex &&
|
||||||
|
a.secondAdjustmentRecord.glyphIndex == b.secondAdjustmentRecord.glyphIndex;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user