Implement tiled multiplayer city simulation and scaling stages
This commit is contained in:
1 parent
3d4b29fedf
commit
3b1fcd996a
53 files changed
+7354
-13
No files matched your search
@@ -0,0 +1,35 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { generateWorldSync } from '../src/gen/generate';
|
||||
import { attachInteractions, streetObject } from '../src/gen/objects';
|
||||
import { tileWorld, assembleWorld } from '../src/city/format';
|
||||
import type { OsmElement } from '../src/osm/overpass';
|
||||
|
||||
test('indoor and outdoor objects share rotated interaction slots', () => {
|
||||
const bench = streetObject('bench','bench',[10,20],Math.PI/2);
|
||||
assert.deepEqual(bench.interactions?.find(s=>s.action==='sit'),{id:'bench:sit',action:'sit',capacity:3,pos:[9.25,20]});
|
||||
const bed = {...bench,id:'bed',kind:'bed_double',tags:['sleep:2'],w:1.6,d:2,rot:0};
|
||||
attachInteractions(bed);
|
||||
assert.equal(bed.interactions?.[0].capacity,2);
|
||||
assert.equal(bed.interactions?.[0].action,'sleep');
|
||||
});
|
||||
|
||||
test('generation produces stable street furniture and actual entrance references', () => {
|
||||
const elements: OsmElement[] = [
|
||||
{type:'way',id:1,tags:{highway:'residential'},geometry:[{lat:47,lon:9},{lat:47,lon:9.005}]},
|
||||
{type:'way',id:2,tags:{building:'house','building:levels':'1'},geometry:[{lat:47.0002,lon:9.001},{lat:47.0002,lon:9.0012},{lat:47.0004,lon:9.0012},{lat:47.0004,lon:9.001},{lat:47.0002,lon:9.001}]},
|
||||
{type:'node',id:3,tags:{highway:'bus_stop'},lat:47.0001,lon:9.003},
|
||||
{type:'node',id:4,tags:{highway:'crossing'},lat:47,lon:9.004},
|
||||
];
|
||||
const a = generateWorldSync(elements,[46.999,8.999,47.002,9.006],'Test',1);
|
||||
const b = generateWorldSync(elements,[46.999,8.999,47.002,9.006],'Test',1);
|
||||
assert.deepEqual(a.props,b.props);
|
||||
assert.ok(a.props.some(p=>p.kind==='bench'));
|
||||
assert.ok(a.props.some(p=>p.kind==='lamp'));
|
||||
assert.ok(a.props.some(p=>p.kind==='bus_stop'));
|
||||
assert.ok(a.props.some(p=>p.kind==='crossing'));
|
||||
const entrance = a.props.find(p=>p.kind==='entrance'); assert.ok(entrance);
|
||||
assert.ok(a.buildings.some(building=>building.id===entrance.target?.buildingId && building.floors.some(f=>f.doors.some(d=>d.id===entrance.target?.doorId))));
|
||||
const tiled = tileWorld(a);
|
||||
assert.equal(assembleWorld(tiled.manifest,tiled.tiles.values()).props.length,a.props.length);
|
||||
});
|
||||
Reference in new issue
Block a user