@bloopjs/bloop 0.0.89 → 0.0.91
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/bloop.d.ts.map +1 -1
- package/dist/context.d.ts +8 -4
- package/dist/context.d.ts.map +1 -1
- package/dist/events.d.ts +8 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/mod.d.ts +1 -0
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +112 -6
- package/dist/mod.js.map +8 -7
- package/dist/players.d.ts +26 -0
- package/dist/players.d.ts.map +1 -0
- package/dist/sim.d.ts +11 -1
- package/dist/sim.d.ts.map +1 -1
- package/dist/system.d.ts +5 -1
- package/dist/system.d.ts.map +1 -1
- package/dist/util.d.ts +3 -0
- package/dist/util.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/bloop.ts +37 -9
- package/src/context.ts +8 -4
- package/src/events.ts +10 -0
- package/src/mod.ts +1 -0
- package/src/players.ts +61 -0
- package/src/sim.ts +38 -0
- package/src/system.ts +8 -0
- package/src/util.ts +3 -0
package/dist/bloop.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bloop.d.ts","sourceRoot":"","sources":["../src/bloop.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bloop.d.ts","sourceRoot":"","sources":["../src/bloop.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AASjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,GAAG,IAAI;IACrC,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IAEH;;OAEG;IAEH;;;OAGG;IACH,GAAG,CAAC,EAAE,CAAC,CAAC;CAET,CAAC;AAEF,qBAAa,KAAK,CAAC,EAAE,SAAS,WAAW;;IAKvC;;OAEG;IACH,MAAM,CAAC,MAAM,CAGX,CAAC,SAAS,GAAG,EAGb,IAAI,GAAE,SAAS,CAAC,CAAC,CAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAI5C;;OAEG;gBACS,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,YAAK,EAAE,kBAAkB,EAAE,MAAM;IAqBrE;;OAEG;IACH,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAEjB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAEnC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM;IAMjD;;OAEG;IACH,KAAK,EAAE,WAAW,CAuQhB;CACH;AAUD,KAAK,MAAM,CAAC,CAAC,SAAS,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/context.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { EnginePointer, InputContext, NetContext,
|
|
1
|
+
import type { EnginePointer, InputContext, NetContext, ScreenContext, TimeContext } from "@bloopjs/engine";
|
|
2
2
|
import type { BloopSchema } from "./data/schema";
|
|
3
|
+
import type { Players } from "./players";
|
|
3
4
|
export type Context<GS extends BloopSchema = BloopSchema> = {
|
|
4
5
|
/** The wrapper to the engine instance */
|
|
5
6
|
/** Result of any resources requested */
|
|
@@ -12,13 +13,16 @@ export type Context<GS extends BloopSchema = BloopSchema> = {
|
|
|
12
13
|
/** The input snapshot */
|
|
13
14
|
inputs: InputContext;
|
|
14
15
|
/**
|
|
15
|
-
* Per-player input states.
|
|
16
|
-
* Access via: context.players
|
|
16
|
+
* Per-player input states.
|
|
17
|
+
* Access via: context.players.get(0).keys.a.held
|
|
18
|
+
* Iterate connected players: for (const p of context.players) { ... }
|
|
17
19
|
*/
|
|
18
|
-
players:
|
|
20
|
+
players: Players;
|
|
19
21
|
/** The engine pointer to the injected system arguments (for advanced use cases) */
|
|
20
22
|
rawPointer: EnginePointer;
|
|
21
23
|
/** Network context for multiplayer sessions */
|
|
22
24
|
net: NetContext;
|
|
25
|
+
/** Screen/viewport dimensions and pixel ratio */
|
|
26
|
+
screen: ScreenContext;
|
|
23
27
|
};
|
|
24
28
|
//# sourceMappingURL=context.d.ts.map
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,EACb,WAAW,EACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,MAAM,OAAO,CACjB,EAAE,SAAS,WAAW,GAAG,WAAW,IAGlC;IACF,yCAAyC;IAEzC,wCAAwC;IAExC,gDAAgD;IAEhD,oDAAoD;IAEpD,uCAAuC;IACvC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACb,mDAAmD;IACnD,IAAI,EAAE,WAAW,CAAC;IAClB,yBAAyB;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,mFAAmF;IACnF,UAAU,EAAE,aAAa,CAAC;IAC1B,+CAA+C;IAC/C,GAAG,EAAE,UAAU,CAAC;IAChB,iDAAiD;IACjD,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC"}
|
package/dist/events.d.ts
CHANGED
|
@@ -14,4 +14,12 @@ export type MouseWheelEvent = {
|
|
|
14
14
|
x: number;
|
|
15
15
|
y: number;
|
|
16
16
|
};
|
|
17
|
+
export type ResizeEvent = {
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
physicalWidth: number;
|
|
21
|
+
physicalHeight: number;
|
|
22
|
+
pixelRatio: number;
|
|
23
|
+
};
|
|
24
|
+
export type BloopEvent = InputEvent | ResizeEvent;
|
|
17
25
|
//# sourceMappingURL=events.d.ts.map
|
package/dist/events.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,gBAAgB,GAChB,cAAc,GACd,eAAe,CAAC;AAEpB,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC"}
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,gBAAgB,GAChB,cAAc,GACd,eAAe,CAAC;AAEpB,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC"}
|
package/dist/mod.d.ts
CHANGED
package/dist/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,KAAK,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,KAAK,eAAe,EAAE,MAAM,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,KAAK,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,KAAK,eAAe,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/mod.js
CHANGED
|
@@ -68,9 +68,11 @@ __export(exports_engine, {
|
|
|
68
68
|
inputSourceCodeToInputSource: () => inputSourceCodeToInputSource,
|
|
69
69
|
TimeContext: () => TimeContext,
|
|
70
70
|
TIME_CTX_OFFSET: () => TIME_CTX_OFFSET,
|
|
71
|
+
ScreenContext: () => ScreenContext,
|
|
71
72
|
SNAPSHOT_HEADER_USER_LEN_OFFSET: () => SNAPSHOT_HEADER_USER_LEN_OFFSET,
|
|
72
73
|
SNAPSHOT_HEADER_LEN: () => SNAPSHOT_HEADER_LEN,
|
|
73
74
|
SNAPSHOT_HEADER_ENGINE_LEN_OFFSET: () => SNAPSHOT_HEADER_ENGINE_LEN_OFFSET,
|
|
75
|
+
SCREEN_CTX_OFFSET: () => SCREEN_CTX_OFFSET,
|
|
74
76
|
PlayerInputContext: () => PlayerInputContext,
|
|
75
77
|
PLAYER_INPUTS_SIZE: () => PLAYER_INPUTS_SIZE,
|
|
76
78
|
PLAYER_INPUTS_MOUSE_CTX_OFFSET: () => PLAYER_INPUTS_MOUSE_CTX_OFFSET,
|
|
@@ -132,6 +134,7 @@ var EventType;
|
|
|
132
134
|
EventType2[EventType2["NetPeerAssignLocalId"] = 12] = "NetPeerAssignLocalId";
|
|
133
135
|
EventType2[EventType2["NetPacketReceived"] = 13] = "NetPacketReceived";
|
|
134
136
|
EventType2[EventType2["NetSessionInit"] = 14] = "NetSessionInit";
|
|
137
|
+
EventType2[EventType2["Resize"] = 15] = "Resize";
|
|
135
138
|
})(EventType ||= {});
|
|
136
139
|
var MouseButton;
|
|
137
140
|
((MouseButton2) => {
|
|
@@ -403,6 +406,11 @@ var NET_CTX_PEERS_OFFSET = 32;
|
|
|
403
406
|
var NET_CTX_LAST_ROLLBACK_DEPTH_OFFSET = 128;
|
|
404
407
|
var NET_CTX_TOTAL_ROLLBACKS_OFFSET = 132;
|
|
405
408
|
var NET_CTX_FRAMES_RESIMULATED_OFFSET = 136;
|
|
409
|
+
var SCREEN_CTX_WIDTH_OFFSET = 0;
|
|
410
|
+
var SCREEN_CTX_HEIGHT_OFFSET = 4;
|
|
411
|
+
var SCREEN_CTX_PHYSICAL_WIDTH_OFFSET = 8;
|
|
412
|
+
var SCREEN_CTX_PHYSICAL_HEIGHT_OFFSET = 12;
|
|
413
|
+
var SCREEN_CTX_PIXEL_RATIO_OFFSET = 16;
|
|
406
414
|
var MOUSE_CTX_X_OFFSET = 0;
|
|
407
415
|
var MOUSE_CTX_Y_OFFSET = 4;
|
|
408
416
|
var MOUSE_CTX_WHEEL_X_OFFSET = 8;
|
|
@@ -1319,6 +1327,43 @@ class NetContext {
|
|
|
1319
1327
|
}
|
|
1320
1328
|
}
|
|
1321
1329
|
|
|
1330
|
+
class ScreenContext {
|
|
1331
|
+
dataView;
|
|
1332
|
+
constructor(dataView) {
|
|
1333
|
+
this.dataView = dataView;
|
|
1334
|
+
}
|
|
1335
|
+
get width() {
|
|
1336
|
+
if (!this.dataView) {
|
|
1337
|
+
throw new Error("ScreenContext DataView is not initialized");
|
|
1338
|
+
}
|
|
1339
|
+
return this.dataView.getUint32(SCREEN_CTX_WIDTH_OFFSET, true);
|
|
1340
|
+
}
|
|
1341
|
+
get height() {
|
|
1342
|
+
if (!this.dataView) {
|
|
1343
|
+
throw new Error("ScreenContext DataView is not initialized");
|
|
1344
|
+
}
|
|
1345
|
+
return this.dataView.getUint32(SCREEN_CTX_HEIGHT_OFFSET, true);
|
|
1346
|
+
}
|
|
1347
|
+
get physicalWidth() {
|
|
1348
|
+
if (!this.dataView) {
|
|
1349
|
+
throw new Error("ScreenContext DataView is not initialized");
|
|
1350
|
+
}
|
|
1351
|
+
return this.dataView.getUint32(SCREEN_CTX_PHYSICAL_WIDTH_OFFSET, true);
|
|
1352
|
+
}
|
|
1353
|
+
get physicalHeight() {
|
|
1354
|
+
if (!this.dataView) {
|
|
1355
|
+
throw new Error("ScreenContext DataView is not initialized");
|
|
1356
|
+
}
|
|
1357
|
+
return this.dataView.getUint32(SCREEN_CTX_PHYSICAL_HEIGHT_OFFSET, true);
|
|
1358
|
+
}
|
|
1359
|
+
get pixelRatio() {
|
|
1360
|
+
if (!this.dataView) {
|
|
1361
|
+
throw new Error("ScreenContext DataView is not initialized");
|
|
1362
|
+
}
|
|
1363
|
+
return this.dataView.getFloat32(SCREEN_CTX_PIXEL_RATIO_OFFSET, true);
|
|
1364
|
+
}
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1322
1367
|
class TimeContext {
|
|
1323
1368
|
dataView;
|
|
1324
1369
|
constructor(dataView) {
|
|
@@ -1378,12 +1423,13 @@ function readTapeHeader(tape) {
|
|
|
1378
1423
|
eventCount: view.getUint16(14, true)
|
|
1379
1424
|
};
|
|
1380
1425
|
}
|
|
1381
|
-
var DEFAULT_WASM_URL = new URL("https://unpkg.com/@bloopjs/engine@0.0.
|
|
1426
|
+
var DEFAULT_WASM_URL = new URL("https://unpkg.com/@bloopjs/engine@0.0.91/wasm/bloop.wasm");
|
|
1382
1427
|
var MAX_ROLLBACK_FRAMES = 500;
|
|
1383
1428
|
var TIME_CTX_OFFSET = 0;
|
|
1384
1429
|
var INPUT_CTX_OFFSET = TIME_CTX_OFFSET + 4;
|
|
1385
1430
|
var EVENTS_OFFSET = INPUT_CTX_OFFSET + 4;
|
|
1386
1431
|
var NET_CTX_OFFSET = EVENTS_OFFSET + 4;
|
|
1432
|
+
var SCREEN_CTX_OFFSET = NET_CTX_OFFSET + 4;
|
|
1387
1433
|
var SNAPSHOT_HEADER_LEN = 16;
|
|
1388
1434
|
var SNAPSHOT_HEADER_USER_LEN_OFFSET = 4;
|
|
1389
1435
|
var SNAPSHOT_HEADER_ENGINE_LEN_OFFSET = 8;
|
|
@@ -1406,6 +1452,7 @@ class Sim {
|
|
|
1406
1452
|
#serialize;
|
|
1407
1453
|
#isPaused = false;
|
|
1408
1454
|
#net;
|
|
1455
|
+
#screen;
|
|
1409
1456
|
onTapeFull;
|
|
1410
1457
|
constructor(wasm, memory, opts) {
|
|
1411
1458
|
this.wasm = wasm;
|
|
@@ -1414,6 +1461,7 @@ class Sim {
|
|
|
1414
1461
|
this.id = `${Math.floor(Math.random() * 1e6)}`;
|
|
1415
1462
|
this.#serialize = opts?.serialize;
|
|
1416
1463
|
this.#net = new NetContext;
|
|
1464
|
+
this.#screen = new ScreenContext;
|
|
1417
1465
|
}
|
|
1418
1466
|
step(ms) {
|
|
1419
1467
|
if (this.#isPaused) {
|
|
@@ -1526,6 +1574,12 @@ class Sim {
|
|
|
1526
1574
|
}
|
|
1527
1575
|
return this.#net;
|
|
1528
1576
|
}
|
|
1577
|
+
get screen() {
|
|
1578
|
+
if (!this.#screen.dataView || this.#screen.dataView.buffer !== this.#memory.buffer) {
|
|
1579
|
+
this.#screen.dataView = new DataView(this.#memory.buffer, this.wasm.get_screen_ctx());
|
|
1580
|
+
}
|
|
1581
|
+
return this.#screen;
|
|
1582
|
+
}
|
|
1529
1583
|
get buffer() {
|
|
1530
1584
|
return this.#memory.buffer;
|
|
1531
1585
|
}
|
|
@@ -1557,6 +1611,9 @@ class Sim {
|
|
|
1557
1611
|
mousewheel: (x, y, peerId = 0) => {
|
|
1558
1612
|
this.wasm.emit_mousewheel(x, y, peerId);
|
|
1559
1613
|
},
|
|
1614
|
+
resize: (width, height, physicalWidth, physicalHeight, pixelRatio) => {
|
|
1615
|
+
this.wasm.emit_resize(width, height, physicalWidth, physicalHeight, pixelRatio);
|
|
1616
|
+
},
|
|
1560
1617
|
network: (type, data) => {
|
|
1561
1618
|
switch (type) {
|
|
1562
1619
|
case "join:ok": {
|
|
@@ -1723,6 +1780,40 @@ function calculateTapeConfig(tape) {
|
|
|
1723
1780
|
const maxPacketBytes = localOnly ? 0 : Sim.NETWORK_MAX_PACKET_BYTES;
|
|
1724
1781
|
return { maxEvents, maxPacketBytes };
|
|
1725
1782
|
}
|
|
1783
|
+
// src/players.ts
|
|
1784
|
+
class Players {
|
|
1785
|
+
#inputs;
|
|
1786
|
+
#net;
|
|
1787
|
+
constructor(inputs, net) {
|
|
1788
|
+
this.#inputs = inputs;
|
|
1789
|
+
this.#net = net;
|
|
1790
|
+
}
|
|
1791
|
+
get(index) {
|
|
1792
|
+
const players = this.#inputs.players;
|
|
1793
|
+
if (index < 0 || index >= players.length) {
|
|
1794
|
+
throw new RangeError(`Player index ${index} out of bounds (0-${players.length - 1})`);
|
|
1795
|
+
}
|
|
1796
|
+
return players[index];
|
|
1797
|
+
}
|
|
1798
|
+
get count() {
|
|
1799
|
+
return this.#net.isInSession ? this.#net.peerCount : 1;
|
|
1800
|
+
}
|
|
1801
|
+
*[Symbol.iterator]() {
|
|
1802
|
+
const players = this.#inputs.players;
|
|
1803
|
+
const count = this.count;
|
|
1804
|
+
for (let i = 0;i < count; i++) {
|
|
1805
|
+
yield players[i];
|
|
1806
|
+
}
|
|
1807
|
+
}
|
|
1808
|
+
*entries() {
|
|
1809
|
+
const players = this.#inputs.players;
|
|
1810
|
+
const count = this.count;
|
|
1811
|
+
for (let i = 0;i < count; i++) {
|
|
1812
|
+
yield [i, players[i]];
|
|
1813
|
+
}
|
|
1814
|
+
}
|
|
1815
|
+
}
|
|
1816
|
+
|
|
1726
1817
|
// src/bloop.ts
|
|
1727
1818
|
class Bloop {
|
|
1728
1819
|
#systems = [];
|
|
@@ -1736,15 +1827,16 @@ class Bloop {
|
|
|
1736
1827
|
throw new Error("Bloop constructor is private. Use Bloop.create() to create a new game instance.");
|
|
1737
1828
|
}
|
|
1738
1829
|
const inputs = new InputContext;
|
|
1830
|
+
const net = new NetContext;
|
|
1831
|
+
const screen = new ScreenContext;
|
|
1739
1832
|
this.#context = {
|
|
1740
1833
|
bag: opts.bag ?? {},
|
|
1741
1834
|
time: new TimeContext,
|
|
1742
1835
|
inputs,
|
|
1743
|
-
|
|
1744
|
-
return inputs.players;
|
|
1745
|
-
},
|
|
1836
|
+
players: new Players(inputs, net),
|
|
1746
1837
|
rawPointer: -1,
|
|
1747
|
-
net
|
|
1838
|
+
net,
|
|
1839
|
+
screen
|
|
1748
1840
|
};
|
|
1749
1841
|
}
|
|
1750
1842
|
get bag() {
|
|
@@ -1792,6 +1884,7 @@ class Bloop {
|
|
|
1792
1884
|
const timeCtxPtr = dv.getUint32(TIME_CTX_OFFSET, true);
|
|
1793
1885
|
const inputCtxPtr = dv.getUint32(INPUT_CTX_OFFSET, true);
|
|
1794
1886
|
const netCtxPtr = dv.getUint32(NET_CTX_OFFSET, true);
|
|
1887
|
+
const screenCtxPtr = dv.getUint32(SCREEN_CTX_OFFSET, true);
|
|
1795
1888
|
this.#context.rawPointer = ptr;
|
|
1796
1889
|
if (!this.#context.inputs.hasDataView() || this.#context.inputs.dataView.buffer !== this.#engineBuffer || this.#context.inputs.dataView.byteOffset !== inputCtxPtr) {
|
|
1797
1890
|
this.#context.inputs.dataView = new DataView(this.#engineBuffer, inputCtxPtr);
|
|
@@ -1802,6 +1895,9 @@ class Bloop {
|
|
|
1802
1895
|
if (this.#context.net.dataView?.buffer !== this.#engineBuffer || this.#context.net.dataView?.byteOffset !== netCtxPtr) {
|
|
1803
1896
|
this.#context.net.dataView = new DataView(this.#engineBuffer, netCtxPtr);
|
|
1804
1897
|
}
|
|
1898
|
+
if (this.#context.screen.dataView?.buffer !== this.#engineBuffer || this.#context.screen.dataView?.byteOffset !== screenCtxPtr) {
|
|
1899
|
+
this.#context.screen.dataView = new DataView(this.#engineBuffer, screenCtxPtr);
|
|
1900
|
+
}
|
|
1805
1901
|
},
|
|
1806
1902
|
systemsCallback: (system_handle, ptr) => {
|
|
1807
1903
|
this.hooks.setContext(ptr);
|
|
@@ -1913,6 +2009,15 @@ class Bloop {
|
|
|
1913
2009
|
};
|
|
1914
2010
|
system.netcode?.(this.#context);
|
|
1915
2011
|
break;
|
|
2012
|
+
case exports_enums.EventType.Resize:
|
|
2013
|
+
system.resize?.(attachEvent(this.#context, {
|
|
2014
|
+
width: this.#context.screen.width,
|
|
2015
|
+
height: this.#context.screen.height,
|
|
2016
|
+
physicalWidth: this.#context.screen.physicalWidth,
|
|
2017
|
+
physicalHeight: this.#context.screen.physicalHeight,
|
|
2018
|
+
pixelRatio: this.#context.screen.pixelRatio
|
|
2019
|
+
}));
|
|
2020
|
+
break;
|
|
1916
2021
|
default:
|
|
1917
2022
|
break;
|
|
1918
2023
|
}
|
|
@@ -1933,9 +2038,10 @@ export {
|
|
|
1933
2038
|
assert,
|
|
1934
2039
|
exports_util as Util,
|
|
1935
2040
|
Sim,
|
|
2041
|
+
Players,
|
|
1936
2042
|
exports_engine as Engine,
|
|
1937
2043
|
Bloop
|
|
1938
2044
|
};
|
|
1939
2045
|
|
|
1940
|
-
//# debugId=
|
|
2046
|
+
//# debugId=06F3CF60D9084C2164756E2164756E21
|
|
1941
2047
|
//# sourceMappingURL=mod.js.map
|