macOS companion app
Ícone da barra de menus
Estados do ícone da barra de menus
Escopo: aplicativo para macOS (apps/macos). Renderização: CritterIconRenderer.makeIcon(...). Vinculação de animação/estado: CritterStatusLabel + CritterStatusLabel+Behavior.swift.
Estados
| Estado | Acionador | Visual |
|---|---|---|
| Ocioso | Padrão | Animação normal de piscar/balançar; os olhos abertos mantêm um reflexo brilhante |
| Pausado | isPaused=true |
As antenas ficam caídas ("fora de serviço") com os olhos abertos; sem movimento |
| Dormindo | Gateway desconectado/não configurado | As antenas ficam caídas e os olhos se fecham, formando pálpebras ⌣ ⌣; sem movimento |
| Comemoração | Mensagem enviada (sendCelebrationTick) |
Os olhos exibem arcos alegres ∩ ∩ por ~0.9s, acompanhados de um chute com a perna |
| Ativação por voz (orelhas grandes) | Palavra de ativação detectada | As antenas ficam eretas e mais altas (earScale=1.9); voltam ao normal após o silêncio |
| Trabalhando | isWorking=true ou um IconState ativo |
Movimento mais rápido das pernas (legWiggle até 1.0) e um pequeno deslocamento horizontal; somado ao balanço ocioso |
Um indicador de atividade de ferramenta (disco com SF Symbol, por exemplo, chevron.left.slash.chevron.right para execução) pode ser renderizado sobre o mesmo ícone da criatura quando uma sessão tem um trabalho ou uma ferramenta ativa. Esse indicador é fornecido por IconState/ActivityKind; consulte Barra de menus para ver o modelo de estados completo.
Orelhas de ativação por voz
- Acionador:
AppStateStore.shared.triggerVoiceEars(ttl: nil), chamado pelo pipeline de captura de ativação por voz (VoiceWakeRuntime) e pelas ferramentas de depuração/teste de ativação por voz (VoiceWakeTester,VoiceWakeOverlayController). - Interrupção:
stopVoiceEars(), chamado quando a captura é finalizada. - Janela de silêncio antes da finalização: normalmente
2.0s;5.0sse apenas a palavra de ativação tiver sido detectada, sem nenhuma fala posterior (VoiceWakeRuntime.silenceWindow/triggerOnlySilenceWindow). - Enquanto o destaque está ativo, os temporizadores de piscar/balançar/pernas/orelhas do estado ocioso ficam suspensos (
earBoostActivecontrola a tarefa de animação emCritterStatusLabel+Behavior).
Formas e tamanhos
- Tela: imagem de modelo de 18x18pt, renderizada em um armazenamento de bitmap de 36x36px (2x) para que o ícone permaneça nítido em telas Retina.
- A escala padrão das orelhas é
1.0; o destaque de voz defineearScale=1.9sem alterar o quadro geral. antennaDroop(0-1) dobra as antenas para baixo nas poses pausada e dormindo.- O movimento rápido das pernas usa
legWiggleaté1.0, com uma pequena oscilação horizontal.
Observações comportamentais
- Não há alternância externa por CLI/broker para as orelhas nem para o estado de trabalho; ambos são controlados internamente por sinais do aplicativo (
AppState.setWorking,AppState.triggerVoiceEars) para evitar oscilações acidentais. - Mantenha qualquer novo TTL curto (bem abaixo de 10s) para que o ícone retorne rapidamente ao estado inicial caso um trabalho fique travado.
Relacionados
Was this useful?