# TypewriterLogic.gd - 打字机效果辅助类

## 1. 目标

`TypewriterLogic` 是一个 GDScript 辅助类，用于给 `Label` 节点添加逐字显示（打字机）效果。它封装了动画逻辑和状态，实现代码复用。

## 2. 使用方法

**a. 引入与实例化:**

```gdscript
# 预加载类 (确保路径正确)
const TypewriterLogic = preload("res://path/to/TypewriterLogic.gd")

# 获取 Label 节点
@onready var dialogue_label: Label = $Path/To/Label

# 声明实例变量
var typewriter: TypewriterLogic

func _ready():
	# 创建实例，传入 Label 和速度
	if is_instance_valid(dialogue_label):
		typewriter = TypewriterLogic.new(dialogue_label, 25.0) # 25.0 是打字速度
		# (可选) 连接信号
		typewriter.finished.connect(_on_typing_done)
```

**b. 控制效果:**

```gdscript
# 开始打字
func show_message(text: String):
	if typewriter != null:
		typewriter.start_typing(text)

# 跳过打字 (例如，点击时)
func skip_message():
	if typewriter != null and typewriter.is_typing():
		typewriter.skip_typing()

# 停止打字 (例如，关闭UI时)
func force_stop_typing():
	if typewriter != null:
		typewriter.stop_typing()

# (可选) 处理完成信号
func _on_typing_done():
	print("打字自然完成")
```

## 3. API

*   **`TypewriterLogic.new(target_label: Label, typing_speed: float = 20.0)`**
	*   构造函数。需要目标 `Label` 和可选的打字速度 (字符/秒)。
*   **`start_typing(full_text: String)`**
	*   方法。开始播放指定文本的打字动画。
*   **`skip_typing()`**
	*   方法。立即停止动画并显示全部文本。
*   **`stop_typing()`**
	*   方法。立即停止动画。
*   **`is_typing() -> bool`**
	*   方法。返回 `true` 如果正在打字。
*   **`finished`**
	*   信号。当动画**自然**完成时发出。`skip_typing()` 或 `stop_typing()` 不会触发。

## 4. 注意

*   必须关联一个有效的 `Label` 节点。
*   `Tween` 动画由目标 `Label` 节点管理。
```
