Update Healer Man server

This commit is contained in:
phenom committed 2026-09-28 22:46:45 -04:00
1 parent 9d7e0e2f9e
commit 35dfdaed61
94 files changed
+17034 -418

No files matched your search

+43
View File
@@ -28,6 +28,42 @@ async function ready(page) {
await page.waitForTimeout(1200);
console.log(`Ready: ${(await state(page)).mode || 'run'}`);
}
async function verifyEditorMovement(page, panel) {
await panel.getByRole('button', { name: 'Walk in scene', exact: true }).click();
for (const key of ['w', 's', 'a', 'd']) {
const before = await state(page);
await page.keyboard.down(key); await page.waitForTimeout(600); await page.keyboard.up(key);
await page.waitForTimeout(150);
const after = await state(page);
assert.ok(Math.hypot(after.position[0] - before.position[0], after.position[2] - before.position[2]) > .15, `${key.toUpperCase()} must move the player in edit mode`);
}
await panel.getByLabel('Spawn X', { exact: true }).focus();
const before = await state(page);
assert.equal(before.focused, true);
await page.keyboard.down('w'); await page.waitForTimeout(350); await page.keyboard.up('w');
const paused = await state(page);
assert.ok(Math.hypot(paused.position[0] - before.position[0], paused.position[2] - before.position[2]) < .1, 'Panel focus must pause movement');
await page.mouse.click(550, 380);
assert.equal((await state(page)).focused, false, 'Clicking the world must return keyboard control');
await page.keyboard.down('w'); await page.waitForTimeout(500); await page.keyboard.up('w');
const walking = await state(page);
assert.ok(Math.hypot(walking.position[0] - paused.position[0], walking.position[2] - paused.position[2]) > .15, 'W must work again after clicking the world');
await page.keyboard.press('Digit1');
assert.equal(await page.evaluate(async () => {
const { useCombatStore } = await window.playtestImport('/src/game/combatStore.ts');
return useCombatStore.getState().activeCast;
}), null, 'Editing must still block combat actions');
await page.mouse.move(550, 380); await page.mouse.down({ button: 'right' });
const yaw = (await state(page)).yaw;
await page.mouse.move(650, 395, { steps: 8 }); await page.waitForTimeout(300);
assert.notEqual((await state(page)).yaw, yaw); assert.equal((await state(page)).pointerLock, false);
await page.mouse.up({ button: 'right' }); await page.waitForTimeout(100);
const released = (await state(page)).yaw;
await page.mouse.move(700, 420, { steps: 4 }); await page.waitForTimeout(300);
assert.equal((await state(page)).yaw, released, 'Camera motion must stop after right-button release');
observations.push({ name: 'editor WASD, panel focus return, combat gating, and right drag without pointer lock', state: await state(page) });
await page.screenshot({ path: path.join(out, 'editor-movement.png') });
}
(async () => {
const { createGameServer } = await import('../server/server.mjs');
const dataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'healer-man-editor-playtest-'));
@@ -74,6 +110,13 @@ async function ready(page) {
assert.equal((await state(page)).mode, 'edit');
assert.equal((await state(page)).grounded, true);
await page.screenshot({ path: path.join(out, 'wow-editor.png') });
await verifyEditorMovement(page, panel);
if (process.env.BITE_SIZED_EDITOR_INPUT_ONLY === '1') {
assert.deepEqual(errors, []);
fs.writeFileSync(path.join(out, 'movement-observations.json'), `${JSON.stringify({ observations, errors }, null, 2)}\n`);
console.log(`Passed editor movement and camera checks. Screenshots: ${out}`);
return;
}
await panel.getByRole('button', { name: 'New spot', exact: true }).click();
await ready(page);
await panel.getByLabel('Spot name', { exact: true }).fill('Playtest new spot');