com.alicizax.unity.framework/Runtime/Localization/ScriptableObject/GameLocaizationTable.cs
陈思海 6397cc03b2 框架大更新
1.进步优化UI系统 加载问题 性能问题 Canvas重绘问题 边界处理问题
2.优化对象池和游戏对象池的性能 游戏对象池根据窗口 策略定期清理
3.优化整个AppService 和ServiceWorld结构 固定三大类 具体参考代码
2026-03-31 17:25:20 +08:00

96 lines
2.6 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
namespace AlicizaX.Localization
{
public class GameLocaizationTable : ScriptableObject
{
#if UNITY_EDITOR
[SerializeField] internal string GenerateScriptCodePath = string.Empty;
[Serializable]
public struct SheetItem
{
public int Id;
public string Key;
public bool IsGen;
public SheetItem(string key, int id, bool isGen)
{
Id = id;
Key = key;
IsGen = isGen;
}
}
[Serializable]
public struct TableData
{
public int Id;
public string SectionName;
public List<SheetItem> SectionSheet;
public TableData(string section, int id)
{
Id = id;
SectionName = section;
SectionSheet = new List<SheetItem>();
}
}
public List<TableData> TableSheet = new();
#endif
public List<LocalizationLanguage> Languages = new();
[NonSerialized] private Dictionary<string, LocalizationLanguage> _languageMap;
[NonSerialized] private int _languageMapVersion = -1;
internal LocalizationLanguage GetLanguage(string languageCode)
{
if (string.IsNullOrEmpty(languageCode) || Languages == null || Languages.Count == 0)
{
return null;
}
EnsureLanguageMap();
_languageMap.TryGetValue(languageCode, out LocalizationLanguage language);
return language;
}
public void InvalidateLanguageLookup()
{
_languageMapVersion = -1;
}
private void EnsureLanguageMap()
{
int count = Languages?.Count ?? 0;
if (_languageMap != null && _languageMapVersion == count)
{
return;
}
_languageMap ??= new Dictionary<string, LocalizationLanguage>(count, StringComparer.Ordinal);
_languageMap.Clear();
if (Languages != null)
{
for (int i = 0; i < Languages.Count; i++)
{
LocalizationLanguage language = Languages[i];
if (language == null || string.IsNullOrEmpty(language.LanguageName))
{
continue;
}
_languageMap[language.LanguageName] = language;
}
}
_languageMapVersion = count;
}
}
}