using Array = Godot.Collections.Array; namespace GFramework.Godot.Text; /// /// 负责把配置、开关和注册表装配为宿主标签的实际效果集合。 /// 该控制器是组合式扩展的装配中心,使 保持轻量。 /// internal sealed class RichTextEffectsController { private readonly Func _animatedEffectsEnabledAccessor; private readonly Func _frameworkEffectsEnabledAccessor; private readonly RichTextLabel _host; private readonly Func _profileAccessor; private readonly IRichTextEffectRegistry _registry; /// /// 初始化控制器实例。 /// /// 目标富文本标签。 /// 效果注册表。 /// 当前配置访问器。 /// 框架效果总开关访问器。 /// 字符动画开关访问器。 public RichTextEffectsController( RichTextLabel host, IRichTextEffectRegistry registry, Func profileAccessor, Func frameworkEffectsEnabledAccessor, Func animatedEffectsEnabledAccessor) { _host = host ?? throw new ArgumentNullException(nameof(host)); _registry = registry ?? throw new ArgumentNullException(nameof(registry)); _profileAccessor = profileAccessor ?? throw new ArgumentNullException(nameof(profileAccessor)); _frameworkEffectsEnabledAccessor = frameworkEffectsEnabledAccessor ?? throw new ArgumentNullException(nameof(frameworkEffectsEnabledAccessor)); _animatedEffectsEnabledAccessor = animatedEffectsEnabledAccessor ?? throw new ArgumentNullException(nameof(animatedEffectsEnabledAccessor)); } /// /// 初始化并立即刷新宿主标签的效果集合。 /// public void Initialize() { RefreshEffects(); } /// /// 根据当前配置和开关重建宿主标签上的 。 /// public void RefreshEffects() { if (!_frameworkEffectsEnabledAccessor()) { _host.CustomEffects = new Array(); return; } var profile = _profileAccessor() ?? RichTextProfile.CreateBuiltInDefault(); var effects = _registry.CreateEffects(profile, _animatedEffectsEnabledAccessor()); var customEffects = new Array(); foreach (var effect in effects) { customEffects.Add(effect); } _host.CustomEffects = customEffects; } }