using System.Collections.Generic; using UnityEngine; namespace TyphoonFontTool { /// /// 字体码点值数据 /// public class FontSourceData : ScriptableObject { //关联的字体文件 public Font Font; //码点值 public List Codes = new List(); //字符字典 private CharacterMap _map = null; //字符字典 private CharacterMap Map { get { if (_map != null) { var hashCode = Codes.GetHashCode(); if (_map.IsChanged(hashCode)) { _map = null; } } if (_map == null) { _map = new CharacterMap(Codes); } return _map; } } private class CharacterMap { private int _hashCode; private HashSet _codes; private HashSet _characters; public CharacterMap(List codes) { _hashCode = codes.GetHashCode(); _codes = new HashSet(); _characters = new HashSet(); foreach (var code in codes) { _codes.Add(code); } foreach (var code in codes) { _characters.Add(char.ConvertFromUtf32(code)); } } public bool IsChanged(int hashCode) { return hashCode != _hashCode; } public bool IsContain(string character) { return _characters.Contains(character); } public bool IsContain(int code) { return _codes.Contains(code); } } //判断是否存在字符 public bool IsContains(string character) { return Map.IsContain(character); } //判断是否存在字符 public bool IsContains(int code) { return Map.IsContain(code); } } }