macOS companion app
Ikona na pasku menu
Stany ikony na pasku menu
Zakres: aplikacja macOS (apps/macos). Renderowanie: CritterIconRenderer.makeIcon(...). Obsługa animacji i stanów: CritterStatusLabel + CritterStatusLabel+Behavior.swift.
Stany
| Stan | Wyzwalacz | Wygląd |
|---|---|---|
| Bezczynność | Domyślnie | Zwykła animacja mrugania/kołysania; otwarte oczy zachowują lśniący refleks |
| Wstrzymanie | isPaused=true |
Czułki opadają („po służbie”), a oczy pozostają otwarte; brak ruchu |
| Uśpienie | Gateway rozłączony/nieskonfigurowany | Czułki opadają, a oczy zamykają się, tworząc powieki ⌣ ⌣; brak ruchu |
| Świętowanie | Wysłano wiadomość (sendCelebrationTick) |
Oczy rozbłyskują radosnymi łukami ∩ ∩ przez ~0.9s, czemu towarzyszy kopnięcie nogą |
| Wybudzenie głosowe (duże uszy) | Wykryto słowo wybudzające | Czułki prostują się i stają się wyższe (earScale=1.9); opadają po nastaniu ciszy |
| Praca | isWorking=true lub aktywne IconState |
Szybsze poruszanie nogami (legWiggle do 1.0) i niewielkie przesunięcie poziome; nakłada się na kołysanie w stanie bezczynności |
Wskaźnik aktywności narzędzia (znaczek z symbolem SF Symbol, np. chevron.left.slash.chevron.right dla wykonania polecenia) może być wyświetlany nad tą samą ikoną stworzonka, gdy sesja ma aktywne zadanie lub narzędzie. Wskaźnik ten pochodzi z IconState/ActivityKind; pełny model stanów opisano w sekcji Pasek menu.
Uszy wybudzania głosowego
- Wyzwalacz:
AppStateStore.shared.triggerVoiceEars(ttl: nil), wywoływany z potoku przechwytywania wybudzania głosowego (VoiceWakeRuntime) oraz z narzędzi do debugowania/testowania wybudzania głosowego (VoiceWakeTester,VoiceWakeOverlayController). - Zatrzymanie:
stopVoiceEars(), wywoływane po zakończeniu przechwytywania. - Okno ciszy przed zakończeniem: zwykle
2.0s, a5.0s, jeśli usłyszano tylko słowo wyzwalające i nie nastąpiła po nim żadna dalsza wypowiedź (VoiceWakeRuntime.silenceWindow/triggerOnlySilenceWindow). - Podczas wzmocnienia zegary bezczynnego mrugania, kołysania, ruchu nóg i uszu są wstrzymywane (
earBoostActivesteruje zadaniem animacji wCritterStatusLabel+Behavior).
Kształty i rozmiary
- Obszar roboczy: obraz szablonowy 18x18pt, renderowany w buforze bitmapowym 36x36px (2x), dzięki czemu ikona pozostaje wyraźna na ekranach Retina.
- Domyślna skala uszu to
1.0; wzmocnienie głosowe ustawiaearScale=1.9bez zmiany całkowitej ramki. antennaDroop(0-1) opuszcza czułki w pozycjach wstrzymania i uśpienia.- Szybki ruch nóg wykorzystuje zakres od
legWiggledo1.0z niewielkim poziomym drżeniem.
Uwagi dotyczące działania
- Nie ma zewnętrznego przełącznika CLI/brokera dla uszu ani stanu pracy; oba są sterowane wewnętrznie przez sygnały aplikacji (
AppState.setWorking,AppState.triggerVoiceEars), aby uniknąć przypadkowego, naprzemiennego przełączania. - Każdy nowy TTL powinien być krótki (znacznie poniżej 10s), aby ikona szybko wracała do stanu bazowego w przypadku zawieszenia zadania.
Powiązane
Was this useful?