@bloopjs/web 0.0.83 → 0.0.85

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/dist/App.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type Bloop, type MountOptions, type Sim } from "@bloopjs/bloop";
1
+ import { type Bloop, type LoadTapeOptions, type MountOptions, type Sim } from "@bloopjs/bloop";
2
2
  import { DebugUi, type DebugUiOptions } from "./debugui/mod.ts";
3
3
  import { type RoomEvents } from "./netcode/broker";
4
4
  export type StartOptions = {
@@ -16,6 +16,8 @@ export type StartOptions = {
16
16
  brokerUrl?: string;
17
17
  /** Enable debug UI with optional configuration */
18
18
  debugUi?: boolean | DebugUiOptions;
19
+ /** Tape recording options */
20
+ tape?: MountOptions["tape"];
19
21
  };
20
22
  /** Start a bloop game on the web */
21
23
  export declare function start(opts: StartOptions): Promise<App>;
@@ -42,7 +44,7 @@ export declare class App {
42
44
  /** Join a multiplayer room via the broker */
43
45
  joinRoom(roomId: string, callbacks: RoomEvents): void;
44
46
  /** Load a tape for replay */
45
- loadTape(tape: Uint8Array): void;
47
+ loadTape(tape: Uint8Array, options?: LoadTapeOptions): void;
46
48
  /** Event listeners for before a frame is processed */
47
49
  beforeFrame: ReturnType<typeof createListener>;
48
50
  /** Event listeners for after a frame is processed */
package/dist/App.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,YAAY,EAAS,KAAK,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAGhF,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOhE,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,MAAM,YAAY,GAAG;IACzB,4BAA4B;IAC5B,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,yEAAyE;IACzE,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,sDAAsD;IACtD,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,qFAAqF;IACrF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wFAAwF;IACxF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,OAAO,CAAC,EAAE,OAAO,GAAG,cAAc,CAAC;CACpC,CAAC;AAIF,oCAAoC;AACpC,wBAAsB,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAuB5D;AAED;;;;;;GAMG;AACH,qBAAa,GAAG;;IAEd,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAQzB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,cAAc;IAmB9B,uDAAuD;IACvD,IAAI,GAAG,IAAI,GAAG,CAEb;IAED,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,EAEf;IAcD,+BAA+B;IAC/B,IAAI,OAAO,IAAI,OAAO,GAAG,IAAI,CAE5B;IAED,gEAAgE;IAChE,IAAI,MAAM,IAAI,iBAAiB,GAAG,IAAI,CAErC;IAED,6CAA6C;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,IAAI;IAIrD,6BAA6B;IAC7B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAchC,sDAAsD;IACtD,WAAW,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAA8B;IAC5E,qDAAqD;IACrD,UAAU,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAA8B;IAC3E,qCAAqC;IACrC,KAAK,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAgC;IAExE,gEAAgE;IAChE,SAAS,IAAI,IAAI;IAgMjB,kDAAkD;IAClD,OAAO,IAAI,IAAI;IASf;;;;;;;;;;;;OAYG;IACG,SAAS,CACb,MAAM,EAAE,GAAG,EACX,IAAI,CAAC,EAAE,YAAY,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACzC,OAAO,CAAC,IAAI,CAAC;CAuBjB;AAED,iBAAS,cAAc,CAAC,CAAC,SAAS,GAAG,EAAE,KAAK;IAC1C,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,KAAK,aAAa,CAAC;IAC7D,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,cAAc,EAAE,aAAa,CAAC;CAC/B,CAuBA;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC;AAEvC,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.ts"],"names":[],"mappings":"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"}
package/dist/mod.js CHANGED
@@ -1346,7 +1346,7 @@ function readTapeHeader(tape) {
1346
1346
  eventCount: view.getUint16(14, true)
1347
1347
  };
1348
1348
  }
1349
- var DEFAULT_WASM_URL = new URL("https://unpkg.com/@bloopjs/engine@0.0.83/wasm/bloop.wasm");
1349
+ var DEFAULT_WASM_URL = new URL("https://unpkg.com/@bloopjs/engine@0.0.85/wasm/bloop.wasm");
1350
1350
  var MAX_ROLLBACK_FRAMES = 500;
1351
1351
  var TIME_CTX_OFFSET = 0;
1352
1352
  var INPUT_CTX_OFFSET = TIME_CTX_OFFSET + 4;
@@ -1440,7 +1440,7 @@ class Sim {
1440
1440
  return copy;
1441
1441
  }
1442
1442
  static NETWORK_MAX_PACKET_BYTES = 2 * 1024 * 1024;
1443
- record(maxEvents = 1024, maxPacketBytes = Sim.NETWORK_MAX_PACKET_BYTES) {
1443
+ record(maxEvents = 1e5, maxPacketBytes = Sim.NETWORK_MAX_PACKET_BYTES) {
1444
1444
  const serializer = this.#serialize ? this.#serialize() : null;
1445
1445
  const size = serializer ? serializer.size : 0;
1446
1446
  const result = this.wasm.start_recording(size, maxEvents, maxPacketBytes);
@@ -1456,7 +1456,7 @@ class Sim {
1456
1456
  copy.set(memoryView);
1457
1457
  return copy;
1458
1458
  }
1459
- loadTape(tape) {
1459
+ loadTape(tape, options) {
1460
1460
  const tapePtr = this.wasm.alloc(tape.byteLength);
1461
1461
  assert(tapePtr > 0, `failed to allocate ${tape.byteLength} bytes for tape load, pointer=${tapePtr}`);
1462
1462
  const memoryView = new Uint8Array(this.#memory.buffer, tapePtr, tape.byteLength);
@@ -1464,7 +1464,9 @@ class Sim {
1464
1464
  if (this.isRecording) {
1465
1465
  this.wasm.stop_recording();
1466
1466
  }
1467
- const result = this.wasm.load_tape(tapePtr, tape.byteLength);
1467
+ const checkpointInterval = options?.checkpointInterval ?? 0;
1468
+ const checkpointMaxSize = options?.checkpointMaxSize ?? 10 * 1024 * 1024;
1469
+ const result = this.wasm.load_tape(tapePtr, tape.byteLength, checkpointInterval, checkpointMaxSize);
1468
1470
  assert(result === 0, `failed to load tape, error code=${result}`);
1469
1471
  this.wasm.free(tapePtr, tape.byteLength);
1470
1472
  }
@@ -1674,14 +1676,15 @@ async function mount(mountable, options) {
1674
1676
  function calculateTapeConfig(tape) {
1675
1677
  let maxEvents;
1676
1678
  if (!tape) {
1677
- maxEvents = 1024;
1679
+ maxEvents = 1e5;
1678
1680
  } else if ("maxEvents" in tape) {
1679
1681
  maxEvents = tape.maxEvents;
1680
1682
  } else {
1681
1683
  const avgEvents = tape.averageEventsPerFrame ?? 2;
1682
1684
  maxEvents = Math.ceil(tape.duration * 60 * avgEvents);
1683
1685
  }
1684
- const maxPacketBytes = tape?.localOnly ? 0 : Sim.NETWORK_MAX_PACKET_BYTES;
1686
+ const localOnly = tape?.localOnly ?? false;
1687
+ const maxPacketBytes = localOnly ? 0 : Sim.NETWORK_MAX_PACKET_BYTES;
1685
1688
  return { maxEvents, maxPacketBytes };
1686
1689
  }
1687
1690
 
@@ -3078,7 +3081,7 @@ function readTapeHeader2(tape) {
3078
3081
  eventCount: view.getUint16(14, true)
3079
3082
  };
3080
3083
  }
3081
- var DEFAULT_WASM_URL2 = new URL("https://unpkg.com/@bloopjs/engine@0.0.83/wasm/bloop.wasm");
3084
+ var DEFAULT_WASM_URL2 = new URL("https://unpkg.com/@bloopjs/engine@0.0.85/wasm/bloop.wasm");
3082
3085
  var TIME_CTX_OFFSET2 = 0;
3083
3086
  var INPUT_CTX_OFFSET2 = TIME_CTX_OFFSET2 + 4;
3084
3087
  var EVENTS_OFFSET2 = INPUT_CTX_OFFSET2 + 4;
@@ -6350,9 +6353,9 @@ class App {
6350
6353
  joinRoom(roomId, callbacks) {
6351
6354
  joinRoom(this.brokerUrl, roomId, callbacks);
6352
6355
  }
6353
- loadTape(tape) {
6356
+ loadTape(tape, options) {
6354
6357
  const header = readTapeHeader2(tape);
6355
- this.sim.loadTape(tape);
6358
+ this.sim.loadTape(tape, options);
6356
6359
  this.sim.seek(header.startFrame);
6357
6360
  this.sim.pause();
6358
6361
  debugState.tapeStartFrame.value = header.startFrame;
@@ -6701,5 +6704,5 @@ export {
6701
6704
  App
6702
6705
  };
6703
6706
 
6704
- //# debugId=9CF70C9E5A89368264756E2164756E21
6707
+ //# debugId=84BFA067C8C329F964756E2164756E21
6705
6708
  //# sourceMappingURL=mod.js.map