ProjectDDD/Packages/SLUnity/SLUI/SLUIUtil.cs

79 lines
2.9 KiB
C#
Raw Normal View History

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