メニューバーアイコンの状態
範囲: macOS アプリ (apps/macos)。レンダリング: CritterIconRenderer.makeIcon(...)。アニメーション/状態の配線: CritterStatusLabel + CritterStatusLabel+Behavior.swift。
状態
| 状態 | トリガー | 見た目 |
|---|---|---|
| アイドル | デフォルト | 通常のまばたき/揺れアニメーション |
| 一時停止 | isPaused=true | ステータス項目が appearsDisabled を使用し、動きなし |
| 音声ウェイク (大きな耳) | ウェイクワードを検知 | 耳が earHoles=true (読みやすさのための円形の穴) で 1.9x に拡大し、無音後に戻る |
| 作業中 | isWorking=true またはアクティブな IconState | より速い脚の揺れ (legWiggle は最大 1.0) に小さな水平オフセットを追加し、アイドル時の揺れに加算 |
chevron.left.slash.chevron.right) を同じクリッターアイコンの上に描画できる。このバッジは IconState/ActivityKind から来る。完全な状態モデルについては メニューバー を参照。
音声ウェイクの耳
- トリガー:
AppStateStore.shared.triggerVoiceEars(ttl: nil)。音声ウェイクのキャプチャパイプライン (VoiceWakeRuntime) と、音声ウェイクのデバッグ/テストツール (VoiceWakeTester,VoiceWakeOverlayController) から呼び出される。 - 停止:
stopVoiceEars()。キャプチャの確定時に呼び出される。 - 確定前の無音ウィンドウ: 通常は
2.0s。トリガーワードだけが聞こえ、その後に発話が続かなかった場合は5.0s(VoiceWakeRuntime.silenceWindow/triggerOnlySilenceWindow)。 - ブースト中は、アイドルのまばたき/揺れ/脚/耳のタイマーが一時停止される (
earBoostActiveがCritterStatusLabel+Behaviorのアニメーションタスクをゲートする)。
形状とサイズ
- キャンバス: 18x18pt のテンプレート画像。Retina でアイコンを鮮明に保つため、36x36px のビットマップバッキングストア (2x) にレンダリングされる。
- 耳のスケールはデフォルトで
1.0。音声ブーストでは全体のフレームを変えずにearScale=1.9とearHoles=trueを設定する。 - 脚の小走りは、小さな水平ジグルとともに最大
1.0のlegWiggleを使用する。
挙動上の注意
- 耳や作業中状態の外部 CLI/ブローカートグルはない。どちらも偶発的なばたつきを避けるため、アプリシグナル (
AppState.setWorking,AppState.triggerVoiceEars) によって内部的に駆動される。 - ジョブがハングした場合にアイコンがすばやくベースラインへ戻るよう、新しい TTL は短く (10s を大きく下回る) 保つ。