import asyncio,json,sys
from playwright.async_api import async_playwright
GPU=['--no-sandbox','--use-angle=gl-egl','--use-gl=angle','--ignore-gpu-blocklist','--enable-gpu']
async def main(root,out):
 async with async_playwright() as p:
  b=await p.chromium.launch(args=GPU);pg=await b.new_page(viewport={'width':1600,'height':900});errors=[]
  pg.on('pageerror',lambda e:errors.append(str(e)))
  await pg.goto(root+'settlement.html?tier=town&site=hill&seed=1&view=walk');await pg.wait_for_function('window.__ready === true',timeout=180000)
  await pg.evaluate("window.__walkStreet();const d=window.__built().group.getObjectByName('dress-driver'),old=d.onBeforeRender;d.onBeforeRender=(r,s,c)=>{if(c?.position)window.__probePosition=[c.position.x,c.position.y,c.position.z];old(r,s,c)};null;")
  await pg.wait_for_timeout(2000);before=await pg.evaluate('window.__probePosition')
  await pg.keyboard.down('w');await pg.wait_for_timeout(800);await pg.keyboard.up('w');await pg.wait_for_timeout(200)
  after=await pg.evaluate('window.__probePosition');moved=sum((a-b)**2 for a,b in zip(after,before))**.5
  json.dump({'town/hill/1':{'before':before,'after':after,'moved':moved,'pass':moved>2.5},'errors':errors},open(out+'/walk.json','w'),indent=1)
  await pg.screenshot(path=out+'/walk-input.png');print('W movement',round(moved,3),'m','errors',errors)
  await b.close()
asyncio.run(main(*sys.argv[1:3]))
