macOS companion app

Значок в строке меню

Состояния значка в строке меню

Область: приложение macOS (apps/macos). Отрисовка: CritterIconRenderer.makeIcon(...). Связь анимации и состояний: CritterStatusLabel + CritterStatusLabel+Behavior.swift.

Состояния

Состояние Условие срабатывания Визуальное представление
Бездействие По умолчанию Обычная анимация моргания и покачивания; в открытых глазах сохраняется глянцевый блик
Приостановлено isPaused=true Антенны опущены («не на службе»), глаза открыты; движения отсутствуют
Сон Gateway отключён или не настроен Антенны опущены, а глаза закрываются веками ⌣ ⌣; движения отсутствуют
Празднование Сообщение отправлено (sendCelebrationTick) Глаза примерно на 0,9 с превращаются в радостные дуги ∩ ∩, одновременно происходит взмах ногой
Голосовая активация (уши) Распознано слово активации Антенны выпрямляются и вытягиваются вверх (earScale=1.9); после периода тишины возвращаются в исходное положение
Работа isWorking=true или активный IconState Более быстрое движение ног (от legWiggle до 1.0) с небольшим смещением по горизонтали поверх обычного покачивания

Поверх того же значка существа может отображаться индикатор активности инструмента (плашка с символом SF, например 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).

Формы и размеры

  • Холст: шаблонное изображение размером 18x18 pt, отрисовываемое в растровый буфер размером 36x36 px (2x), чтобы значок оставался чётким на дисплеях Retina.
  • По умолчанию масштаб антенн равен 1.0; при голосовой активации устанавливается earScale=1.9 без изменения общего размера рамки.
  • antennaDroop (0–1) опускает антенны для состояний приостановки и сна.
  • Быстрое движение ног использует значения от legWiggle до 1.0 с небольшим покачиванием по горизонтали.

Примечания о поведении

  • Внешнего переключателя CLI или брокера для антенн и рабочего состояния нет; оба состояния управляются внутренними сигналами приложения (AppState.setWorking, AppState.triggerVoiceEars), чтобы избежать случайного переключения.
  • Для любого нового TTL задавайте короткое значение (значительно меньше 10 с), чтобы значок быстро возвращался к исходному состоянию, если задание зависнет.

Связанные разделы

Was this useful?
On this page

On this page