菜单栏图标状态
范围:macOS 应用(apps/macos)。渲染:CritterIconRenderer.makeIcon(...)。动画/状态接线:CritterStatusLabel + CritterStatusLabel+Behavior.swift。
状态
| 状态 | 触发条件 | 视觉效果 |
|---|---|---|
| 空闲 | 默认 | 正常眨眼/摆动动画 |
| 已暂停 | isPaused=true | 状态项使用 appearsDisabled;无运动 |
| 语音唤醒(大耳朵) | 听到唤醒词 | 耳朵缩放到 1.9x,并启用 earHoles=true(圆形孔洞以提高可读性);静音后恢复 |
| 工作中 | isWorking=true 或存在活动的 IconState | 更快的腿部摆动(legWiggle 最高到 1.0),并带有小幅水平偏移;叠加在空闲摆动之上 |
chevron.left.slash.chevron.right)可以渲染在同一个小动物图标上方。该徽标来自 IconState/ActivityKind;完整状态模型请参见菜单栏。
语音唤醒耳朵
- 触发:
AppStateStore.shared.triggerVoiceEars(ttl: nil),由语音唤醒捕获管线(VoiceWakeRuntime)以及语音唤醒调试/测试工具(VoiceWakeTester、VoiceWakeOverlayController)调用。 - 停止:
stopVoiceEars(),在捕获完成时调用。 - 完成前的静音窗口:通常为
2.0s;如果只听到了触发词且之后没有进一步语音(VoiceWakeRuntime.silenceWindow/triggerOnlySilenceWindow),则为5.0s。 - 增强期间,空闲眨眼/摆动/腿部/耳朵计时器会暂停(
earBoostActive会在CritterStatusLabel+Behavior中门控动画任务)。
形状和尺寸
- 画布:18x18pt 模板图像,渲染到 36x36px 位图后备存储(2x),因此图标在 Retina 上保持清晰。
- 耳朵缩放默认值为
1.0;语音增强会设置earScale=1.9和earHoles=true,且不会改变整体框架。 - 腿部快跑使用最高到
1.0的legWiggle,并带有小幅水平抖动。
行为说明
- 耳朵或工作状态没有外部 CLI/broker 开关;两者都由应用信号(
AppState.setWorking、AppState.triggerVoiceEars)在内部驱动,以避免意外抖动。 - 任何新的 TTL 都应保持较短(远低于 10s),这样如果作业挂起,图标可以快速回到基线状态。