@bloopjs/bloop 0.0.89 → 0.0.90

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.
@@ -1 +1 @@
1
- {"version":3,"file":"bloop.d.ts","sourceRoot":"","sources":["../src/bloop.ts"],"names":[],"mappings":"AAcA,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;AAQjD,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;IAoBrE;;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,CAgPhB;CACH;AAUD,KAAK,MAAM,CAAC,CAAC,SAAS,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC"}
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, PlayerInputContext, TimeContext } from "@bloopjs/engine";
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. Shorthand for inputs.players.
16
- * Access via: context.players[0].keys.a.held
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: readonly PlayerInputContext[];
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
@@ -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,kBAAkB,EAClB,WAAW,EACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,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;;;OAGG;IACH,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC,mFAAmF;IACnF,UAAU,EAAE,aAAa,CAAC;IAC1B,+CAA+C;IAC/C,GAAG,EAAE,UAAU,CAAC;CACjB,CAAC"}
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
@@ -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
@@ -4,4 +4,5 @@ export { unwrap, assert } from "./util";
4
4
  export { mount, type Mountable, type MountOptions } from "./mount";
5
5
  export { Bloop } from "./bloop";
6
6
  export { Sim, type LoadTapeOptions } from "./sim";
7
+ export { Players } from "./players";
7
8
  //# sourceMappingURL=mod.d.ts.map
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.89/wasm/bloop.wasm");
1426
+ var DEFAULT_WASM_URL = new URL("https://unpkg.com/@bloopjs/engine@0.0.90/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
- get players() {
1744
- return inputs.players;
1745
- },
1836
+ players: new Players(inputs, net),
1746
1837
  rawPointer: -1,
1747
- net: new NetContext
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=86FA3B16C67B33F564756E2164756E21
2046
+ //# debugId=009B52E93313582464756E2164756E21
1941
2047
  //# sourceMappingURL=mod.js.map