feat(sim): auto-scrub at constant per-altitude speed, 2x slower
Operator: slow click/auto transitions 2x and make them the same speed between any two altitudes (2 away should take twice as long as 1). autoScrub duration is now PROPORTIONAL to distance (PER_ALTITUDE_MS=1200, ~2x the old fixed 600ms total): a label-click or wheel jump of N altitudes takes N*1200ms, so per-step speed is constant. Manual drag is unaffected (operator drives its speed). E2E asserts a 2-step jump is ~2x a 1-step. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -125,6 +125,21 @@ test("wheel auto-scrubs one altitude and locks", async ({ page }) => {
|
||||
expect(await page.locator("#scale-name").textContent()).toBe(landed); // locked
|
||||
});
|
||||
|
||||
test("auto-scrub speed is constant per altitude (a 2-step jump takes ~2x a 1-step)", async ({ page }) => {
|
||||
await boot(page);
|
||||
async function timeJump(deltaY: number, target: string): Promise<number> {
|
||||
const t0 = await page.evaluate(() => performance.now());
|
||||
await page.locator("#stage").dispatchEvent("wheel", { deltaY });
|
||||
await page.waitForFunction((tgt) => !!document.querySelector("#scale-name")?.textContent?.includes(tgt), target, { timeout: 20000 });
|
||||
return (await page.evaluate(() => performance.now())) - t0;
|
||||
}
|
||||
const t1 = await timeJump(60, "orbit"); // cosmos -> orbit (1 altitude)
|
||||
const t2 = await timeJump(120, "reef"); // orbit -> reef (2 altitudes)
|
||||
const ratio = t2 / t1;
|
||||
expect(ratio).toBeGreaterThan(1.5); // proportional to distance, not a fixed total
|
||||
expect(ratio).toBeLessThan(2.7); // ~2x, not more
|
||||
});
|
||||
|
||||
test("a landed clip loops from the morph-tail offset (no jump-back to frame 0)", async ({ page }) => {
|
||||
await boot(page);
|
||||
await enableVideo(page); // base loop only loads when video is shown
|
||||
|
||||
Reference in New Issue
Block a user