namespace GFramework.Godot.Text.Effects;
///
/// 富文本效果基类,提供统一的标签命名和环境参数读取辅助逻辑。
/// 该基类只负责 Godot 适配细节,不承载业务语义分层。
///
[Tool]
public abstract partial class RichTextEffectBase : RichTextEffect
{
///
/// 获取当前效果对应的 BBCode 标签名。
///
protected abstract string TagName { get; }
///
/// 获取 Godot 识别当前效果所需的 `bbcode` 属性。
/// 属性名使用小写是 Godot `RichTextEffect` 的约定,不是框架对公共成员命名的放宽。
///
public string bbcode => TagName;
///
/// 尝试从字符环境参数中读取布尔值。
///
/// 当前字符变换上下文。
/// 参数键。
/// 读取失败时使用的默认值。
/// 最终布尔值;当环境参数不存在或类型不是 时返回默认值。
protected bool GetBool(CharFXTransform transform, string key, bool defaultValue = false)
{
if (transform.Env.TryGetValue(Variant.From(key), out var value) &&
value.VariantType == Variant.Type.Bool)
{
return value.AsBool();
}
return defaultValue;
}
///
/// 尝试从字符环境参数中读取浮点值。
///
/// 当前字符变换上下文。
/// 参数键。
/// 读取失败时使用的默认值。
///
/// 最终浮点值;当环境参数不存在,或类型既不是 也不是
/// 时返回默认值。
///
protected float GetFloat(CharFXTransform transform, string key, float defaultValue)
{
if (transform.Env.TryGetValue(Variant.From(key), out var value) &&
(value.VariantType == Variant.Type.Float || value.VariantType == Variant.Type.Int))
{
return (float)value.AsDouble();
}
return defaultValue;
}
///
/// 尝试从字符环境参数中读取颜色值。
///
/// 当前字符变换上下文。
/// 参数键。
/// 读取失败时使用的默认值。
/// 最终颜色值。
protected Color GetColor(CharFXTransform transform, string key, Color defaultValue)
{
if (transform.Env.TryGetValue(Variant.From(key), out var value) &&
value.VariantType == Variant.Type.Color)
{
return (Color)value;
}
return defaultValue;
}
///
/// 从字符环境参数中应用可见性开关。
///
/// 当前字符变换上下文。
/// 默认可见性。
protected void ApplyVisibility(CharFXTransform transform, bool defaultValue = true)
{
transform.Visible = GetBool(transform, "visible", defaultValue);
}
}