79 lines
2.9 KiB (Stored with Git LFS)
C#
79 lines
2.9 KiB (Stored with Git LFS)
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
|
|
namespace Superlazy.UI
|
|
{
|
|
public static class SLUIUtil
|
|
{
|
|
private static Dictionary<string, TMP_FontAsset> fonts;// = new Dictionary<string, TMP_FontAsset>();
|
|
private static Dictionary<string, Dictionary<string, Material>> fontMaterials;// = new Dictionary<string, Dictionary<string, Material>>();
|
|
|
|
public static void UpdateFont(TextMeshProUGUI text)
|
|
{
|
|
if (InitFont() == false) return;
|
|
|
|
var keys = SLSystem.Data["FontMaterials"];
|
|
var lang = SLGame.Session["Option"]["Language"];
|
|
var language = SLSystem.Data["Languages"][lang.ToString()];
|
|
|
|
if (language["Font"] == false) return; // TODO: 폰트 없으면 별도 세팅 안하는것으로?
|
|
|
|
// 폰트가 없거나 Material 없는 부분 예외처리가 필요할려나?
|
|
var font = fonts[language["Font"]];
|
|
if (text.font != font)
|
|
{
|
|
text.font = font;
|
|
|
|
var materialName = text.fontSharedMaterial.name;
|
|
if (keys.Where(e => materialName.Contains(e)).Any())
|
|
{
|
|
text.fontSharedMaterial = fontMaterials[language["Font"]][keys.Where(e => materialName.Contains(e)).FirstOrDefault()];
|
|
}
|
|
else
|
|
{
|
|
text.fontSharedMaterial = font.material;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static bool InitFont()
|
|
{
|
|
if (fonts != null) return true;
|
|
|
|
var languages = SLSystem.Data["Languages"];
|
|
|
|
var allfontMaterials = SLResources.LoadAll<Material>("Fonts");
|
|
var fontMaterialKeys = SLSystem.Data["FontMaterials"];
|
|
|
|
fonts = new Dictionary<string, TMP_FontAsset>();
|
|
fontMaterials = new Dictionary<string, Dictionary<string, Material>>();
|
|
foreach (var lang in languages)
|
|
{
|
|
if (lang["Font"] == false) continue; // TODO: 언어옵션에 폰트 세팅 안하면?
|
|
|
|
string fontPath = lang["Font"];
|
|
|
|
if (fonts.ContainsKey(fontPath)) continue;
|
|
|
|
var font = SLResources.Load<TMP_FontAsset>(fontPath);
|
|
fonts.Add(fontPath, font);
|
|
|
|
var fontMaterial = new Dictionary<string, Material>();
|
|
var fontName = fontPath.Split('/').Last();
|
|
foreach (var fontMaterialKey in fontMaterialKeys)
|
|
{
|
|
var material = allfontMaterials.Where(e => e.name.Contains(fontPath) && e.name.Contains(fontMaterialKey)).FirstOrDefault();
|
|
if (material != null)
|
|
{
|
|
fontMaterial.Add(fontMaterialKey, material);
|
|
}
|
|
}
|
|
fontMaterials.Add(fontPath, fontMaterial);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
} |