52 lines
2.6 KiB
Python
52 lines
2.6 KiB
Python
"""Straight-up bagged sand nozzle in the real pixel frame loop."""
|
|
import pathlib
|
|
import sys
|
|
sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1] / 'tools'))
|
|
from use_venv import ensure_playwright; ensure_playwright()
|
|
from browser import launch, consume_gpu_option, capabilities
|
|
consume_gpu_option()
|
|
ROOT = pathlib.Path(__file__).resolve().parents[1]
|
|
with launch(viewport={'width': 1440, 'height': 900}) as (_, page, url):
|
|
errors = []
|
|
page.on('pageerror', lambda e: errors.append(str(e)))
|
|
page.goto(url)
|
|
print('GPU', capabilities(page), flush=True)
|
|
page.evaluate("""() => {
|
|
const enter=enterGame;enterGame=()=>{enter();GAME.paused=true;};
|
|
SET.workerCap=2;SET.maxSteps=1;SET.fog=false;SET.lighting='off';SET.cameraLead=false;SET.autosave=0;
|
|
startNewWorld(7,768,600);
|
|
}""")
|
|
page.wait_for_function('GAME.running', timeout=60000)
|
|
for file in ('pile-cut', 'pile-blow'):
|
|
page.evaluate((ROOT / f'test/{file}.js').read_text())
|
|
page.evaluate("""() => {
|
|
pileBlowSetup();renderDirty.fill(1);GPU.world=null;SM.surf=-1;
|
|
document.querySelectorAll('.card,.toast').forEach(e=>e.remove());
|
|
$('hud').hidden=true;GAME.hidePreviews=true;SET.zoom=3;resizeRender();
|
|
snapCamera();updateCamera=()=>{};
|
|
}""")
|
|
page.evaluate('startThreads()')
|
|
page.evaluate("""() => {
|
|
simPool.force=true;window.blowTicks=0;window.blowEnd=0;
|
|
const tool=toolTick;toolTick=()=>{tool();if(blowTicks<1200){pileBlowStroke();blowTicks++;}};
|
|
const advance=simTick;simTick=()=>{
|
|
advance();
|
|
if(blowTicks===1200 && !blowEnd){blowEnd=tick;window.blowBefore=pileBlowProfile();GAME.paused=true;}
|
|
else if(blowEnd && tick===blowEnd+480){window.blowAfter=pileBlowProfile();GAME.paused=true;}
|
|
};
|
|
GAME.paused=false;
|
|
}""")
|
|
page.wait_for_function('window.blowBefore', timeout=120000)
|
|
print('before', page.evaluate('blowBefore'), flush=True)
|
|
page.screenshot(path=str(ROOT / 'shots/t93c-before.png'))
|
|
page.evaluate('() => {bot.x=700;bot.y=100;GAME.paused=false;}')
|
|
page.wait_for_function('window.blowAfter', timeout=60000)
|
|
result=page.evaluate('({before:blowBefore,after:blowAfter,helpers:simPool.activeMax})')
|
|
page.screenshot(path=str(ROOT / 'shots/t93c-after.png'))
|
|
print('result', result, flush=True)
|
|
assert result['before']['grains']>15000 and result['before']['height']>100, result
|
|
assert result['after']['cliff']<=2 and result['helpers']>0, result
|
|
assert sum(result['after'][k] for k in ('grains','flying','bag'))==40000, result
|
|
assert not errors, errors
|
|
print('PASS upward nozzle pile collapses within 480 real-loop ticks with active helpers')
|