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?
On this page

On this page