@bloopjs/web 0.0.108 → 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 +117 -4
- package/dist/mod.js.map +4 -4
- package/package.json +3 -3
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.
|
|
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.
|
|
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=
|
|
8007
|
+
//# debugId=CB887F2E4FAAE40664756E2164756E21
|
|
7895
8008
|
//# sourceMappingURL=mod.js.map
|