@bloopjs/web 0.0.109 → 0.0.110

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/mod.js CHANGED
@@ -75,6 +75,8 @@ __export2(exports_engine, {
75
75
  keyCodeToKey: () => keyCodeToKey,
76
76
  inputSourceToInputSourceCode: () => inputSourceToInputSourceCode,
77
77
  inputSourceCodeToInputSource: () => inputSourceCodeToInputSource,
78
+ VcrContext: () => VcrContext,
79
+ VCR_CTX_OFFSET: () => VCR_CTX_OFFSET,
78
80
  TimeContext: () => TimeContext,
79
81
  TIME_CTX_OFFSET: () => TIME_CTX_OFFSET,
80
82
  ScreenContext: () => ScreenContext,
@@ -435,6 +437,12 @@ var PLAYER_INPUTS_KEY_CTX_OFFSET = 0;
435
437
  var PLAYER_INPUTS_MOUSE_CTX_OFFSET = 256;
436
438
  var PLAYER_INPUTS_SIZE = 280;
437
439
  var INPUT_CTX_SIZE = 3360;
440
+ var VCR_CTX_IS_RECORDING_OFFSET = 0;
441
+ var VCR_CTX_IS_REPLAYING_OFFSET = 1;
442
+ var VCR_CTX_WANTS_RECORD_OFFSET = 2;
443
+ var VCR_CTX_WANTS_STOP_OFFSET = 3;
444
+ var VCR_CTX_MAX_EVENTS_OFFSET = 4;
445
+ var VCR_CTX_MAX_PACKET_BYTES_OFFSET = 8;
438
446
  var MAX_PLAYERS = 12;
439
447
 
440
448
  class PlayerInputContext {
@@ -1469,6 +1477,52 @@ class TimeContext {
1469
1477
  return this.dataView.getUint32(TIME_CTX_TOTAL_MS_OFFSET, true) / 1000;
1470
1478
  }
1471
1479
  }
1480
+
1481
+ class VcrContext {
1482
+ dataView;
1483
+ constructor(dataView) {
1484
+ this.dataView = dataView;
1485
+ }
1486
+ #hasValidBuffer() {
1487
+ if (!this.dataView)
1488
+ return false;
1489
+ return this.dataView.buffer.byteLength > 0;
1490
+ }
1491
+ get isRecording() {
1492
+ if (!this.#hasValidBuffer()) {
1493
+ throw new Error("VcrContext dataView is not valid");
1494
+ }
1495
+ return this.dataView.getUint8(VCR_CTX_IS_RECORDING_OFFSET) !== 0;
1496
+ }
1497
+ get isReplaying() {
1498
+ if (!this.#hasValidBuffer()) {
1499
+ throw new Error("VcrContext dataView is not valid");
1500
+ }
1501
+ return this.dataView.getUint8(VCR_CTX_IS_REPLAYING_OFFSET) !== 0;
1502
+ }
1503
+ wantsRecord(opts = {}) {
1504
+ if (!this.#hasValidBuffer()) {
1505
+ throw new Error("VcrContext dataView is not valid");
1506
+ }
1507
+ const maxEvents = opts.maxEvents ?? 65535;
1508
+ const maxPacketBytes = opts.maxPacketBytes ?? 1024 * 1024;
1509
+ this.dataView.setUint32(VCR_CTX_MAX_EVENTS_OFFSET, maxEvents, true);
1510
+ this.dataView.setUint32(VCR_CTX_MAX_PACKET_BYTES_OFFSET, maxPacketBytes, true);
1511
+ this.dataView.setUint8(VCR_CTX_WANTS_RECORD_OFFSET, 1);
1512
+ }
1513
+ set wantsStop(value) {
1514
+ if (!this.#hasValidBuffer()) {
1515
+ throw new Error("VcrContext dataView is not valid");
1516
+ }
1517
+ this.dataView.setUint8(VCR_CTX_WANTS_STOP_OFFSET, value ? 1 : 0);
1518
+ }
1519
+ get wantsStop() {
1520
+ if (!this.#hasValidBuffer()) {
1521
+ throw new Error("VcrContext dataView is not valid");
1522
+ }
1523
+ return this.dataView.getUint8(VCR_CTX_WANTS_STOP_OFFSET) !== 0;
1524
+ }
1525
+ }
1472
1526
  var EVENT_PAYLOAD_SIZE = 8;
1473
1527
  var EVENT_PAYLOAD_ALIGN = 4;
1474
1528
  function keyToKeyCode(key) {
@@ -1504,7 +1558,7 @@ function readTapeHeader(tape) {
1504
1558
  eventCount: view.getUint16(14, true)
1505
1559
  };
1506
1560
  }
1507
- var DEFAULT_WASM_URL = new URL("https://unpkg.com/@bloopjs/engine@0.0.109/wasm/bloop.wasm");
1561
+ var DEFAULT_WASM_URL = new URL("https://unpkg.com/@bloopjs/engine@0.0.110/wasm/bloop.wasm");
1508
1562
  var MAX_ROLLBACK_FRAMES = 500;
1509
1563
  var TIME_CTX_OFFSET = 0;
1510
1564
  var INPUT_CTX_OFFSET = TIME_CTX_OFFSET + 4;
@@ -1512,6 +1566,7 @@ var EVENTS_OFFSET = INPUT_CTX_OFFSET + 4;
1512
1566
  var NET_CTX_OFFSET = EVENTS_OFFSET + 4;
1513
1567
  var SCREEN_CTX_OFFSET = NET_CTX_OFFSET + 4;
1514
1568
  var RAND_CTX_OFFSET = SCREEN_CTX_OFFSET + 4;
1569
+ var VCR_CTX_OFFSET = RAND_CTX_OFFSET + 4;
1515
1570
  var SNAPSHOT_HEADER_LEN = 16;
1516
1571
  var SNAPSHOT_HEADER_USER_LEN_OFFSET = 4;
1517
1572
  var SNAPSHOT_HEADER_ENGINE_LEN_OFFSET = 8;
@@ -1925,6 +1980,7 @@ class Bloop {
1925
1980
  const net = new NetContext;
1926
1981
  const screen = new ScreenContext;
1927
1982
  const rand = new RandContext;
1983
+ const vcr = new VcrContext;
1928
1984
  this.#context = {
1929
1985
  bag: opts.bag ?? {},
1930
1986
  time: new TimeContext,
@@ -1933,7 +1989,8 @@ class Bloop {
1933
1989
  rawPointer: -1,
1934
1990
  net,
1935
1991
  screen,
1936
- rand
1992
+ rand,
1993
+ vcr
1937
1994
  };
1938
1995
  }
1939
1996
  get bag() {
@@ -1999,6 +2056,10 @@ class Bloop {
1999
2056
  if (this.#context.rand.dataView?.buffer !== this.#engineBuffer || this.#context.rand.dataView?.byteOffset !== randCtxPtr) {
2000
2057
  this.#context.rand.dataView = new DataView(this.#engineBuffer, randCtxPtr);
2001
2058
  }
2059
+ const vcrCtxPtr = dv.getUint32(VCR_CTX_OFFSET, true);
2060
+ if (this.#context.vcr.dataView?.buffer !== this.#engineBuffer || this.#context.vcr.dataView?.byteOffset !== vcrCtxPtr) {
2061
+ this.#context.vcr.dataView = new DataView(this.#engineBuffer, vcrCtxPtr);
2062
+ }
2002
2063
  if (!this.#randSeeded) {
2003
2064
  this.#context.rand.seed(Date.now() & 4294967295);
2004
2065
  this.#randSeeded = true;
@@ -2451,6 +2512,12 @@ var MOUSE_CTX_BUTTON_STATES_OFFSET2 = 16;
2451
2512
  var PLAYER_INPUTS_KEY_CTX_OFFSET2 = 0;
2452
2513
  var PLAYER_INPUTS_MOUSE_CTX_OFFSET2 = 256;
2453
2514
  var PLAYER_INPUTS_SIZE2 = 280;
2515
+ var VCR_CTX_IS_RECORDING_OFFSET2 = 0;
2516
+ var VCR_CTX_IS_REPLAYING_OFFSET2 = 1;
2517
+ var VCR_CTX_WANTS_RECORD_OFFSET2 = 2;
2518
+ var VCR_CTX_WANTS_STOP_OFFSET2 = 3;
2519
+ var VCR_CTX_MAX_EVENTS_OFFSET2 = 4;
2520
+ var VCR_CTX_MAX_PACKET_BYTES_OFFSET2 = 8;
2454
2521
  var MAX_PLAYERS2 = 12;
2455
2522
 
2456
2523
  class PlayerInputContext2 {
@@ -3372,6 +3439,51 @@ class NetContext2 {
3372
3439
  return !this.isConfirmFrame;
3373
3440
  }
3374
3441
  }
3442
+ class VcrContext2 {
3443
+ dataView;
3444
+ constructor(dataView) {
3445
+ this.dataView = dataView;
3446
+ }
3447
+ #hasValidBuffer() {
3448
+ if (!this.dataView)
3449
+ return false;
3450
+ return this.dataView.buffer.byteLength > 0;
3451
+ }
3452
+ get isRecording() {
3453
+ if (!this.#hasValidBuffer()) {
3454
+ throw new Error("VcrContext dataView is not valid");
3455
+ }
3456
+ return this.dataView.getUint8(VCR_CTX_IS_RECORDING_OFFSET2) !== 0;
3457
+ }
3458
+ get isReplaying() {
3459
+ if (!this.#hasValidBuffer()) {
3460
+ throw new Error("VcrContext dataView is not valid");
3461
+ }
3462
+ return this.dataView.getUint8(VCR_CTX_IS_REPLAYING_OFFSET2) !== 0;
3463
+ }
3464
+ wantsRecord(opts = {}) {
3465
+ if (!this.#hasValidBuffer()) {
3466
+ throw new Error("VcrContext dataView is not valid");
3467
+ }
3468
+ const maxEvents = opts.maxEvents ?? 65535;
3469
+ const maxPacketBytes = opts.maxPacketBytes ?? 1024 * 1024;
3470
+ this.dataView.setUint32(VCR_CTX_MAX_EVENTS_OFFSET2, maxEvents, true);
3471
+ this.dataView.setUint32(VCR_CTX_MAX_PACKET_BYTES_OFFSET2, maxPacketBytes, true);
3472
+ this.dataView.setUint8(VCR_CTX_WANTS_RECORD_OFFSET2, 1);
3473
+ }
3474
+ set wantsStop(value) {
3475
+ if (!this.#hasValidBuffer()) {
3476
+ throw new Error("VcrContext dataView is not valid");
3477
+ }
3478
+ this.dataView.setUint8(VCR_CTX_WANTS_STOP_OFFSET2, value ? 1 : 0);
3479
+ }
3480
+ get wantsStop() {
3481
+ if (!this.#hasValidBuffer()) {
3482
+ throw new Error("VcrContext dataView is not valid");
3483
+ }
3484
+ return this.dataView.getUint8(VCR_CTX_WANTS_STOP_OFFSET2) !== 0;
3485
+ }
3486
+ }
3375
3487
  function mouseButtonCodeToMouseButton2(code) {
3376
3488
  return MouseButton2[code];
3377
3489
  }
@@ -3390,13 +3502,14 @@ function readTapeHeader2(tape) {
3390
3502
  eventCount: view.getUint16(14, true)
3391
3503
  };
3392
3504
  }
3393
- var DEFAULT_WASM_URL2 = new URL("https://unpkg.com/@bloopjs/engine@0.0.109/wasm/bloop.wasm");
3505
+ var DEFAULT_WASM_URL2 = new URL("https://unpkg.com/@bloopjs/engine@0.0.110/wasm/bloop.wasm");
3394
3506
  var TIME_CTX_OFFSET2 = 0;
3395
3507
  var INPUT_CTX_OFFSET2 = TIME_CTX_OFFSET2 + 4;
3396
3508
  var EVENTS_OFFSET2 = INPUT_CTX_OFFSET2 + 4;
3397
3509
  var NET_CTX_OFFSET2 = EVENTS_OFFSET2 + 4;
3398
3510
  var SCREEN_CTX_OFFSET2 = NET_CTX_OFFSET2 + 4;
3399
3511
  var RAND_CTX_OFFSET2 = SCREEN_CTX_OFFSET2 + 4;
3512
+ var VCR_CTX_OFFSET2 = RAND_CTX_OFFSET2 + 4;
3400
3513
 
3401
3514
  // src/debugui/mod.ts
3402
3515
  var exports_mod = {};
@@ -7891,5 +8004,5 @@ export {
7891
8004
  App
7892
8005
  };
7893
8006
 
7894
- //# debugId=E832C4B244063C1E64756E2164756E21
8007
+ //# debugId=CB887F2E4FAAE40664756E2164756E21
7895
8008
  //# sourceMappingURL=mod.js.map