namespace GFramework.Godot.Text; /// /// GFramework 提供的组合式富文本标签宿主。 /// 该类型只负责桥接 Godot 的 与框架的效果装配逻辑,不承载具体效果实现。 /// [GlobalClass] [Tool] public partial class GfRichTextLabel : RichTextLabel, IRichTextEffectHost { private IRichTextEffectRegistry? _effectRegistry; private RichTextEffectsController? _effectsController; /// /// 获取或设置当前标签使用的效果配置。 /// 为空时将回退到内置默认配置。 /// [Export] public RichTextProfile? Profile { get; set; } /// /// 获取或设置是否启用框架管理的富文本效果装配。 /// 关闭后只会停止框架效果安装,不会覆盖调用方手动维护的其他 BBCode 解析状态。 /// [Export] public bool EnableFrameworkEffects { get; set; } = true; /// /// 获取或设置是否允许字符级动态效果实际生效。 /// 关闭后仍然会安装对应标签,使富文本内容保持可解析。 /// [Export] public bool AnimatedEffectsEnabled { get; set; } = true; /// /// 获取当前使用的效果注册表。 /// /// /// 当设置值为 时抛出。 /// internal IRichTextEffectRegistry EffectRegistry { get => _effectRegistry ??= new DefaultRichTextEffectRegistry(); set => _effectRegistry = value ?? throw new ArgumentNullException(nameof(value)); } /// /// 节点就绪时初始化控制器并安装效果集合。 /// public override void _Ready() { EnsureController().Initialize(); } /// /// 手动刷新框架效果集合。 /// 当调用方在运行时替换配置或切换动画开关时,可通过该方法同步宿主状态。 /// public void RefreshFrameworkEffects() { EnsureController().RefreshEffects(); } /// /// 获取或创建控制器实例。 /// /// 组合式装配控制器。 private RichTextEffectsController EnsureController() { return _effectsController ??= new RichTextEffectsController( this, () => EffectRegistry, () => Profile, () => EnableFrameworkEffects, () => AnimatedEffectsEnabled); } }