GFramework/GFramework.Godot/Text/Effects/RichTextEffectBase.cs
GeWuYou e5ad29314e feat(text): 添加富文本效果系统和颜色标记功能
- 实现 RichTextEffectBase 基类提供统一的标签命名和参数读取逻辑
- 添加 RichTextBlueEffect、RichTextGoldEffect、RichTextGreenEffect 和 RichTextRedEffect 颜色标记效果
- 添加 RichTextFadeInEffect、RichTextFlyInEffect、RichTextJitterEffect 和 RichTextSineEffect 动画效果
- 实现 DefaultRichTextEffectRegistry 默认效果注册表
- 创建 GfRichTextLabel 富文本标签宿主组件
- 添加 IRichTextEffectRegistry 效果注册表接口
- 实现 RichTextEffectEntry、RichTextEffectsController 和 RichTextProfile 配置管理类
- 添加 RichTextMarkup 语义化标签构建辅助方法
- 创建 RichTextMarkupTests 和 RichTextProfileTests 单元测试
2026-04-18 11:58:40 +08:00

82 lines
2.8 KiB
C#

namespace GFramework.Godot.Text.Effects;
/// <summary>
/// 富文本效果基类,提供统一的标签命名和环境参数读取辅助逻辑。
/// 该基类只负责 Godot 适配细节,不承载业务语义分层。
/// </summary>
[Tool]
public abstract partial class RichTextEffectBase : RichTextEffect
{
/// <summary>
/// 获取当前效果对应的 BBCode 标签名。
/// </summary>
protected abstract string TagName { get; }
/// <summary>
/// 获取 Godot 识别当前效果所需的 `bbcode` 属性。
/// </summary>
public string bbcode => TagName;
/// <summary>
/// 尝试从字符环境参数中读取布尔值。
/// </summary>
/// <param name="transform">当前字符变换上下文。</param>
/// <param name="key">参数键。</param>
/// <param name="defaultValue">读取失败时使用的默认值。</param>
/// <returns>最终布尔值。</returns>
protected bool GetBool(CharFXTransform transform, string key, bool defaultValue = false)
{
if (transform.Env.TryGetValue(Variant.From(key), out var value))
{
return value.AsBool();
}
return defaultValue;
}
/// <summary>
/// 尝试从字符环境参数中读取浮点值。
/// </summary>
/// <param name="transform">当前字符变换上下文。</param>
/// <param name="key">参数键。</param>
/// <param name="defaultValue">读取失败时使用的默认值。</param>
/// <returns>最终浮点值。</returns>
protected float GetFloat(CharFXTransform transform, string key, float defaultValue)
{
if (transform.Env.TryGetValue(Variant.From(key), out var value))
{
return (float)value.AsDouble();
}
return defaultValue;
}
/// <summary>
/// 尝试从字符环境参数中读取颜色值。
/// </summary>
/// <param name="transform">当前字符变换上下文。</param>
/// <param name="key">参数键。</param>
/// <param name="defaultValue">读取失败时使用的默认值。</param>
/// <returns>最终颜色值。</returns>
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;
}
/// <summary>
/// 从字符环境参数中应用可见性开关。
/// </summary>
/// <param name="transform">当前字符变换上下文。</param>
/// <param name="defaultValue">默认可见性。</param>
protected void ApplyVisibility(CharFXTransform transform, bool defaultValue = true)
{
transform.Visible = GetBool(transform, "visible", defaultValue);
}
}