Resting faces steeper than the angle of repose topple: blown sand towers collapse (t93)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
"""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')
|
||||
Reference in New Issue
Block a user