using System.Collections.Generic; using System.Linq; using TMPro; using UnityEngine; namespace Superlazy.UI { public static class SLUIUtil { private static Dictionary fonts;// = new Dictionary(); private static Dictionary> fontMaterials;// = new Dictionary>(); 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("Fonts"); var fontMaterialKeys = SLSystem.Data["FontMaterials"]; fonts = new Dictionary(); fontMaterials = new Dictionary>(); foreach (var lang in languages) { if (lang["Font"] == false) continue; // TODO: 언어옵션에 폰트 세팅 안하면? string fontPath = lang["Font"]; if (fonts.ContainsKey(fontPath)) continue; var font = SLResources.Load(fontPath); fonts.Add(fontPath, font); var fontMaterial = new Dictionary(); 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; } } }