/*
* @Author: 自动生成
* @Description: 文本样式预设系统 - 多语言下统一的字号/行距/字间距方案
* @Date: 2026-05-10
*
* 用法说明:
* - 给每个 MultilingualTextMono 选一个 Preset 枚举(None=不参与预设)
* - 在 Resources/DataAssets/TextStylePresetDataAssets.asset 里给每个 Preset 配各语言的 MultiTextConfig
* - 运行时三级 fallback:TMP 自己的 TextCfg(override) → 全局 Preset → 不动
*/
using System;
using System.Collections.Generic;
using Logic.Multilingual;
using UnityEngine;
namespace TH1_DataAssetsScript
{
///
/// 文本样式预设。给同类 UI 文本定一套通用的多语言字号/行距方案,避免每个 prefab 单独配。
///
public enum TextStylePreset
{
None = 0, // 不使用预设(仅用 prefab 上的 TextCfg override 或保持原值)
ButtonText, // 按钮文字
Title, // 大标题(面板顶上的标题)
BodyText, // 正文段落(教程、Wiki、剧情)
Tooltip, // 浮窗提示 / 小字
DialogueText, // 对话文本(角色对话、剧情独白)
}
[Serializable]
[CreateAssetMenu(fileName = "TextStylePresetDataAssets", menuName = "TH1 Game Data/Text Style Preset Data Asset")]
public class TextStylePresetDataAssets : ScriptableObject
{
public List Presets = new List();
///
/// 取某个 Preset 在某语言下的样式。三级 fallback:
/// 1. preset 下找当前语言的 cfg
/// 2. 找不到则找该 preset 下的 EN cfg
/// 3. 还找不到返回 null
/// 注意:None 也是合法的 Preset 值,作为"全局默认通用方案"参与查表,
/// 不在这里 early return(让美术能配 None 这一档作为基础默认)。
///
public MultiTextConfig GetConfig(TextStylePreset preset, MultilingualType lang)
{
foreach (var entry in Presets)
{
if (entry.Preset != preset) continue;
MultiTextConfig hit = null, fallback = null;
foreach (var cfg in entry.LangCfgs)
{
if (cfg.Type == lang) { hit = cfg; break; }
if (cfg.Type == MultilingualType.EN) fallback = cfg;
}
return hit ?? fallback;
}
return null;
}
}
///
/// 一个 Preset 对应的所有语言配置项
///
[Serializable]
public class TextStylePresetEntry
{
public TextStylePreset Preset;
public List LangCfgs = new List();
}
}