23 lines
1.7 KiB
JavaScript
23 lines
1.7 KiB
JavaScript
import puppeteer from 'puppeteer-core';
|
|
import { spawn } from 'node:child_process';
|
|
import net from 'node:net';
|
|
const preview = spawn('npx', ['vite','preview','--host','127.0.0.1','--port','4815','--strictPort'], { stdio:'ignore' });
|
|
process.on('exit', () => { try{preview.kill()}catch{} });
|
|
for (let i=0;i<50;i++){ const ok = await new Promise(r=>{const s=net.connect(4815,'127.0.0.1');s.once('connect',()=>{s.end();r(true)});s.once('error',()=>r(false))}); if(ok)break; await new Promise(r=>setTimeout(r,300)); }
|
|
const browser = await puppeteer.launch({ executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', headless: true, args: ['--autoplay-policy=no-user-gesture-required','--mute-audio'] });
|
|
const page = await browser.newPage();
|
|
await page.setViewport({ width: 960, height: 560 });
|
|
page.on('console', m => { if (['error','warning'].includes(m.type())) console.log('[console]', m.type(), m.text().slice(0,400)); });
|
|
page.on('pageerror', e => console.log('[pageerror]', (e.stack||e.message).slice(0,800)));
|
|
await page.goto('http://127.0.0.1:4815/', { waitUntil: 'networkidle2' });
|
|
await page.waitForFunction('window.__game && window.__director', { timeout: 15000 });
|
|
await page.waitForFunction(() => window.__game.scene.isActive('TitleScene'), { timeout: 20000 });
|
|
const r = await page.evaluate(() => {
|
|
try { window.__game.scene.start('HouseScene', { spawn: 'default' }); return 'started'; }
|
|
catch (e) { return 'THROW: ' + (e.stack||e.message); }
|
|
});
|
|
console.log('manual start:', r);
|
|
await new Promise(r2=>setTimeout(r2,3000));
|
|
console.log('active:', await page.evaluate(() => window.__game.scene.getScenes(true).map(s=>s.scene.key)));
|
|
await browser.close();
|