macOS companion app
ไอคอนแถบเมนู
สถานะไอคอนแถบเมนู
ขอบเขต: แอป macOS (apps/macos) การเรนเดอร์: CritterIconRenderer.makeIcon(...) การเชื่อมโยงแอนิเมชัน/สถานะ: CritterStatusLabel + CritterStatusLabel+Behavior.swift
สถานะ
| สถานะ | ตัวกระตุ้น | ภาพที่แสดง |
|---|---|---|
| ว่าง | ค่าเริ่มต้น | แอนิเมชันกะพริบตา/ขยับตามปกติ ดวงตาที่เปิดอยู่ยังคงมีประกายเงาวาว |
| หยุดชั่วคราว | isPaused=true |
หนวดลู่ลง ("พักงาน") โดยดวงตายังเปิดอยู่ ไม่มีการเคลื่อนไหว |
| หลับอยู่ | Gateway ขาดการเชื่อมต่อ/ยังไม่ได้กำหนดค่า | หนวดลู่ลงและดวงตาปิดเป็นเปลือกตา ⌣ ⌣ ไม่มีการเคลื่อนไหว |
| เฉลิมฉลอง | ส่งข้อความแล้ว (sendCelebrationTick) |
ดวงตาแวบเป็นส่วนโค้ง ∩ ∩ แสดงความดีใจประมาณ ~0.9s พร้อมเตะขาหนึ่งครั้ง |
| ปลุกด้วยเสียง (หูใหญ่) | ได้ยินคำปลุก | หนวดชูตั้งตรงและสูงขึ้น (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)
รูปร่างและขนาด
- ผืนผ้าใบ: รูปภาพแม่แบบขนาด 18x18pt ซึ่งเรนเดอร์ลงในพื้นที่เก็บบิตแมปขนาด 36x36px (2x) เพื่อให้ไอคอนคมชัดบน Retina
- ค่าเริ่มต้นของสเกลหูคือ
1.0การเพิ่มระดับสำหรับเสียงจะตั้งเป็นearScale=1.9โดยไม่เปลี่ยนกรอบโดยรวม antennaDroop(0-1) พับหนวดลงสำหรับท่าหยุดชั่วคราวและท่าหลับ- การขยับขาอย่างรวดเร็วใช้
legWiggleสูงสุดถึง1.0พร้อมสั่นในแนวนอนเล็กน้อย
หมายเหตุด้านพฤติกรรม
- ไม่มีสวิตช์ CLI/โบรกเกอร์ภายนอกสำหรับหูหรือสถานะกำลังทำงาน ทั้งสองอย่างขับเคลื่อนภายในด้วยสัญญาณของแอป (
AppState.setWorking,AppState.triggerVoiceEars) เพื่อป้องกันการขยับไปมาโดยไม่ตั้งใจ - กำหนด TTL ใหม่ให้สั้นเสมอ (ต่ำกว่า 10s มาก) เพื่อให้ไอคอนกลับสู่สถานะพื้นฐานอย่างรวดเร็วหากงานค้าง
ที่เกี่ยวข้อง
Was this useful?