58 lines
3.2 KiB
JavaScript
58 lines
3.2 KiB
JavaScript
// act-pack-state.js — 资源包路径的状态断言(acts.html 默认路径)
|
||
//
|
||
// 判定全来自 window.__d2webAct:是不是走了资源包、首屏只装了几页(证明懒加载)、
|
||
// 出画面用了多久、以及按键后角色是否沿屏幕方向位移且朝向正确。返回 JSON。
|
||
//
|
||
// CHROME=/root/.cache/ms-playwright/chromium-1223/chrome-linux64/chrome
|
||
// node scripts/browser/inspect-page.mjs "$CHROME" \
|
||
// "http://127.0.0.1:5173/acts.html?act=1" scripts/browser/checks/act-pack-state.js
|
||
(async () => {
|
||
const sleep = (ms) => new Promise((r) => setTimeout(r, ms))
|
||
const deadline = Date.now() + 120000
|
||
while (Date.now() < deadline) {
|
||
const s = window.__d2webAct
|
||
if (s && (s.ready || s.error)) break
|
||
await sleep(200)
|
||
}
|
||
const atReady = { ...(window.__d2webAct ?? {}) }
|
||
await sleep(6000)
|
||
const after = { ...(window.__d2webAct ?? {}) }
|
||
const before = { x: after.x, y: after.y }
|
||
const press = (code, down) => window.dispatchEvent(new KeyboardEvent(down ? 'keydown' : 'keyup', { code, bubbles: true }))
|
||
press('ArrowRight', true); await sleep(900); press('ArrowRight', false)
|
||
await sleep(200)
|
||
const moved = { x: window.__d2webAct?.x ?? 0, y: window.__d2webAct?.y ?? 0, facing: window.__d2webAct?.facing ?? -1 }
|
||
return {
|
||
source: atReady.source, ready: atReady.ready, error: atReady.error ?? null,
|
||
base: atReady.base, act: atReady.act, level: atReady.level, quadrant: atReady.quadrant,
|
||
cells: `${atReady.cellsX}x${atReady.cellsY}`,
|
||
floors: atReady.floors, walls: atReady.walls, frames: atReady.frames, objects: atReady.objects,
|
||
character: atReady.character,
|
||
characterMembers: atReady.characterMembers,
|
||
characterAfter: after.character,
|
||
characterMembersAfter: after.characterMembers,
|
||
levelOptions: document.querySelector('#level')?.querySelectorAll('option').length ?? -1,
|
||
pickerSelected: document.querySelector('#level')?.selectedOptions?.[0]?.textContent ?? null,
|
||
pagesAtReady: `${atReady.pagesLoaded}/${atReady.pagesTotal}`,
|
||
pagesAtFirstFrame: `${atReady.pagesAtFirstFrame}/${atReady.pagesTotal}`,
|
||
firstFrameMs: atReady.firstFrameMs,
|
||
priorityPages: atReady.priorityPages,
|
||
lazyFirstFrame: atReady.pagesAtFirstFrame < atReady.pagesTotal,
|
||
pagesAfterWait: `${after.pagesLoaded}/${after.pagesTotal}`,
|
||
lazyFirstPaint: (atReady.pagesLoaded ?? 0) < (atReady.pagesTotal ?? 0),
|
||
loadMs: atReady.loadMs,
|
||
skippedAtReady: atReady.skippedDraws,
|
||
move: [Math.round(moved.x - before.x), Math.round(moved.y - before.y)],
|
||
facing: moved.facing,
|
||
tick: after.tick,
|
||
walkable: Number((atReady.walkable ?? 0).toFixed(3)),
|
||
// 画布是否铺满窗口 + 缩放是否至少覆盖视口
|
||
canvas: [after.canvasWidth, after.canvasHeight],
|
||
viewport: [window.innerWidth, window.innerHeight],
|
||
zoom: after.zoom,
|
||
coverZoom: Math.max(window.innerWidth / Math.max(1, after.widthPx), window.innerHeight / Math.max(1, after.heightPx)),
|
||
canvasFillsWindow: after.canvasWidth >= window.innerWidth - 2 && after.canvasHeight >= window.innerHeight - 2,
|
||
mapCoversViewport: (after.zoom ?? 0) + 1e-6 >= Math.max(window.innerWidth / Math.max(1, after.widthPx), window.innerHeight / Math.max(1, after.heightPx)),
|
||
}
|
||
})()
|