@sadhaka/loom-engine 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -1
- package/dist/components/peer-sprite.d.ts +25 -0
- package/dist/components/peer-sprite.d.ts.map +1 -0
- package/dist/components/peer-sprite.js +48 -0
- package/dist/components/peer-sprite.js.map +1 -0
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/network/mock-multiplayer-bridge.d.ts +34 -0
- package/dist/network/mock-multiplayer-bridge.d.ts.map +1 -0
- package/dist/network/mock-multiplayer-bridge.js +91 -0
- package/dist/network/mock-multiplayer-bridge.js.map +1 -0
- package/dist/network/multiplayer-bridge.d.ts +45 -0
- package/dist/network/multiplayer-bridge.d.ts.map +1 -0
- package/dist/network/multiplayer-bridge.js +34 -0
- package/dist/network/multiplayer-bridge.js.map +1 -0
- package/dist/network/peer-pool.d.ts +46 -0
- package/dist/network/peer-pool.d.ts.map +1 -0
- package/dist/network/peer-pool.js +185 -0
- package/dist/network/peer-pool.js.map +1 -0
- package/dist/network/sse-multiplayer-bridge.d.ts +36 -0
- package/dist/network/sse-multiplayer-bridge.d.ts.map +1 -0
- package/dist/network/sse-multiplayer-bridge.js +264 -0
- package/dist/network/sse-multiplayer-bridge.js.map +1 -0
- package/dist/systems/peer-presence-system.d.ts +19 -0
- package/dist/systems/peer-presence-system.d.ts.map +1 -0
- package/dist/systems/peer-presence-system.js +118 -0
- package/dist/systems/peer-presence-system.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -146,7 +146,8 @@ public API surface will evolve until 1.0.
|
|
|
146
146
|
| 11B.3 | shipped | MIT license + npm publish posture (this release) |
|
|
147
147
|
| 12.4 | shipped | License pivot from MIT to BUSL 1.1 with $1M revenue cap |
|
|
148
148
|
| 13.2 | shipped | Engine hardening: 12.6 audit lows L-08..L-12 closed |
|
|
149
|
-
| 14.1 | shipped | WebGL2 instanced sprite batcher
|
|
149
|
+
| 14.1 | shipped | WebGL2 instanced sprite batcher |
|
|
150
|
+
| 15.1 | shipped | Multiplayer presence: pluggable bridge (SSE / Mock), peer pool with per-peer linear interpolation, render system (this release) |
|
|
150
151
|
|
|
151
152
|
See [LOOM-ENGINE-SPEC.md](../docker/LOOM-ENGINE-SPEC.md) Section 7
|
|
152
153
|
for the full phase plan with effort estimates.
|
|
@@ -276,6 +277,14 @@ the browser without a build step on the consumer side.
|
|
|
276
277
|
Demonstrates that the same ECS / resource model that runs the action
|
|
277
278
|
demos also fits a UI-only game: custom `Resource`, custom `System`
|
|
278
279
|
reading both `InputSnapshot` and DOM events, DOM as the primary UI.
|
|
280
|
+
- **[Plaza Multiplayer](./demo/plaza-multiplayer/)** - walkable iso
|
|
281
|
+
plaza with three synthetic peers wandering randomly, driven by a
|
|
282
|
+
`MockMultiplayerBridge`. WASD to walk; the local player broadcasts
|
|
283
|
+
position at 10 Hz and the three peers (Alice / Bob / Carol) lerp
|
|
284
|
+
smoothly between presence updates. Demonstrates the pluggable
|
|
285
|
+
multiplayer bridge, `PeerPool` linear interpolation, and the
|
|
286
|
+
`PeerPresenceSystem` / `PeerRenderSystem` pipeline. See the
|
|
287
|
+
[Multiplayer](#multiplayer) section below for the wire protocol.
|
|
279
288
|
|
|
280
289
|
The legacy reference demos (Phase 6 director, Phase 7 combat, Phase 8
|
|
281
290
|
ARPG slice) stay accessible from the gallery index.
|
|
@@ -285,6 +294,109 @@ Controls in the legacy director demo (`demo/director.html`):
|
|
|
285
294
|
- **Click**: burst 24 particles + play SFX chirp (after first click, AudioContext unlocks)
|
|
286
295
|
- **Hover**: stats panel shows the iso tile under the cursor
|
|
287
296
|
|
|
297
|
+
## Multiplayer
|
|
298
|
+
|
|
299
|
+
Phase 15.1 adds a thin presence layer for showing other players in
|
|
300
|
+
real time on the same world. The transport is pluggable: the engine
|
|
301
|
+
ships an `SSEMultiplayerBridge` (server-sent events) and a
|
|
302
|
+
`MockMultiplayerBridge` (in-process; tests + offline demos), and the
|
|
303
|
+
`IMultiplayerBridge` interface is small enough to swap in WebSocket
|
|
304
|
+
or WebRTC without touching anything above it. No CRDT - peers carry
|
|
305
|
+
position only, and conflict resolution is "last write wins" at the
|
|
306
|
+
server. Shared state beyond position is deferred to a later phase.
|
|
307
|
+
|
|
308
|
+
### Wire protocol
|
|
309
|
+
|
|
310
|
+
The bridge layer hides this from gameplay code, but for anyone
|
|
311
|
+
implementing a server (or a custom transport) the contract is:
|
|
312
|
+
|
|
313
|
+
**Server -> client (SSE event types):**
|
|
314
|
+
- `presence.snapshot` `{ peers: [{ character_id, x, y, zone, ts_ms, name? }] }`
|
|
315
|
+
emitted once on connect with the full current peer roster. The
|
|
316
|
+
client treats this as authoritative and drops any peer not in the
|
|
317
|
+
snapshot.
|
|
318
|
+
- `presence.update` `{ character_id, x, y, zone, ts_ms, name? }`
|
|
319
|
+
emitted as peers move.
|
|
320
|
+
- `presence.depart` `{ character_id }`
|
|
321
|
+
emitted when a peer disconnects.
|
|
322
|
+
|
|
323
|
+
**Client -> server (HTTP POST):**
|
|
324
|
+
- `POST <broadcastUrl>` `{ character_id, x, y, zone, ts_ms }`
|
|
325
|
+
the engine rate-limits to **10 Hz** (`BROADCAST_HZ`); excess calls
|
|
326
|
+
to `broadcastPosition()` are silently dropped and counted in
|
|
327
|
+
`bridge.stats().rateLimitedDrops`. Calling once per frame is fine.
|
|
328
|
+
|
|
329
|
+
`ts_ms` is the wall clock at which the position was true. The
|
|
330
|
+
`PeerPool` uses it to interpolate between successive samples so peers
|
|
331
|
+
don't jitter at the network rate. Acceptable lag is ~150 ms (one
|
|
332
|
+
update interval at 10 Hz), imperceptible at walk speed.
|
|
333
|
+
|
|
334
|
+
### Setup
|
|
335
|
+
|
|
336
|
+
```ts
|
|
337
|
+
import {
|
|
338
|
+
Engine,
|
|
339
|
+
// Multiplayer
|
|
340
|
+
MockMultiplayerBridge, // or SSEMultiplayerBridge
|
|
341
|
+
PeerPool,
|
|
342
|
+
PeerSpritePool,
|
|
343
|
+
PeerPresenceSystem,
|
|
344
|
+
PeerRenderSystem,
|
|
345
|
+
POOL_PEER_SPRITE,
|
|
346
|
+
RESOURCE_MULTIPLAYER_BRIDGE,
|
|
347
|
+
RESOURCE_PEER_POOL,
|
|
348
|
+
SYSTEM_PHASE_INPUT,
|
|
349
|
+
SYSTEM_PHASE_RENDER,
|
|
350
|
+
} from '@sadhaka/loom-engine';
|
|
351
|
+
|
|
352
|
+
const engine = Engine.create({ canvas });
|
|
353
|
+
|
|
354
|
+
// 1. Create a bridge. Production code uses SSEMultiplayerBridge:
|
|
355
|
+
//
|
|
356
|
+
// const bridge = new SSEMultiplayerBridge({
|
|
357
|
+
// baseUrl: '/api/v1/loom/presence/events',
|
|
358
|
+
// characterId: 'me',
|
|
359
|
+
// zone: 'plaza',
|
|
360
|
+
// });
|
|
361
|
+
//
|
|
362
|
+
// Tests + offline dev use the in-process mock:
|
|
363
|
+
const bridge = new MockMultiplayerBridge();
|
|
364
|
+
bridge.connect();
|
|
365
|
+
|
|
366
|
+
// 2. PeerPool stores all known peers + their interpolated positions.
|
|
367
|
+
// Self-filter: tell the pool which character_id is the local player
|
|
368
|
+
// so it isn't rendered as a ghost when the server echoes it back.
|
|
369
|
+
const peerPool = new PeerPool();
|
|
370
|
+
peerPool.setLocalCharacterId('me');
|
|
371
|
+
|
|
372
|
+
// 3. PeerSpritePool maps character_id -> rendering hint. A default
|
|
373
|
+
// atlas + frame is enough for an undifferentiated demo; setOverride()
|
|
374
|
+
// lets you assign per-class sprites or cosmetic shards.
|
|
375
|
+
const peerSprites = new PeerSpritePool({ defaultAtlas: peerAtlas });
|
|
376
|
+
|
|
377
|
+
engine.world.resources.set(RESOURCE_MULTIPLAYER_BRIDGE, bridge);
|
|
378
|
+
engine.world.resources.set(RESOURCE_PEER_POOL, peerPool);
|
|
379
|
+
engine.world.registerPool(POOL_PEER_SPRITE, peerSprites);
|
|
380
|
+
|
|
381
|
+
// 4. Wire the systems. PeerPresenceSystem drains the bridge each
|
|
382
|
+
// frame; PeerRenderSystem submits a drawSprite + name label per
|
|
383
|
+
// peer at their interpolated position.
|
|
384
|
+
engine.world.addSystem(new PeerPresenceSystem(), SYSTEM_PHASE_INPUT);
|
|
385
|
+
engine.world.addSystem(new PeerRenderSystem(), SYSTEM_PHASE_RENDER);
|
|
386
|
+
|
|
387
|
+
// 5. Inside your walk-system, call broadcastPosition() each frame.
|
|
388
|
+
// The bridge enforces the 10 Hz wire rate.
|
|
389
|
+
bridge.broadcastPosition(playerX, playerY, 'plaza', Date.now());
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### Swapping transports
|
|
393
|
+
|
|
394
|
+
The bridge interface is just five methods (`connect`, `disconnect`,
|
|
395
|
+
`status`, `pollMessages`, `broadcastPosition`, plus `stats`). To use
|
|
396
|
+
WebSocket or WebRTC, implement `IMultiplayerBridge` with the same
|
|
397
|
+
`PresenceMessage` shape (`update` / `depart` / `snapshot`); none of
|
|
398
|
+
the systems above the bridge change.
|
|
399
|
+
|
|
288
400
|
## Layout
|
|
289
401
|
|
|
290
402
|
```
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AtlasHandle } from '../renderer/graphics-device.js';
|
|
2
|
+
import type { ColorRGBA } from '../util/color.js';
|
|
3
|
+
export interface PeerSpriteEntry {
|
|
4
|
+
atlas: AtlasHandle;
|
|
5
|
+
frame: number;
|
|
6
|
+
tint: Readonly<ColorRGBA> | null;
|
|
7
|
+
}
|
|
8
|
+
export interface PeerSpritePoolOptions {
|
|
9
|
+
defaultAtlas: AtlasHandle;
|
|
10
|
+
defaultFrame?: number;
|
|
11
|
+
defaultTint?: Readonly<ColorRGBA>;
|
|
12
|
+
}
|
|
13
|
+
export declare class PeerSpritePool {
|
|
14
|
+
private readonly defaultEntry;
|
|
15
|
+
private overrides;
|
|
16
|
+
constructor(opts: PeerSpritePoolOptions);
|
|
17
|
+
setOverride(characterId: string, entry: PeerSpriteEntry): void;
|
|
18
|
+
removeOverride(characterId: string): void;
|
|
19
|
+
resolve(characterId: string): Readonly<PeerSpriteEntry>;
|
|
20
|
+
getDefault(): Readonly<PeerSpriteEntry>;
|
|
21
|
+
hasOverride(characterId: string): boolean;
|
|
22
|
+
clear(): void;
|
|
23
|
+
}
|
|
24
|
+
export declare const POOL_PEER_SPRITE = "peer_sprite";
|
|
25
|
+
//# sourceMappingURL=peer-sprite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-sprite.d.ts","sourceRoot":"","sources":["../../src/components/peer-sprite.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IAEpC,YAAY,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;CACnC;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAC/C,OAAO,CAAC,SAAS,CAA2C;gBAEhD,IAAI,EAAE,qBAAqB;IAWvC,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI;IAI9D,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMzC,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC;IAIvD,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC;IAIvC,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIzC,KAAK,IAAI,IAAI;CAGd;AAED,eAAO,MAAM,gBAAgB,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// PeerSpritePool - per-peer rendering hints (atlas, frame, tint,
|
|
2
|
+
// optional name label) keyed by character_id rather than by EntityId.
|
|
3
|
+
//
|
|
4
|
+
// Peers don't get a stable EntityId because they appear and disappear
|
|
5
|
+
// based on network presence, not gameplay state. The PeerPresenceSystem
|
|
6
|
+
// resolves a peer's interpolated (x, y) from PeerPool each frame and
|
|
7
|
+
// draws via this pool's per-peer atlas/frame.
|
|
8
|
+
//
|
|
9
|
+
// Default style: unspecified peers render with a fallback atlas/frame
|
|
10
|
+
// supplied at pool construction. That keeps single-line setup simple
|
|
11
|
+
// for the demo while still allowing per-peer customization (cosmetic
|
|
12
|
+
// shards, visible class, etc.) once the dev wants to differentiate.
|
|
13
|
+
export class PeerSpritePool {
|
|
14
|
+
defaultEntry;
|
|
15
|
+
overrides = new Map();
|
|
16
|
+
constructor(opts) {
|
|
17
|
+
this.defaultEntry = {
|
|
18
|
+
atlas: opts.defaultAtlas,
|
|
19
|
+
frame: opts.defaultFrame ?? 0,
|
|
20
|
+
tint: opts.defaultTint ?? null,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// Per-peer override. Apply once on join (e.g. after a server-emitted
|
|
24
|
+
// class hint) and forget; the pool keeps it until clear() / removed
|
|
25
|
+
// explicitly.
|
|
26
|
+
setOverride(characterId, entry) {
|
|
27
|
+
this.overrides.set(characterId, entry);
|
|
28
|
+
}
|
|
29
|
+
removeOverride(characterId) {
|
|
30
|
+
this.overrides.delete(characterId);
|
|
31
|
+
}
|
|
32
|
+
// Resolve the rendering entry for a peer. Returns the override if
|
|
33
|
+
// one exists, otherwise the default. Never null for a known peer.
|
|
34
|
+
resolve(characterId) {
|
|
35
|
+
return this.overrides.get(characterId) ?? this.defaultEntry;
|
|
36
|
+
}
|
|
37
|
+
getDefault() {
|
|
38
|
+
return this.defaultEntry;
|
|
39
|
+
}
|
|
40
|
+
hasOverride(characterId) {
|
|
41
|
+
return this.overrides.has(characterId);
|
|
42
|
+
}
|
|
43
|
+
clear() {
|
|
44
|
+
this.overrides.clear();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export const POOL_PEER_SPRITE = 'peer_sprite';
|
|
48
|
+
//# sourceMappingURL=peer-sprite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-sprite.js","sourceRoot":"","sources":["../../src/components/peer-sprite.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,sEAAsE;AACtE,EAAE;AACF,sEAAsE;AACtE,wEAAwE;AACxE,qEAAqE;AACrE,8CAA8C;AAC9C,EAAE;AACF,sEAAsE;AACtE,qEAAqE;AACrE,qEAAqE;AACrE,oEAAoE;AAkBpE,MAAM,OAAO,cAAc;IACR,YAAY,CAAkB;IACvC,SAAS,GAAiC,IAAI,GAAG,EAAE,CAAC;IAE5D,YAAY,IAA2B;QACrC,IAAI,CAAC,YAAY,GAAG;YAClB,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,KAAK,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC;YAC7B,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;SAC/B,CAAC;IACJ,CAAC;IAED,qEAAqE;IACrE,oEAAoE;IACpE,cAAc;IACd,WAAW,CAAC,WAAmB,EAAE,KAAsB;QACrD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,cAAc,CAAC,WAAmB;QAChC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAED,kEAAkE;IAClE,kEAAkE;IAClE,OAAO,CAAC,WAAmB;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;IAC9D,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,WAAW,CAAC,WAAmB;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const LOOM_ENGINE_VERSION = "0.
|
|
1
|
+
export declare const LOOM_ENGINE_VERSION = "0.13.0";
|
|
2
2
|
export type { Vec2, Vec3, Rect } from './util/math.js';
|
|
3
3
|
export { vec2, vec3, rect, clamp, lerp, smoothstep, approxEq, rectContains, rectIntersects, visibleInView, } from './util/math.js';
|
|
4
4
|
export type { ColorRGBA } from './util/color.js';
|
|
@@ -87,4 +87,15 @@ export type { InteractableKind, InteractableConfig, } from './components/interac
|
|
|
87
87
|
export { InteractablePool, POOL_INTERACTABLE, INTERACTABLE_FLAG_ACTIVE, } from './components/interactable.js';
|
|
88
88
|
export type { LastInteractionResource, InteractionSystemOptions, } from './systems/interaction-system.js';
|
|
89
89
|
export { InteractionSystem, createLastInteraction, RESOURCE_LAST_INTERACTION, } from './systems/interaction-system.js';
|
|
90
|
+
export type { IMultiplayerBridge, MultiplayerBridgeStatus, MultiplayerBridgeStats, PresenceMessage, PresenceUpdate, PresenceDepart, PresenceSnapshot, } from './network/multiplayer-bridge.js';
|
|
91
|
+
export { RESOURCE_MULTIPLAYER_BRIDGE, RESOURCE_PEER_POOL, BROADCAST_HZ, BROADCAST_MIN_INTERVAL_MS, } from './network/multiplayer-bridge.js';
|
|
92
|
+
export type { PeerEntry, RenderedPeerView } from './network/peer-pool.js';
|
|
93
|
+
export { PeerPool } from './network/peer-pool.js';
|
|
94
|
+
export type { MockMultiplayerBridgeOptions } from './network/mock-multiplayer-bridge.js';
|
|
95
|
+
export { MockMultiplayerBridge } from './network/mock-multiplayer-bridge.js';
|
|
96
|
+
export type { SSEMultiplayerBridgeOptions } from './network/sse-multiplayer-bridge.js';
|
|
97
|
+
export { SSEMultiplayerBridge } from './network/sse-multiplayer-bridge.js';
|
|
98
|
+
export type { PeerSpriteEntry, PeerSpritePoolOptions } from './components/peer-sprite.js';
|
|
99
|
+
export { PeerSpritePool, POOL_PEER_SPRITE } from './components/peer-sprite.js';
|
|
100
|
+
export { PeerPresenceSystem, PeerRenderSystem, } from './systems/peer-presence-system.js';
|
|
90
101
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// the previous suffix `-perf-9-1` lingered after package.json was
|
|
9
9
|
// bumped to 0.10.0, surfacing as a drift bug in
|
|
10
10
|
// engine.LOOM_ENGINE_VERSION-based diagnostics.
|
|
11
|
-
export const LOOM_ENGINE_VERSION = '0.
|
|
11
|
+
export const LOOM_ENGINE_VERSION = '0.13.0';
|
|
12
12
|
export { vec2, vec3, rect, clamp, lerp, smoothstep, approxEq, rectContains, rectIntersects, visibleInView, } from './util/math.js';
|
|
13
13
|
export { rgba, hexToRgba, rgbaToHexString, rgbaToCssString, colorLerp, COLOR_WHITE, COLOR_BLACK, COLOR_TRANSPARENT, COLOR_KNOT_STR, COLOR_KNOT_DEX, COLOR_KNOT_INT, COLOR_KNOT_CENTER, } from './util/color.js';
|
|
14
14
|
export { EntityAllocator, NULL_ENTITY, entityIndex, entityGeneration, makeEntity, } from './entity.js';
|
|
@@ -75,4 +75,10 @@ export { createZoneState, beginTransition, tickTransition, isTransitioning, RESO
|
|
|
75
75
|
export { ZONE_CATALOG } from './zone/zone-catalog.js';
|
|
76
76
|
export { InteractablePool, POOL_INTERACTABLE, INTERACTABLE_FLAG_ACTIVE, } from './components/interactable.js';
|
|
77
77
|
export { InteractionSystem, createLastInteraction, RESOURCE_LAST_INTERACTION, } from './systems/interaction-system.js';
|
|
78
|
+
export { RESOURCE_MULTIPLAYER_BRIDGE, RESOURCE_PEER_POOL, BROADCAST_HZ, BROADCAST_MIN_INTERVAL_MS, } from './network/multiplayer-bridge.js';
|
|
79
|
+
export { PeerPool } from './network/peer-pool.js';
|
|
80
|
+
export { MockMultiplayerBridge } from './network/mock-multiplayer-bridge.js';
|
|
81
|
+
export { SSEMultiplayerBridge } from './network/sse-multiplayer-bridge.js';
|
|
82
|
+
export { PeerSpritePool, POOL_PEER_SPRITE } from './components/peer-sprite.js';
|
|
83
|
+
export { PeerPresenceSystem, PeerRenderSystem, } from './systems/peer-presence-system.js';
|
|
78
84
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type IMultiplayerBridge, type MultiplayerBridgeStatus, type MultiplayerBridgeStats, type PresenceMessage } from './multiplayer-bridge.js';
|
|
2
|
+
export interface MockMultiplayerBridgeOptions {
|
|
3
|
+
nowMs?: () => number;
|
|
4
|
+
}
|
|
5
|
+
interface SentBroadcast {
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
zone: string;
|
|
9
|
+
tsMs: number;
|
|
10
|
+
sentAtMs: number;
|
|
11
|
+
}
|
|
12
|
+
export declare class MockMultiplayerBridge implements IMultiplayerBridge {
|
|
13
|
+
private queue;
|
|
14
|
+
private statusValue;
|
|
15
|
+
private statsValue;
|
|
16
|
+
private readonly nowMs;
|
|
17
|
+
private lastBroadcastMs;
|
|
18
|
+
private sentBroadcasts;
|
|
19
|
+
constructor(opts?: MockMultiplayerBridgeOptions);
|
|
20
|
+
connect(): void;
|
|
21
|
+
disconnect(): void;
|
|
22
|
+
status(): MultiplayerBridgeStatus;
|
|
23
|
+
pollMessages(): PresenceMessage[];
|
|
24
|
+
broadcastPosition(x: number, y: number, zone: string, tsMs: number): void;
|
|
25
|
+
stats(): Readonly<MultiplayerBridgeStats>;
|
|
26
|
+
enqueueIncoming(msg: PresenceMessage): void;
|
|
27
|
+
enqueueIncomingAll(msgs: ReadonlyArray<PresenceMessage>): void;
|
|
28
|
+
getSentBroadcasts(): ReadonlyArray<Readonly<SentBroadcast>>;
|
|
29
|
+
pendingIncoming(): number;
|
|
30
|
+
resetRateLimit(): void;
|
|
31
|
+
getLastBroadcastMs(): number;
|
|
32
|
+
}
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=mock-multiplayer-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-multiplayer-bridge.d.ts","sourceRoot":"","sources":["../../src/network/mock-multiplayer-bridge.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EAErB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,4BAA4B;IAI3C,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB;AAED,UAAU,aAAa;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IAIb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,qBAAsB,YAAW,kBAAkB;IAC9D,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,UAAU,CAKhB;IACF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,cAAc,CAAuB;gBAEjC,IAAI,GAAE,4BAAiC;IAInD,OAAO,IAAI,IAAI;IAKf,UAAU,IAAI,IAAI;IAIlB,MAAM,IAAI,uBAAuB;IAIjC,YAAY,IAAI,eAAe,EAAE;IAOjC,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAWzE,KAAK,IAAI,QAAQ,CAAC,sBAAsB,CAAC;IAOzC,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAK3C,kBAAkB,CAAC,IAAI,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,IAAI;IAS9D,iBAAiB,IAAI,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAK3D,eAAe,IAAI,MAAM;IAMzB,cAAc,IAAI,IAAI;IAKtB,kBAAkB,IAAI,MAAM;CAG7B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// MockMultiplayerBridge - in-memory presence transport for tests +
|
|
2
|
+
// offline demos.
|
|
3
|
+
//
|
|
4
|
+
// Tests inject incoming presence frames via enqueueIncoming() and let
|
|
5
|
+
// PeerPresenceSystem drain them. broadcastPosition() captures local
|
|
6
|
+
// sends in a getSentBroadcasts() buffer so tests can assert on them.
|
|
7
|
+
// pollMessages() drains the inbound queue in FIFO order.
|
|
8
|
+
//
|
|
9
|
+
// Rate-limiting: shared with the SSE bridge via BROADCAST_MIN_INTERVAL_MS.
|
|
10
|
+
// A nowMs() injection point lets tests fast-forward time without
|
|
11
|
+
// touching the real clock.
|
|
12
|
+
import { BROADCAST_MIN_INTERVAL_MS, } from './multiplayer-bridge.js';
|
|
13
|
+
export class MockMultiplayerBridge {
|
|
14
|
+
queue = [];
|
|
15
|
+
statusValue = 'idle';
|
|
16
|
+
statsValue = {
|
|
17
|
+
messagesReceived: 0,
|
|
18
|
+
messagesSent: 0,
|
|
19
|
+
rateLimitedDrops: 0,
|
|
20
|
+
reconnects: 0,
|
|
21
|
+
};
|
|
22
|
+
nowMs;
|
|
23
|
+
lastBroadcastMs = -Infinity;
|
|
24
|
+
sentBroadcasts = [];
|
|
25
|
+
constructor(opts = {}) {
|
|
26
|
+
this.nowMs = opts.nowMs ?? (() => (typeof performance !== 'undefined' ? performance.now() : Date.now()));
|
|
27
|
+
}
|
|
28
|
+
connect() {
|
|
29
|
+
if (this.statusValue === 'connected')
|
|
30
|
+
return;
|
|
31
|
+
this.statusValue = 'connected';
|
|
32
|
+
}
|
|
33
|
+
disconnect() {
|
|
34
|
+
this.statusValue = 'closed';
|
|
35
|
+
}
|
|
36
|
+
status() {
|
|
37
|
+
return this.statusValue;
|
|
38
|
+
}
|
|
39
|
+
pollMessages() {
|
|
40
|
+
if (this.queue.length === 0)
|
|
41
|
+
return [];
|
|
42
|
+
const out = this.queue;
|
|
43
|
+
this.queue = [];
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
broadcastPosition(x, y, zone, tsMs) {
|
|
47
|
+
const now = this.nowMs();
|
|
48
|
+
if (now - this.lastBroadcastMs < BROADCAST_MIN_INTERVAL_MS) {
|
|
49
|
+
this.statsValue.rateLimitedDrops++;
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
this.lastBroadcastMs = now;
|
|
53
|
+
this.sentBroadcasts.push({ x, y, zone, tsMs, sentAtMs: now });
|
|
54
|
+
this.statsValue.messagesSent++;
|
|
55
|
+
}
|
|
56
|
+
stats() {
|
|
57
|
+
return this.statsValue;
|
|
58
|
+
}
|
|
59
|
+
// ----- Mock-only injection helpers -----
|
|
60
|
+
// Enqueue an inbound presence message as if it came from the server.
|
|
61
|
+
enqueueIncoming(msg) {
|
|
62
|
+
this.queue.push(msg);
|
|
63
|
+
this.statsValue.messagesReceived++;
|
|
64
|
+
}
|
|
65
|
+
enqueueIncomingAll(msgs) {
|
|
66
|
+
for (let i = 0; i < msgs.length; i++) {
|
|
67
|
+
const m = msgs[i];
|
|
68
|
+
if (m)
|
|
69
|
+
this.enqueueIncoming(m);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Tests inspect what broadcastPosition let through. Returns the
|
|
73
|
+
// backing array; the caller may copy if they need a snapshot.
|
|
74
|
+
getSentBroadcasts() {
|
|
75
|
+
return this.sentBroadcasts;
|
|
76
|
+
}
|
|
77
|
+
// Convenience: how many inbound messages are waiting for a poll.
|
|
78
|
+
pendingIncoming() {
|
|
79
|
+
return this.queue.length;
|
|
80
|
+
}
|
|
81
|
+
// Reset rate-limiter state. Useful in tests that simulate a
|
|
82
|
+
// reconnect or want a clean slate.
|
|
83
|
+
resetRateLimit() {
|
|
84
|
+
this.lastBroadcastMs = -Infinity;
|
|
85
|
+
}
|
|
86
|
+
// Inspect-only: when did broadcastPosition last send (in nowMs() units).
|
|
87
|
+
getLastBroadcastMs() {
|
|
88
|
+
return this.lastBroadcastMs;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=mock-multiplayer-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-multiplayer-bridge.js","sourceRoot":"","sources":["../../src/network/mock-multiplayer-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export type MultiplayerBridgeStatus = 'idle' | 'connecting' | 'connected' | 'reconnecting' | 'closed';
|
|
2
|
+
export interface MultiplayerBridgeStats {
|
|
3
|
+
messagesReceived: number;
|
|
4
|
+
messagesSent: number;
|
|
5
|
+
rateLimitedDrops: number;
|
|
6
|
+
reconnects: number;
|
|
7
|
+
}
|
|
8
|
+
export interface PresenceUpdate {
|
|
9
|
+
kind: 'update';
|
|
10
|
+
characterId: string;
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
zone: string;
|
|
14
|
+
tsMs: number;
|
|
15
|
+
name?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface PresenceDepart {
|
|
18
|
+
kind: 'depart';
|
|
19
|
+
characterId: string;
|
|
20
|
+
}
|
|
21
|
+
export interface PresenceSnapshot {
|
|
22
|
+
kind: 'snapshot';
|
|
23
|
+
peers: ReadonlyArray<{
|
|
24
|
+
characterId: string;
|
|
25
|
+
x: number;
|
|
26
|
+
y: number;
|
|
27
|
+
zone: string;
|
|
28
|
+
tsMs: number;
|
|
29
|
+
name?: string;
|
|
30
|
+
}>;
|
|
31
|
+
}
|
|
32
|
+
export type PresenceMessage = PresenceUpdate | PresenceDepart | PresenceSnapshot;
|
|
33
|
+
export interface IMultiplayerBridge {
|
|
34
|
+
connect(): void;
|
|
35
|
+
disconnect(): void;
|
|
36
|
+
status(): MultiplayerBridgeStatus;
|
|
37
|
+
pollMessages(): PresenceMessage[];
|
|
38
|
+
broadcastPosition(x: number, y: number, zone: string, tsMs: number): void;
|
|
39
|
+
stats(): Readonly<MultiplayerBridgeStats>;
|
|
40
|
+
}
|
|
41
|
+
export declare const RESOURCE_MULTIPLAYER_BRIDGE = "multiplayer_bridge";
|
|
42
|
+
export declare const RESOURCE_PEER_POOL = "peer_pool";
|
|
43
|
+
export declare const BROADCAST_HZ = 10;
|
|
44
|
+
export declare const BROADCAST_MIN_INTERVAL_MS: number;
|
|
45
|
+
//# sourceMappingURL=multiplayer-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multiplayer-bridge.d.ts","sourceRoot":"","sources":["../../src/network/multiplayer-bridge.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,uBAAuB,GAC/B,MAAM,GACN,YAAY,GACZ,WAAW,GACX,cAAc,GACd,QAAQ,CAAC;AAEb,MAAM,WAAW,sBAAsB;IAErC,gBAAgB,EAAE,MAAM,CAAC;IAGzB,YAAY,EAAE,MAAM,CAAC;IAGrB,gBAAgB,EAAE,MAAM,CAAC;IAEzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAEjF,MAAM,WAAW,kBAAkB;IAGjC,OAAO,IAAI,IAAI,CAAC;IAEhB,UAAU,IAAI,IAAI,CAAC;IACnB,MAAM,IAAI,uBAAuB,CAAC;IAGlC,YAAY,IAAI,eAAe,EAAE,CAAC;IAKlC,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1E,KAAK,IAAI,QAAQ,CAAC,sBAAsB,CAAC,CAAC;CAC3C;AAGD,eAAO,MAAM,2BAA2B,uBAAuB,CAAC;AAChE,eAAO,MAAM,kBAAkB,cAAc,CAAC;AAM9C,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,yBAAyB,QAAsB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// MultiplayerBridge - abstraction over the presence transport.
|
|
2
|
+
//
|
|
3
|
+
// Concrete implementations:
|
|
4
|
+
// MockMultiplayerBridge - in-process transport for tests + offline
|
|
5
|
+
// dev. enqueueIncoming() simulates server
|
|
6
|
+
// pushes; broadcastPosition() captures local
|
|
7
|
+
// sends so tests can assert on them.
|
|
8
|
+
// SSEMultiplayerBridge - SSE-based implementation parallel to
|
|
9
|
+
// SSEDirectorBridge. Browser-only; throws in
|
|
10
|
+
// Node test runs.
|
|
11
|
+
//
|
|
12
|
+
// The PeerPresenceSystem (PHASE_INPUT) calls pollMessages() once per
|
|
13
|
+
// tick to drain queued presence updates, applies them to the PeerPool,
|
|
14
|
+
// and advances per-peer interpolation. Bridges buffer messages between
|
|
15
|
+
// polls so the system's per-tick read is bounded.
|
|
16
|
+
//
|
|
17
|
+
// Wire protocol (shared with the server-side Track B implementation):
|
|
18
|
+
// - Server emits SSE 'presence.update' { character_id, x, y, zone, ts_ms, name? }
|
|
19
|
+
// - Server emits SSE 'presence.depart' { character_id }
|
|
20
|
+
// - Server emits SSE 'presence.snapshot' { peers: [{ character_id, x, y, zone, ts_ms, name? }, ...] }
|
|
21
|
+
// - Client POSTs /presence/move { character_id, x, y, zone, ts_ms }
|
|
22
|
+
//
|
|
23
|
+
// The bridge layer hides transport details. PeerPresenceSystem and
|
|
24
|
+
// PeerPool deal only with strongly-typed PresenceMessage values.
|
|
25
|
+
// Resource keys.
|
|
26
|
+
export const RESOURCE_MULTIPLAYER_BRIDGE = 'multiplayer_bridge';
|
|
27
|
+
export const RESOURCE_PEER_POOL = 'peer_pool';
|
|
28
|
+
// Engine-side rate limit on broadcastPosition. The wire protocol
|
|
29
|
+
// targets 10 Hz; bridges enforce this regardless of how often the
|
|
30
|
+
// caller invokes broadcastPosition. Documented in the Multiplayer
|
|
31
|
+
// section of README.md.
|
|
32
|
+
export const BROADCAST_HZ = 10;
|
|
33
|
+
export const BROADCAST_MIN_INTERVAL_MS = 1000 / BROADCAST_HZ;
|
|
34
|
+
//# sourceMappingURL=multiplayer-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multiplayer-bridge.js","sourceRoot":"","sources":["../../src/network/multiplayer-bridge.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,4BAA4B;AAC5B,qEAAqE;AACrE,oEAAoE;AACpE,uEAAuE;AACvE,+DAA+D;AAC/D,iEAAiE;AACjE,uEAAuE;AACvE,4CAA4C;AAC5C,EAAE;AACF,qEAAqE;AACrE,uEAAuE;AACvE,uEAAuE;AACvE,kDAAkD;AAClD,EAAE;AACF,sEAAsE;AACtE,sFAAsF;AACtF,4DAA4D;AAC5D,wGAAwG;AACxG,+EAA+E;AAC/E,EAAE;AACF,mEAAmE;AACnE,iEAAiE;AA2EjE,iBAAiB;AACjB,MAAM,CAAC,MAAM,2BAA2B,GAAG,oBAAoB,CAAC;AAChE,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC;AAE9C,iEAAiE;AACjE,kEAAkE;AAClE,kEAAkE;AAClE,wBAAwB;AACxB,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,GAAG,YAAY,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export interface PeerEntry {
|
|
2
|
+
characterId: string;
|
|
3
|
+
zone: string;
|
|
4
|
+
name: string | null;
|
|
5
|
+
prevX: number;
|
|
6
|
+
prevY: number;
|
|
7
|
+
prevTsMs: number;
|
|
8
|
+
currentX: number;
|
|
9
|
+
currentY: number;
|
|
10
|
+
currentTsMs: number;
|
|
11
|
+
lastRenderedFrame: number;
|
|
12
|
+
}
|
|
13
|
+
export interface RenderedPeerView {
|
|
14
|
+
characterId: string;
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
zone: string;
|
|
18
|
+
name: string | null;
|
|
19
|
+
}
|
|
20
|
+
export declare class PeerPool {
|
|
21
|
+
private peers;
|
|
22
|
+
private localCharacterId;
|
|
23
|
+
private scratchView;
|
|
24
|
+
setLocalCharacterId(id: string | null): void;
|
|
25
|
+
getLocalCharacterId(): string | null;
|
|
26
|
+
upsert(characterId: string, x: number, y: number, zone: string, tsMs: number, name?: string): void;
|
|
27
|
+
applySnapshot(peers: ReadonlyArray<{
|
|
28
|
+
characterId: string;
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
zone: string;
|
|
32
|
+
tsMs: number;
|
|
33
|
+
name?: string;
|
|
34
|
+
}>): void;
|
|
35
|
+
remove(characterId: string): boolean;
|
|
36
|
+
has(characterId: string): boolean;
|
|
37
|
+
size(): number;
|
|
38
|
+
get(characterId: string): Readonly<PeerEntry> | undefined;
|
|
39
|
+
forEachRendered(nowMs: number, frame: number, fn: (view: Readonly<RenderedPeerView>) => void): void;
|
|
40
|
+
getRenderedPosition(characterId: string, nowMs: number): {
|
|
41
|
+
x: number;
|
|
42
|
+
y: number;
|
|
43
|
+
} | null;
|
|
44
|
+
clear(): void;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=peer-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-pool.d.ts","sourceRoot":"","sources":["../../src/network/peer-pool.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAGpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IAGpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAMD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAYD,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,gBAAgB,CAAuB;IAI/C,OAAO,CAAC,WAAW,CAMjB;IAEF,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAO5C,mBAAmB,IAAI,MAAM,GAAG,IAAI;IASpC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IA0ClG,aAAa,CACX,KAAK,EAAE,aAAa,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,GACD,IAAI;IAwBP,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIpC,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIjC,IAAI,IAAI,MAAM;IAId,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS;IAOzD,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,KAAK,IAAI,GAAG,IAAI;IAsBnG,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAcxF,KAAK,IAAI,IAAI;CAGd"}
|