Files
deepgrain-foundry/test/t_blow_collapse.py
T

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')