The game now begins inside the Negin Sazan Pishgam Radmehr Atousa vending-machine factory on the Mashhad–Chenaran road, and the world extends ~20 km along the real driving route to Park Mellat and Ferdowsi University. - Factory compound: production hall with assembly line, office, yard, gate and company signs; first mission at its half-price demo machine - Map data merged from four OSM extracts (factory zone, route corridor, region main roads, city zone), clipped to a 15 x 18 km region - City meshes chunked and culled by distance; traffic recycled around the player; minimap and city map drawn from cached tiles + overview - The Robot Market robot no longer walks with the family: it comes out of a machine when they arrive, greets them with expression portraits and goes back inside when they leave - PWA: manifest, icons from the robot avatar, offline service worker generated at build time, install button / iOS steps, update prompt; Vazirmatn font bundled instead of Google Fonts - Real-world mode: safety notice, GPS + compass tracking with accuracy smoothing, 20-40 m arrival radius, speed lock and in-person bonus Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
25 lines
1.2 KiB
JavaScript
25 lines
1.2 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {smoothFix, arrivalRadius, insideWorld} from '../src/realworld.js';
|
|
|
|
test('GPS fixes blend by accuracy and a stale estimate is replaced', () => {
|
|
const first = smoothFix(null, {x: 0, z: 0, accuracy: 10, time: 0});
|
|
assert.deepEqual([first.x, first.z], [0, 0]);
|
|
const equal = smoothFix(first, {x: 10, z: 0, accuracy: 10, time: 1000});
|
|
assert.ok(Math.abs(equal.x - 5) < 1e-9, 'equal accuracy meets halfway');
|
|
assert.ok(equal.accuracy < 10, 'two fixes are better than one');
|
|
const poor = smoothFix(first, {x: 50, z: 0, accuracy: 60, time: 1000});
|
|
assert.ok(poor.x < 3, 'a poor fix barely moves a good estimate');
|
|
const stale = smoothFix(first, {x: 99, z: 0, accuracy: 30, time: 60000});
|
|
assert.equal(stale.x, 99);
|
|
});
|
|
|
|
test('Arrival radius widens with poor GPS and bounds check the world', () => {
|
|
assert.equal(arrivalRadius(5), 20);
|
|
assert.equal(arrivalRadius(20), 30);
|
|
assert.equal(arrivalRadius(100), 40);
|
|
const bounds = {minX: -10, minZ: -10, maxX: 10, maxZ: 10};
|
|
assert.ok(insideWorld(bounds, 0, 0));
|
|
assert.equal(insideWorld(bounds, 11, 0), false);
|
|
});
|