import { drawScene, makeScene } from "../static/scene.js"; import { gridRows, TILE } from "../src/map.ts"; const rows = gridRows(); const solid = (c:number,r:number)=> c<0||r<0||r>=rows.length||c>=rows[0]!.length||rows[r]![c]==="#"; const world = { solid, tile: TILE }; const me:any = {id:"me",x:0,y:0,angle:0,alive:true,side:"atk",hp:100,blind:0,ammo:25,reloading:false,planting:0,spike:false,agent:"ember"}; function ctxOf(){ const c:any={ops:0,fills:0,clips:0}; const noop=()=>{}; return new Proxy(c,{get(t,p:string){ if(p in t) return t[p]; if(p==="measureText") return (s:string)=>({width:s.length*6}); if(p==="createLinearGradient") return ()=>({addColorStop:noop}); return ()=>{ t.ops++; if(p==="fillRect") t.fills++; if(p==="clip") t.clips++; };},set:(t,p,v)=>{t[p]=v;return true;}}); } const spots:[number,number][]=[]; for (let r=1;ri%5===0); function run(W:number, bodies:number, marks:number){ const H = Math.round(W*570/900); const scene = makeScene(); const ctx:any = ctxOf(); let frames=0; for (const [x,y] of open) for (let a=0;a<4;a++){ const players = Array.from({length:bodies},(_,i)=>({id:"b"+i,name:"Bot",agent:"sable", x:x+Math.cos(a+i)*140, y:y+Math.sin(a+i)*140, angle:0, hp:90, alive:true, mate:i%2===0, spike:false, blind:false})); const mark = Array.from({length:marks},(_,i)=>({id:"m"+i,x:x+Math.cos(a+i)*180,y:y+Math.sin(a+i)*180,angle:0,mate:false,fade:0.6})); drawScene(ctx, scene, world, {x,y,angle:a}, {phase:"live",clock:40,result:null,me,players,zones:[],orbs:[],shots:[],spike:{planted:false,carried:false,fuse:0,defuse:0,x:null,y:null}} as any, {width:W,height:H,look:(p:any)=>p, shown:()=>1, marks:mark}); frames++; } console.log(`W=${String(W).padEnd(5)} bodies=${bodies} marks=${marks} ops/frame=${(ctx.ops/frames).toFixed(0).padEnd(5)} fills=${(ctx.fills/frames).toFixed(0).padEnd(5)} clips=${(ctx.clips/frames).toFixed(1)}`); } run(1280,0,0); run(1280,4,0); run(1280,9,3); run(960,0,0); run(960,4,0); run(960,9,3);