GFramework/GFramework.Godot/Text/Effects/RichTextSineEffect.cs
gewuyou ff553977e3 chore(license): 补齐 Apache-2.0 文件头治理
- 新增许可证文件头检查与修复脚本

- 补充维护者手动修复 PR 工作流和 CI 校验

- 更新贡献指南中的文件头说明

- 补齐仓库维护源码和配置文件的许可证声明
2026-05-03 19:39:49 +08:00

51 lines
1.5 KiB
C#

// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Godot.Text.Effects;
/// <summary>
/// 为文本提供正弦波形的上下漂浮效果。
/// </summary>
[GlobalClass]
[Tool]
public partial class RichTextSineEffect : RichTextEffectBase
{
private readonly bool _animatedEffectsEnabled;
/// <summary>
/// 初始化正弦效果。
/// </summary>
/// <param name="animatedEffectsEnabled">是否允许动态效果实际生效。</param>
public RichTextSineEffect(bool animatedEffectsEnabled = true)
{
_animatedEffectsEnabled = animatedEffectsEnabled;
}
/// <summary>
/// 获取标签名。
/// </summary>
protected override string TagName => "sine";
/// <summary>
/// 应用正弦位移。
/// </summary>
/// <param name="charFx">当前字符上下文。</param>
/// <returns>始终返回 <see langword="true" />。</returns>
public override bool _ProcessCustomFX(CharFXTransform charFx)
{
if (!_animatedEffectsEnabled)
{
return true;
}
var amplitude = GetFloat(charFx, "amplitude", 0.8f);
var frequency = GetFloat(charFx, "frequency", 0.5f);
var speed = GetFloat(charFx, "speed", 1.5f);
var phase = (float)(charFx.ElapsedTime * speed + charFx.RelativeIndex * 0.1f);
var offsetY = amplitude * Mathf.Sin(phase * Mathf.Pi * 2f * frequency);
charFx.Offset += new Vector2(0f, offsetY);
ApplyVisibility(charFx);
return true;
}
}