// Генерация мира из файла Overpass JSON без браузера. // npx tsx scripts/cli.ts input.json south west north east [out.json] import { readFileSync, writeFileSync } from 'node:fs'; import { generateWorldSync } from '../src/gen/generate'; const [inp, s, w, n, e, out] = process.argv.slice(2); if (!inp || !e) { console.error('usage: tsx scripts/cli.ts input.json south west north east [out.json]'); process.exit(1); } const els = JSON.parse(readFileSync(inp, 'utf8')).elements; const t0 = Date.now(); const world = generateWorldSync(els, [+s, +w, +n, +e], inp, 1); const dt = Date.now() - t0; const kinds: Record = {}; const roomKinds: Record = {}; let floors = 0, rooms = 0, props = 0, doors = 0, windows = 0, noEntrance = 0, units = 0, beds = 0; for (const b of world.buildings) { kinds[b.kind] = (kinds[b.kind] ?? 0) + 1; floors += b.floors.length; units += b.units.length; beds += b.beds; for (const f of b.floors) { rooms += f.rooms.length; props += f.props.length; doors += f.doors.length; windows += f.windows.length; for (const r of f.rooms) roomKinds[r.kind] = (roomKinds[r.kind] ?? 0) + 1; } if (b.floors[0] && !b.floors[0].doors.some((d) => d.rooms[1] === 'outside')) noEntrance++; } console.log(`${dt} ms; buildings ${world.buildings.length}, areas ${world.areas.length}, roads ${world.roads.length}, street props ${world.props.length}`); console.log('kinds', kinds); console.log(`floors ${floors}, rooms ${rooms}, doors ${doors}, windows ${windows}, furniture ${props}, units ${units}, beds ${beds}, no entrance ${noEntrance}`); console.log('rooms', roomKinds); const json = JSON.stringify(world); console.log(`world json ${(json.length / 1e6).toFixed(1)} MB`); if (out) writeFileSync(out, json);