diff --git a/README.md b/README.md index cd8a26b..1bf079b 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ npm run autostart:install # (可選)開機自動啟動 | 左鍵點一下 | 揮手(若有非固定的氣泡,先關閉氣泡) | | 左鍵拖曳 | 搬家;往左播 running-left、往右播 running-right;放開後位置寫入設定檔 | | 右鍵 / 系統匣左鍵 | 開啟選單 | -| 滑鼠移到她身上 | 跳躍 3 次後回到原本狀態(Codex 的 hover 行為) | +| 滑鼠移到她身上 | 跳躍最多 3 次;游標一離開就立刻停止、回到原本狀態(Codex 的 hover 行為) | | 滑鼠靠近 | 盯著游標看(選單開啟「跟著游標看」後才有) | **選單功能** @@ -125,7 +125,7 @@ npm run autostart:install # (可選)開機自動啟動 | `SessionEnd` | | 移除該 session | 最後一個結束時 👋 掰掰 | | (無事件) | 游標移動(追視開啟時、且目前為 idle) | 16 方向 `look` | | | (無事件) | 拖曳 | 單次位移 ≥ 4 px 才決定 `running-left` / `running-right` | | -| (無事件) | 游標進入人物方框 | `jumping` × 3 → 回原狀態 | | +| (無事件) | 游標進入人物方框 | `jumping` 最多 × 3;離開即中斷 | | 規則: @@ -258,7 +258,8 @@ Claude Code ──hook(stdin JSON)──▶ hook/claude-pet-hook.js ──PO | `waiting` | 授權、`requestUserInput`、計畫待確認 | 相同;`idle_prompt` 不算 | | `review` | turn 完成且未讀,直到使用者回到該 thread | 直到該 session 下一個動作 | | `waving` | 只在 first-awake(每隻寵物一次,8 秒) | 相同(記在設定檔 `greetedPetIds`) | -| `jumping` | 定義在 `respondToHover ? "jumping" : state`,但整個 app 沒人開啟那個 prop | **選擇打開**:游標進入人物方框就播 3 次 | +| `jumping` | 定義在 `respondToHover ? "jumping" : state`,但整個 app 沒人開啟那個 prop | **選擇打開**:游標進入人物方框就播,最多 3 次 | +| hover 離開 | 顯示狀態立刻翻回 `state`,動畫重跑,不會把跳躍播完 | 相同(游標離開就中斷跳躍) | | hover 版面 | 40 px 內進入、56 px 外退出;人物縮 0.9、下移 14 px、上方 24 px 控制鈕、200 ms | 未採用——控制鈕的功能就是選單,右鍵已經有了 | | hover 判定 | 用矩形(`pet-area-hover-changed` 由 rect 算) | 相同(逐像素會因每格輪廓不同而抖動) | | 追視來源 | quick chat 的文字游標/computer-use 游標 | 沒有對應來源;改為**選配**看滑鼠,預設關 | diff --git a/package-lock.json b/package-lock.json index 5a2071e..6ee30a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "claude-pet", - "version": "2.0.2", + "version": "2.0.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "claude-pet", - "version": "2.0.2", + "version": "2.0.3", "devDependencies": { "electron": "^43.4.1", "electron-builder": "^26.0.12" diff --git a/package.json b/package.json index 2458cae..0cc9594 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "claude-pet", - "version": "2.0.2", + "version": "2.0.3", "description": "Codex Pets 相容的 Claude Code 桌面寵物(spriteVersionNumber 2:9 個動作列 + 16 方向追視)", "main": "main.js", "private": true, diff --git a/renderer/renderer.js b/renderer/renderer.js index 84f7518..99c4fe0 100644 --- a/renderer/renderer.js +++ b/renderer/renderer.js @@ -575,8 +575,17 @@ function overPetArea(x, y) { function setHovered(on) { if (on === hovered) return; hovered = on; - // 只在「進入」時觸發一次;一次性動作或拖曳進行中不打斷 - if (on && !overlay && !drag) play("jumping", STATE_REPEATS); + if (on) { + // 只在「進入」時觸發一次;一次性動作或拖曳進行中不打斷 + if (!overlay && !drag) { + play("jumping", STATE_REPEATS); + overlay.fromHover = true; + } + return; + } + // 游標離開就立刻收掉,不等三次跳完。Codex 也是這樣:它的顯示狀態是 + // `hovered ? "jumping" : state`,一離開就翻回原狀態、動畫重跑,不會播完。 + if (overlay?.fromHover) overlay = null; } function setIgnore(ignore) {