Files
claude-pet/lib/hit-test.js
T

24 lines
1.0 KiB
JavaScript
Raw Permalink Normal View History

"use strict";
// 點穿決策的純邏輯,由主程序使用;抽出來是為了能在 node 直接單元測試(main.js 一載入就 require electron)。
function inside(r, p) {
return !!r && !!p && p.x >= r.x && p.x < r.x + r.w && p.y >= r.y && p.y < r.y + r.h;
}
// 人物方框在視窗內的位置,與 renderer 的版面一致(#stage 水平置中、上方保留氣泡高度、底部留白)。
// renderer 活著時會回報實際量到的矩形,這只是它還沒回報或掛掉時的備援。
function petBoxRect(bounds, scale, { petW, petH, bubbleH }) {
const w = Math.round(petW * scale);
const h = Math.round(petH * scale);
return { x: Math.round((bounds.width - w) / 2), y: bubbleH, w, h };
}
// 這一刻視窗該不該點穿:拖曳中一律接滑鼠;否則游標在人物方框或氣泡上才接,其餘穿透。
function wantIgnore({ rel, box, bubble, dragging }) {
if (dragging) return false;
if (!rel) return true;
return !(inside(box, rel) || inside(bubble, rel));
}
module.exports = { inside, petBoxRect, wantIgnore };