@bloopjs/bloop 0.0.30 → 0.0.32

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { Context } from "./context";
2
2
  import type { Bag } from "./data/bag";
3
3
  import type { BloopSchema } from "./data/schema";
4
- import type { EngineHooks } from "./runtime";
4
+ import type { EngineHooks } from "./sim";
5
5
  import type { System } from "./system";
6
6
  export type BloopOpts<B extends Bag> = {
7
7
  /** defaults to "Game" */
@@ -1 +1 @@
1
- {"version":3,"file":"bloop.d.ts","sourceRoot":"","sources":["../src/bloop.ts"],"names":[],"mappings":"AAaA,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,WAAW,CAAC;AAC7C,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;IAerE;;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,CA6IhB;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":"AAaA,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;IAerE;;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,CA6IhB;CACH;AAUD,KAAK,MAAM,CAAC,CAAC,SAAS,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC"}
package/dist/mod.d.ts CHANGED
@@ -1,10 +1,5 @@
1
- export type * as typesRuntime from "./runtime";
2
- export type * as typesMount from "./mount";
3
- export type * as typesBloop from "./bloop";
4
- export type * as typesContext from "./context";
5
1
  export * as Util from "./util";
6
- export { mount } from "./mount";
2
+ export { mount, type MountOpts } from "./mount";
7
3
  export { Bloop } from "./bloop";
8
- export { Runtime } from "./runtime";
9
- export { handleUpdate } from "./hmr";
4
+ export { Sim } from "./sim";
10
5
  //# 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,YAAY,KAAK,YAAY,MAAM,WAAW,CAAA;AAC9C,YAAY,KAAK,UAAU,MAAM,SAAS,CAAA;AAC1C,YAAY,KAAK,UAAU,MAAM,SAAS,CAAA;AAC1C,YAAY,KAAK,YAAY,MAAM,WAAW,CAAA;AAE9C,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA"}
package/dist/mod.js CHANGED
@@ -1016,7 +1016,7 @@ var EVENTS_OFFSET = INPUT_CTX_OFFSET + 4;
1016
1016
  var SNAPSHOT_HEADER_USER_LEN_OFFSET = 4;
1017
1017
  var SNAPSHOT_HEADER_ENGINE_LEN_OFFSET = 8;
1018
1018
 
1019
- // src/runtime.ts
1019
+ // src/sim.ts
1020
1020
  var originalConsole = globalThis.console;
1021
1021
  var noop = () => {};
1022
1022
  var stubConsole = Object.fromEntries(Object.keys(originalConsole).map((key) => [key, noop]));
@@ -1027,20 +1027,39 @@ function unmuteConsole() {
1027
1027
  globalThis.console = originalConsole;
1028
1028
  }
1029
1029
 
1030
- class Runtime {
1030
+ class Sim {
1031
1031
  wasm;
1032
+ id;
1032
1033
  #memory;
1033
1034
  #time;
1034
1035
  #serialize;
1036
+ #isPaused = false;
1035
1037
  constructor(wasm, memory, opts) {
1036
1038
  this.wasm = wasm;
1037
1039
  this.#memory = memory;
1038
1040
  this.#time = new TimeContext(new DataView(this.#memory.buffer, this.wasm.get_time_ctx()));
1041
+ this.id = `${Math.floor(Math.random() * 1e6)}`;
1039
1042
  this.#serialize = opts?.serialize;
1040
1043
  }
1041
1044
  step(ms) {
1045
+ if (this.#isPaused && !this.isReplaying) {
1046
+ return;
1047
+ }
1042
1048
  this.wasm.step(ms ?? 16);
1043
1049
  }
1050
+ cloneSession(source) {
1051
+ this.loadTape(source.saveTape());
1052
+ this.restore(source.snapshot());
1053
+ }
1054
+ pause() {
1055
+ this.#isPaused = true;
1056
+ }
1057
+ unpause() {
1058
+ this.#isPaused = false;
1059
+ }
1060
+ get isPaused() {
1061
+ return this.#isPaused;
1062
+ }
1044
1063
  stepBack() {
1045
1064
  if (this.time.frame === 0) {
1046
1065
  return;
@@ -1186,17 +1205,16 @@ async function mount(opts) {
1186
1205
  });
1187
1206
  const wasm = wasmInstantiatedSource.instance.exports;
1188
1207
  const enginePointer = wasm.initialize();
1189
- const runtime = new Runtime(wasm, memory, {
1208
+ const sim = new Sim(wasm, memory, {
1190
1209
  serialize: opts.hooks.serialize
1191
1210
  });
1192
1211
  if (opts.startRecording ?? true) {
1193
- runtime.record();
1212
+ sim.record();
1194
1213
  }
1195
1214
  opts.hooks.setBuffer(memory.buffer);
1196
1215
  opts.hooks.setContext(enginePointer);
1197
1216
  return {
1198
- runtime,
1199
- wasm
1217
+ sim
1200
1218
  };
1201
1219
  }
1202
1220
  // src/bloop.ts
@@ -1331,27 +1349,12 @@ function attachEvent(context, event) {
1331
1349
  context.event = event;
1332
1350
  return context;
1333
1351
  }
1334
- // src/hmr.ts
1335
- async function handleUpdate(newModule, oldRuntime, mountOptions) {
1336
- assert(newModule?.game, `HMR: missing game export on module: ${JSON.stringify(newModule)}`);
1337
- const { runtime } = await mount({
1338
- hooks: newModule.game.hooks,
1339
- ...mountOptions
1340
- });
1341
- const tape = oldRuntime.saveTape();
1342
- const snapshot = oldRuntime.snapshot();
1343
- runtime.loadTape(tape);
1344
- runtime.restore(snapshot);
1345
- oldRuntime.unmount();
1346
- return runtime;
1347
- }
1348
1352
  export {
1349
1353
  mount,
1350
- handleUpdate,
1351
1354
  exports_util as Util,
1352
- Runtime,
1355
+ Sim,
1353
1356
  Bloop
1354
1357
  };
1355
1358
 
1356
- //# debugId=123C79DDBA89537664756E2164756E21
1359
+ //# debugId=2C457AC2FD76A02564756E2164756E21
1357
1360
  //# sourceMappingURL=mod.js.map
package/dist/mod.js.map CHANGED
@@ -1,15 +1,14 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/util.ts", "../../engine/dist/engine.js", "../src/runtime.ts", "../src/mount.ts", "../src/bloop.ts", "../src/hmr.ts"],
3
+ "sources": ["../src/util.ts", "../../engine/dist/engine.js", "../src/sim.ts", "../src/mount.ts", "../src/bloop.ts"],
4
4
  "sourcesContent": [
5
5
  "export function toHexString(dataView: DataView, length?: number): string {\n length ??= dataView.byteLength;\n let hexString = \"\";\n for (let i = 0; i < length; i++) {\n const byte = dataView.getUint8(i);\n hexString += `${byte.toString(16).padStart(2, \"0\")} `;\n }\n return hexString.trim();\n}\n\nexport function assert(condition: any, message?: string): asserts condition {\n if (condition == null || condition === false) {\n throw new Error(message ?? \"Assertion failed\");\n }\n}\n\nexport function unwrap<T>(\n value: T | null | undefined,\n message?: string,\n): NonNullable<T> {\n assert(value != null, message ?? `Unwrap failed: value is ${value}`);\n return value;\n}\n",
6
6
  "var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, {\n get: all[name],\n enumerable: true,\n configurable: true,\n set: (newValue) => all[name] = () => newValue\n });\n};\n\n// js/codegen/enums.ts\nvar exports_enums = {};\n__export(exports_enums, {\n MouseButton: () => MouseButton,\n Key: () => Key,\n EventType: () => EventType\n});\nvar EventType;\n((EventType2) => {\n EventType2[EventType2[\"None\"] = 0] = \"None\";\n EventType2[EventType2[\"KeyDown\"] = 1] = \"KeyDown\";\n EventType2[EventType2[\"KeyUp\"] = 2] = \"KeyUp\";\n EventType2[EventType2[\"MouseMove\"] = 3] = \"MouseMove\";\n EventType2[EventType2[\"MouseDown\"] = 4] = \"MouseDown\";\n EventType2[EventType2[\"MouseUp\"] = 5] = \"MouseUp\";\n EventType2[EventType2[\"MouseWheel\"] = 6] = \"MouseWheel\";\n EventType2[EventType2[\"FrameStart\"] = 7] = \"FrameStart\";\n})(EventType ||= {});\nvar MouseButton;\n((MouseButton2) => {\n MouseButton2[MouseButton2[\"None\"] = 0] = \"None\";\n MouseButton2[MouseButton2[\"Left\"] = 1] = \"Left\";\n MouseButton2[MouseButton2[\"Middle\"] = 2] = \"Middle\";\n MouseButton2[MouseButton2[\"Right\"] = 3] = \"Right\";\n MouseButton2[MouseButton2[\"X1\"] = 4] = \"X1\";\n MouseButton2[MouseButton2[\"X2\"] = 5] = \"X2\";\n MouseButton2[MouseButton2[\"X3\"] = 6] = \"X3\";\n MouseButton2[MouseButton2[\"X4\"] = 7] = \"X4\";\n MouseButton2[MouseButton2[\"X5\"] = 8] = \"X5\";\n})(MouseButton ||= {});\nvar Key;\n((Key2) => {\n Key2[Key2[\"None\"] = 0] = \"None\";\n Key2[Key2[\"Backquote\"] = 1] = \"Backquote\";\n Key2[Key2[\"Backslash\"] = 2] = \"Backslash\";\n Key2[Key2[\"BracketLeft\"] = 3] = \"BracketLeft\";\n Key2[Key2[\"BracketRight\"] = 4] = \"BracketRight\";\n Key2[Key2[\"Comma\"] = 5] = \"Comma\";\n Key2[Key2[\"Digit0\"] = 6] = \"Digit0\";\n Key2[Key2[\"Digit1\"] = 7] = \"Digit1\";\n Key2[Key2[\"Digit2\"] = 8] = \"Digit2\";\n Key2[Key2[\"Digit3\"] = 9] = \"Digit3\";\n Key2[Key2[\"Digit4\"] = 10] = \"Digit4\";\n Key2[Key2[\"Digit5\"] = 11] = \"Digit5\";\n Key2[Key2[\"Digit6\"] = 12] = \"Digit6\";\n Key2[Key2[\"Digit7\"] = 13] = \"Digit7\";\n Key2[Key2[\"Digit8\"] = 14] = \"Digit8\";\n Key2[Key2[\"Digit9\"] = 15] = \"Digit9\";\n Key2[Key2[\"Equal\"] = 16] = \"Equal\";\n Key2[Key2[\"IntlBackslash\"] = 17] = \"IntlBackslash\";\n Key2[Key2[\"IntlRo\"] = 18] = \"IntlRo\";\n Key2[Key2[\"IntlYen\"] = 19] = \"IntlYen\";\n Key2[Key2[\"KeyA\"] = 20] = \"KeyA\";\n Key2[Key2[\"KeyB\"] = 21] = \"KeyB\";\n Key2[Key2[\"KeyC\"] = 22] = \"KeyC\";\n Key2[Key2[\"KeyD\"] = 23] = \"KeyD\";\n Key2[Key2[\"KeyE\"] = 24] = \"KeyE\";\n Key2[Key2[\"KeyF\"] = 25] = \"KeyF\";\n Key2[Key2[\"KeyG\"] = 26] = \"KeyG\";\n Key2[Key2[\"KeyH\"] = 27] = \"KeyH\";\n Key2[Key2[\"KeyI\"] = 28] = \"KeyI\";\n Key2[Key2[\"KeyJ\"] = 29] = \"KeyJ\";\n Key2[Key2[\"KeyK\"] = 30] = \"KeyK\";\n Key2[Key2[\"KeyL\"] = 31] = \"KeyL\";\n Key2[Key2[\"KeyM\"] = 32] = \"KeyM\";\n Key2[Key2[\"KeyN\"] = 33] = \"KeyN\";\n Key2[Key2[\"KeyO\"] = 34] = \"KeyO\";\n Key2[Key2[\"KeyP\"] = 35] = \"KeyP\";\n Key2[Key2[\"KeyQ\"] = 36] = \"KeyQ\";\n Key2[Key2[\"KeyR\"] = 37] = \"KeyR\";\n Key2[Key2[\"KeyS\"] = 38] = \"KeyS\";\n Key2[Key2[\"KeyT\"] = 39] = \"KeyT\";\n Key2[Key2[\"KeyU\"] = 40] = \"KeyU\";\n Key2[Key2[\"KeyV\"] = 41] = \"KeyV\";\n Key2[Key2[\"KeyW\"] = 42] = \"KeyW\";\n Key2[Key2[\"KeyX\"] = 43] = \"KeyX\";\n Key2[Key2[\"KeyY\"] = 44] = \"KeyY\";\n Key2[Key2[\"KeyZ\"] = 45] = \"KeyZ\";\n Key2[Key2[\"Minus\"] = 46] = \"Minus\";\n Key2[Key2[\"Period\"] = 47] = \"Period\";\n Key2[Key2[\"Quote\"] = 48] = \"Quote\";\n Key2[Key2[\"Semicolon\"] = 49] = \"Semicolon\";\n Key2[Key2[\"Slash\"] = 50] = \"Slash\";\n Key2[Key2[\"AltLeft\"] = 51] = \"AltLeft\";\n Key2[Key2[\"AltRight\"] = 52] = \"AltRight\";\n Key2[Key2[\"Backspace\"] = 53] = \"Backspace\";\n Key2[Key2[\"CapsLock\"] = 54] = \"CapsLock\";\n Key2[Key2[\"ContextMenu\"] = 55] = \"ContextMenu\";\n Key2[Key2[\"ControlLeft\"] = 56] = \"ControlLeft\";\n Key2[Key2[\"ControlRight\"] = 57] = \"ControlRight\";\n Key2[Key2[\"Enter\"] = 58] = \"Enter\";\n Key2[Key2[\"MetaLeft\"] = 59] = \"MetaLeft\";\n Key2[Key2[\"MetaRight\"] = 60] = \"MetaRight\";\n Key2[Key2[\"ShiftLeft\"] = 61] = \"ShiftLeft\";\n Key2[Key2[\"ShiftRight\"] = 62] = \"ShiftRight\";\n Key2[Key2[\"Space\"] = 63] = \"Space\";\n Key2[Key2[\"Tab\"] = 64] = \"Tab\";\n Key2[Key2[\"Convert\"] = 65] = \"Convert\";\n Key2[Key2[\"KanaMode\"] = 66] = \"KanaMode\";\n Key2[Key2[\"Lang1\"] = 67] = \"Lang1\";\n Key2[Key2[\"Lang2\"] = 68] = \"Lang2\";\n Key2[Key2[\"Lang3\"] = 69] = \"Lang3\";\n Key2[Key2[\"Lang4\"] = 70] = \"Lang4\";\n Key2[Key2[\"Lang5\"] = 71] = \"Lang5\";\n Key2[Key2[\"NonConvert\"] = 72] = \"NonConvert\";\n Key2[Key2[\"Delete\"] = 73] = \"Delete\";\n Key2[Key2[\"End\"] = 74] = \"End\";\n Key2[Key2[\"Help\"] = 75] = \"Help\";\n Key2[Key2[\"Home\"] = 76] = \"Home\";\n Key2[Key2[\"Insert\"] = 77] = \"Insert\";\n Key2[Key2[\"PageDown\"] = 78] = \"PageDown\";\n Key2[Key2[\"PageUp\"] = 79] = \"PageUp\";\n Key2[Key2[\"ArrowDown\"] = 80] = \"ArrowDown\";\n Key2[Key2[\"ArrowLeft\"] = 81] = \"ArrowLeft\";\n Key2[Key2[\"ArrowRight\"] = 82] = \"ArrowRight\";\n Key2[Key2[\"ArrowUp\"] = 83] = \"ArrowUp\";\n Key2[Key2[\"NumLock\"] = 84] = \"NumLock\";\n Key2[Key2[\"Numpad0\"] = 85] = \"Numpad0\";\n Key2[Key2[\"Numpad1\"] = 86] = \"Numpad1\";\n Key2[Key2[\"Numpad2\"] = 87] = \"Numpad2\";\n Key2[Key2[\"Numpad3\"] = 88] = \"Numpad3\";\n Key2[Key2[\"Numpad4\"] = 89] = \"Numpad4\";\n Key2[Key2[\"Numpad5\"] = 90] = \"Numpad5\";\n Key2[Key2[\"Numpad6\"] = 91] = \"Numpad6\";\n Key2[Key2[\"Numpad7\"] = 92] = \"Numpad7\";\n Key2[Key2[\"Numpad8\"] = 93] = \"Numpad8\";\n Key2[Key2[\"Numpad9\"] = 94] = \"Numpad9\";\n Key2[Key2[\"NumpadAdd\"] = 95] = \"NumpadAdd\";\n Key2[Key2[\"NumpadBackspace\"] = 96] = \"NumpadBackspace\";\n Key2[Key2[\"NumpadClear\"] = 97] = \"NumpadClear\";\n Key2[Key2[\"NumpadClearEntry\"] = 98] = \"NumpadClearEntry\";\n Key2[Key2[\"NumpadComma\"] = 99] = \"NumpadComma\";\n Key2[Key2[\"NumpadDecimal\"] = 100] = \"NumpadDecimal\";\n Key2[Key2[\"NumpadDivide\"] = 101] = \"NumpadDivide\";\n Key2[Key2[\"NumpadEnter\"] = 102] = \"NumpadEnter\";\n Key2[Key2[\"NumpadEqual\"] = 103] = \"NumpadEqual\";\n Key2[Key2[\"NumpadHash\"] = 104] = \"NumpadHash\";\n Key2[Key2[\"NumpadMemoryAdd\"] = 105] = \"NumpadMemoryAdd\";\n Key2[Key2[\"NumpadMemoryClear\"] = 106] = \"NumpadMemoryClear\";\n Key2[Key2[\"NumpadMemoryRecall\"] = 107] = \"NumpadMemoryRecall\";\n Key2[Key2[\"NumpadMemoryStore\"] = 108] = \"NumpadMemoryStore\";\n Key2[Key2[\"NumpadMemorySubtract\"] = 109] = \"NumpadMemorySubtract\";\n Key2[Key2[\"NumpadMultiply\"] = 110] = \"NumpadMultiply\";\n Key2[Key2[\"NumpadParenLeft\"] = 111] = \"NumpadParenLeft\";\n Key2[Key2[\"NumpadParenRight\"] = 112] = \"NumpadParenRight\";\n Key2[Key2[\"NumpadStar\"] = 113] = \"NumpadStar\";\n Key2[Key2[\"NumpadSubtract\"] = 114] = \"NumpadSubtract\";\n Key2[Key2[\"Escape\"] = 115] = \"Escape\";\n Key2[Key2[\"Fn\"] = 116] = \"Fn\";\n Key2[Key2[\"FnLock\"] = 117] = \"FnLock\";\n Key2[Key2[\"PrintScreen\"] = 118] = \"PrintScreen\";\n Key2[Key2[\"ScrollLock\"] = 119] = \"ScrollLock\";\n Key2[Key2[\"Pause\"] = 120] = \"Pause\";\n Key2[Key2[\"BrowserBack\"] = 121] = \"BrowserBack\";\n Key2[Key2[\"BrowserFavorites\"] = 122] = \"BrowserFavorites\";\n Key2[Key2[\"BrowserForward\"] = 123] = \"BrowserForward\";\n Key2[Key2[\"BrowserHome\"] = 124] = \"BrowserHome\";\n Key2[Key2[\"BrowserRefresh\"] = 125] = \"BrowserRefresh\";\n Key2[Key2[\"BrowserSearch\"] = 126] = \"BrowserSearch\";\n Key2[Key2[\"BrowserStop\"] = 127] = \"BrowserStop\";\n Key2[Key2[\"Eject\"] = 128] = \"Eject\";\n Key2[Key2[\"LaunchApp1\"] = 129] = \"LaunchApp1\";\n Key2[Key2[\"LaunchApp2\"] = 130] = \"LaunchApp2\";\n Key2[Key2[\"LaunchMail\"] = 131] = \"LaunchMail\";\n Key2[Key2[\"MediaPlayPause\"] = 132] = \"MediaPlayPause\";\n Key2[Key2[\"MediaSelect\"] = 133] = \"MediaSelect\";\n Key2[Key2[\"MediaStop\"] = 134] = \"MediaStop\";\n Key2[Key2[\"MediaTrackNext\"] = 135] = \"MediaTrackNext\";\n Key2[Key2[\"MediaTrackPrevious\"] = 136] = \"MediaTrackPrevious\";\n Key2[Key2[\"Power\"] = 137] = \"Power\";\n Key2[Key2[\"Sleep\"] = 138] = \"Sleep\";\n Key2[Key2[\"AudioVolumeDown\"] = 139] = \"AudioVolumeDown\";\n Key2[Key2[\"AudioVolumeMute\"] = 140] = \"AudioVolumeMute\";\n Key2[Key2[\"AudioVolumeUp\"] = 141] = \"AudioVolumeUp\";\n Key2[Key2[\"WakeUp\"] = 142] = \"WakeUp\";\n Key2[Key2[\"Hyper\"] = 143] = \"Hyper\";\n Key2[Key2[\"Super\"] = 144] = \"Super\";\n Key2[Key2[\"Turbo\"] = 145] = \"Turbo\";\n Key2[Key2[\"Abort\"] = 146] = \"Abort\";\n Key2[Key2[\"Resume\"] = 147] = \"Resume\";\n Key2[Key2[\"Suspend\"] = 148] = \"Suspend\";\n Key2[Key2[\"Again\"] = 149] = \"Again\";\n Key2[Key2[\"Copy\"] = 150] = \"Copy\";\n Key2[Key2[\"Cut\"] = 151] = \"Cut\";\n Key2[Key2[\"Find\"] = 152] = \"Find\";\n Key2[Key2[\"Open\"] = 153] = \"Open\";\n Key2[Key2[\"Paste\"] = 154] = \"Paste\";\n Key2[Key2[\"Props\"] = 155] = \"Props\";\n Key2[Key2[\"Select\"] = 156] = \"Select\";\n Key2[Key2[\"Undo\"] = 157] = \"Undo\";\n Key2[Key2[\"Hiragana\"] = 158] = \"Hiragana\";\n Key2[Key2[\"Katakana\"] = 159] = \"Katakana\";\n Key2[Key2[\"F1\"] = 160] = \"F1\";\n Key2[Key2[\"F2\"] = 161] = \"F2\";\n Key2[Key2[\"F3\"] = 162] = \"F3\";\n Key2[Key2[\"F4\"] = 163] = \"F4\";\n Key2[Key2[\"F5\"] = 164] = \"F5\";\n Key2[Key2[\"F6\"] = 165] = \"F6\";\n Key2[Key2[\"F7\"] = 166] = \"F7\";\n Key2[Key2[\"F8\"] = 167] = \"F8\";\n Key2[Key2[\"F9\"] = 168] = \"F9\";\n Key2[Key2[\"F10\"] = 169] = \"F10\";\n Key2[Key2[\"F11\"] = 170] = \"F11\";\n Key2[Key2[\"F12\"] = 171] = \"F12\";\n Key2[Key2[\"F13\"] = 172] = \"F13\";\n Key2[Key2[\"F14\"] = 173] = \"F14\";\n Key2[Key2[\"F15\"] = 174] = \"F15\";\n Key2[Key2[\"F16\"] = 175] = \"F16\";\n Key2[Key2[\"F17\"] = 176] = \"F17\";\n Key2[Key2[\"F18\"] = 177] = \"F18\";\n Key2[Key2[\"F19\"] = 178] = \"F19\";\n Key2[Key2[\"F20\"] = 179] = \"F20\";\n Key2[Key2[\"F21\"] = 180] = \"F21\";\n Key2[Key2[\"F22\"] = 181] = \"F22\";\n Key2[Key2[\"F23\"] = 182] = \"F23\";\n Key2[Key2[\"F24\"] = 183] = \"F24\";\n Key2[Key2[\"F25\"] = 184] = \"F25\";\n Key2[Key2[\"F26\"] = 185] = \"F26\";\n Key2[Key2[\"F27\"] = 186] = \"F27\";\n Key2[Key2[\"F28\"] = 187] = \"F28\";\n Key2[Key2[\"F29\"] = 188] = \"F29\";\n Key2[Key2[\"F30\"] = 189] = \"F30\";\n Key2[Key2[\"F31\"] = 190] = \"F31\";\n Key2[Key2[\"F32\"] = 191] = \"F32\";\n Key2[Key2[\"F33\"] = 192] = \"F33\";\n Key2[Key2[\"F34\"] = 193] = \"F34\";\n Key2[Key2[\"F35\"] = 194] = \"F35\";\n})(Key ||= {});\n// js/inputs.ts\nvar MOUSE_OFFSET = 256;\nvar MOUSE_BUTTONS_OFFSET = 16;\nvar KEYBOARD_OFFSET = 0;\nvar EVENT_PAYLOAD_SIZE = 8;\nvar EVENT_PAYLOAD_ALIGN = 4;\nfunction keyToKeyCode(key) {\n return Key[key];\n}\nfunction keyCodeToKey(code) {\n return Key[code];\n}\nfunction mouseButtonToMouseButtonCode(button) {\n return MouseButton[button];\n}\nfunction mouseButtonCodeToMouseButton(code) {\n return MouseButton[code];\n}\n\n// js/contexts/inputContext.ts\nclass InputContext {\n #dataView;\n #keys;\n #mouse;\n constructor(dataView) {\n if (dataView) {\n this.#dataView = dataView;\n }\n }\n get dataView() {\n if (!this.#dataView) {\n throw new Error(\"DataView is not initialized on InputContext\");\n }\n return this.#dataView;\n }\n set dataView(dataView) {\n this.#dataView = dataView;\n this.#keys = undefined;\n this.#mouse = undefined;\n }\n get keys() {\n if (!this.#keys) {\n this.#keys = new KeyboardContext(new DataView(this.dataView.buffer, this.dataView.byteOffset + KEYBOARD_OFFSET));\n }\n return this.#keys;\n }\n get mouse() {\n if (!this.#mouse) {\n this.#mouse = new MouseContext(new DataView(this.dataView.buffer, this.dataView.byteOffset + MOUSE_OFFSET));\n }\n return this.#mouse;\n }\n}\n\nclass MouseContext {\n #dataView;\n #buttonStates = new Map;\n constructor(dataView) {\n this.#dataView = dataView;\n }\n get x() {\n return this.#dataView.getFloat32(0, true);\n }\n get y() {\n return this.#dataView.getFloat32(4, true);\n }\n get wheel() {\n return { x: this.wheelX, y: this.wheelY };\n }\n get wheelX() {\n return this.#dataView.getFloat32(8, true);\n }\n get wheelY() {\n return this.#dataView.getFloat32(12, true);\n }\n get left() {\n return this.#buttonState(1 /* Left */);\n }\n get right() {\n return this.#buttonState(3 /* Right */);\n }\n get middle() {\n return this.#buttonState(2 /* Middle */);\n }\n #buttonState(code) {\n let state;\n if (this.#buttonStates.has(code)) {\n state = this.#buttonStates.get(code);\n } else {\n state = { down: false, held: false, up: false };\n this.#buttonStates.set(code, state);\n }\n const offset = MOUSE_BUTTONS_OFFSET;\n state.held = !!(this.#dataView.getUint8(offset + code) & 1);\n state.down = state.held && !(this.#dataView.getUint8(offset + code) & 2);\n state.up = !state.held && !!(this.#dataView.getUint8(offset + code) & 2);\n return state;\n }\n}\n\nclass KeyboardContext {\n #dataView;\n #keystates = new Map;\n constructor(dataView) {\n this.#dataView = dataView;\n }\n get shift() {\n return this.shiftLeft || this.shiftRight;\n }\n get alt() {\n return this.altLeft || this.altRight;\n }\n get control() {\n return this.controlLeft || this.controlRight;\n }\n get meta() {\n return this.metaLeft || this.metaRight;\n }\n get backquote() {\n return this.#keystate(1 /* Backquote */);\n }\n get backslash() {\n return this.#keystate(2 /* Backslash */);\n }\n get bracketLeft() {\n return this.#keystate(3 /* BracketLeft */);\n }\n get bracketRight() {\n return this.#keystate(4 /* BracketRight */);\n }\n get comma() {\n return this.#keystate(5 /* Comma */);\n }\n get digit0() {\n return this.#keystate(6 /* Digit0 */);\n }\n get digit1() {\n return this.#keystate(7 /* Digit1 */);\n }\n get digit2() {\n return this.#keystate(8 /* Digit2 */);\n }\n get digit3() {\n return this.#keystate(9 /* Digit3 */);\n }\n get digit4() {\n return this.#keystate(10 /* Digit4 */);\n }\n get digit5() {\n return this.#keystate(11 /* Digit5 */);\n }\n get digit6() {\n return this.#keystate(12 /* Digit6 */);\n }\n get digit7() {\n return this.#keystate(13 /* Digit7 */);\n }\n get digit8() {\n return this.#keystate(14 /* Digit8 */);\n }\n get digit9() {\n return this.#keystate(15 /* Digit9 */);\n }\n get equal() {\n return this.#keystate(16 /* Equal */);\n }\n get intlBackslash() {\n return this.#keystate(17 /* IntlBackslash */);\n }\n get intlRo() {\n return this.#keystate(18 /* IntlRo */);\n }\n get intlYen() {\n return this.#keystate(19 /* IntlYen */);\n }\n get a() {\n return this.#keystate(20 /* KeyA */);\n }\n get b() {\n return this.#keystate(21 /* KeyB */);\n }\n get c() {\n return this.#keystate(22 /* KeyC */);\n }\n get d() {\n return this.#keystate(23 /* KeyD */);\n }\n get e() {\n return this.#keystate(24 /* KeyE */);\n }\n get f() {\n return this.#keystate(25 /* KeyF */);\n }\n get g() {\n return this.#keystate(26 /* KeyG */);\n }\n get h() {\n return this.#keystate(27 /* KeyH */);\n }\n get i() {\n return this.#keystate(28 /* KeyI */);\n }\n get j() {\n return this.#keystate(29 /* KeyJ */);\n }\n get k() {\n return this.#keystate(30 /* KeyK */);\n }\n get l() {\n return this.#keystate(31 /* KeyL */);\n }\n get m() {\n return this.#keystate(32 /* KeyM */);\n }\n get n() {\n return this.#keystate(33 /* KeyN */);\n }\n get o() {\n return this.#keystate(34 /* KeyO */);\n }\n get p() {\n return this.#keystate(35 /* KeyP */);\n }\n get q() {\n return this.#keystate(36 /* KeyQ */);\n }\n get r() {\n return this.#keystate(37 /* KeyR */);\n }\n get s() {\n return this.#keystate(38 /* KeyS */);\n }\n get t() {\n return this.#keystate(39 /* KeyT */);\n }\n get u() {\n return this.#keystate(40 /* KeyU */);\n }\n get v() {\n return this.#keystate(41 /* KeyV */);\n }\n get w() {\n return this.#keystate(42 /* KeyW */);\n }\n get x() {\n return this.#keystate(43 /* KeyX */);\n }\n get y() {\n return this.#keystate(44 /* KeyY */);\n }\n get z() {\n return this.#keystate(45 /* KeyZ */);\n }\n get minus() {\n return this.#keystate(46 /* Minus */);\n }\n get period() {\n return this.#keystate(47 /* Period */);\n }\n get quote() {\n return this.#keystate(48 /* Quote */);\n }\n get semicolon() {\n return this.#keystate(49 /* Semicolon */);\n }\n get slash() {\n return this.#keystate(50 /* Slash */);\n }\n get altLeft() {\n return this.#keystate(51 /* AltLeft */);\n }\n get altRight() {\n return this.#keystate(52 /* AltRight */);\n }\n get backspace() {\n return this.#keystate(53 /* Backspace */);\n }\n get capsLock() {\n return this.#keystate(54 /* CapsLock */);\n }\n get contextMenu() {\n return this.#keystate(55 /* ContextMenu */);\n }\n get controlLeft() {\n return this.#keystate(56 /* ControlLeft */);\n }\n get controlRight() {\n return this.#keystate(57 /* ControlRight */);\n }\n get enter() {\n return this.#keystate(58 /* Enter */);\n }\n get metaLeft() {\n return this.#keystate(59 /* MetaLeft */);\n }\n get metaRight() {\n return this.#keystate(60 /* MetaRight */);\n }\n get shiftLeft() {\n return this.#keystate(61 /* ShiftLeft */);\n }\n get shiftRight() {\n return this.#keystate(62 /* ShiftRight */);\n }\n get space() {\n return this.#keystate(63 /* Space */);\n }\n get tab() {\n return this.#keystate(64 /* Tab */);\n }\n get convert() {\n return this.#keystate(65 /* Convert */);\n }\n get kanaMode() {\n return this.#keystate(66 /* KanaMode */);\n }\n get lang1() {\n return this.#keystate(67 /* Lang1 */);\n }\n get lang2() {\n return this.#keystate(68 /* Lang2 */);\n }\n get lang3() {\n return this.#keystate(69 /* Lang3 */);\n }\n get lang4() {\n return this.#keystate(70 /* Lang4 */);\n }\n get lang5() {\n return this.#keystate(71 /* Lang5 */);\n }\n get nonConvert() {\n return this.#keystate(72 /* NonConvert */);\n }\n get delete() {\n return this.#keystate(73 /* Delete */);\n }\n get end() {\n return this.#keystate(74 /* End */);\n }\n get help() {\n return this.#keystate(75 /* Help */);\n }\n get home() {\n return this.#keystate(76 /* Home */);\n }\n get insert() {\n return this.#keystate(77 /* Insert */);\n }\n get pageDown() {\n return this.#keystate(78 /* PageDown */);\n }\n get pageUp() {\n return this.#keystate(79 /* PageUp */);\n }\n get arrowDown() {\n return this.#keystate(80 /* ArrowDown */);\n }\n get arrowLeft() {\n return this.#keystate(81 /* ArrowLeft */);\n }\n get arrowRight() {\n return this.#keystate(82 /* ArrowRight */);\n }\n get arrowUp() {\n return this.#keystate(83 /* ArrowUp */);\n }\n get numLock() {\n return this.#keystate(84 /* NumLock */);\n }\n get numpad0() {\n return this.#keystate(85 /* Numpad0 */);\n }\n get numpad1() {\n return this.#keystate(86 /* Numpad1 */);\n }\n get numpad2() {\n return this.#keystate(87 /* Numpad2 */);\n }\n get numpad3() {\n return this.#keystate(88 /* Numpad3 */);\n }\n get numpad4() {\n return this.#keystate(89 /* Numpad4 */);\n }\n get numpad5() {\n return this.#keystate(90 /* Numpad5 */);\n }\n get numpad6() {\n return this.#keystate(91 /* Numpad6 */);\n }\n get numpad7() {\n return this.#keystate(92 /* Numpad7 */);\n }\n get numpad8() {\n return this.#keystate(93 /* Numpad8 */);\n }\n get numpad9() {\n return this.#keystate(94 /* Numpad9 */);\n }\n get numpadAdd() {\n return this.#keystate(95 /* NumpadAdd */);\n }\n get numpadBackspace() {\n return this.#keystate(96 /* NumpadBackspace */);\n }\n get numpadClear() {\n return this.#keystate(97 /* NumpadClear */);\n }\n get numpadClearEntry() {\n return this.#keystate(98 /* NumpadClearEntry */);\n }\n get numpadComma() {\n return this.#keystate(99 /* NumpadComma */);\n }\n get numpadDecimal() {\n return this.#keystate(100 /* NumpadDecimal */);\n }\n get numpadDivide() {\n return this.#keystate(101 /* NumpadDivide */);\n }\n get numpadEnter() {\n return this.#keystate(102 /* NumpadEnter */);\n }\n get numpadEqual() {\n return this.#keystate(103 /* NumpadEqual */);\n }\n get numpadHash() {\n return this.#keystate(104 /* NumpadHash */);\n }\n get numpadMemoryAdd() {\n return this.#keystate(105 /* NumpadMemoryAdd */);\n }\n get numpadMemoryClear() {\n return this.#keystate(106 /* NumpadMemoryClear */);\n }\n get numpadMemoryRecall() {\n return this.#keystate(107 /* NumpadMemoryRecall */);\n }\n get numpadMemoryStore() {\n return this.#keystate(108 /* NumpadMemoryStore */);\n }\n get numpadMemorySubtract() {\n return this.#keystate(109 /* NumpadMemorySubtract */);\n }\n get numpadMultiply() {\n return this.#keystate(110 /* NumpadMultiply */);\n }\n get numpadParenLeft() {\n return this.#keystate(111 /* NumpadParenLeft */);\n }\n get numpadParenRight() {\n return this.#keystate(112 /* NumpadParenRight */);\n }\n get numpadStar() {\n return this.#keystate(113 /* NumpadStar */);\n }\n get numpadSubtract() {\n return this.#keystate(114 /* NumpadSubtract */);\n }\n get escape() {\n return this.#keystate(115 /* Escape */);\n }\n get fn() {\n return this.#keystate(116 /* Fn */);\n }\n get fnLock() {\n return this.#keystate(117 /* FnLock */);\n }\n get printScreen() {\n return this.#keystate(118 /* PrintScreen */);\n }\n get scrollLock() {\n return this.#keystate(119 /* ScrollLock */);\n }\n get pause() {\n return this.#keystate(120 /* Pause */);\n }\n get browserBack() {\n return this.#keystate(121 /* BrowserBack */);\n }\n get browserFavorites() {\n return this.#keystate(122 /* BrowserFavorites */);\n }\n get browserForward() {\n return this.#keystate(123 /* BrowserForward */);\n }\n get browserHome() {\n return this.#keystate(124 /* BrowserHome */);\n }\n get browserRefresh() {\n return this.#keystate(125 /* BrowserRefresh */);\n }\n get browserSearch() {\n return this.#keystate(126 /* BrowserSearch */);\n }\n get browserStop() {\n return this.#keystate(127 /* BrowserStop */);\n }\n get eject() {\n return this.#keystate(128 /* Eject */);\n }\n get launchApp1() {\n return this.#keystate(129 /* LaunchApp1 */);\n }\n get launchApp2() {\n return this.#keystate(130 /* LaunchApp2 */);\n }\n get launchMail() {\n return this.#keystate(131 /* LaunchMail */);\n }\n get mediaPlayPause() {\n return this.#keystate(132 /* MediaPlayPause */);\n }\n get mediaSelect() {\n return this.#keystate(133 /* MediaSelect */);\n }\n get mediaStop() {\n return this.#keystate(134 /* MediaStop */);\n }\n get mediaTrackNext() {\n return this.#keystate(135 /* MediaTrackNext */);\n }\n get mediaTrackPrevious() {\n return this.#keystate(136 /* MediaTrackPrevious */);\n }\n get power() {\n return this.#keystate(137 /* Power */);\n }\n get sleep() {\n return this.#keystate(138 /* Sleep */);\n }\n get audioVolumeDown() {\n return this.#keystate(139 /* AudioVolumeDown */);\n }\n get audioVolumeMute() {\n return this.#keystate(140 /* AudioVolumeMute */);\n }\n get audioVolumeUp() {\n return this.#keystate(141 /* AudioVolumeUp */);\n }\n get wakeUp() {\n return this.#keystate(142 /* WakeUp */);\n }\n get hyper() {\n return this.#keystate(143 /* Hyper */);\n }\n get super() {\n return this.#keystate(144 /* Super */);\n }\n get turbo() {\n return this.#keystate(145 /* Turbo */);\n }\n get abort() {\n return this.#keystate(146 /* Abort */);\n }\n get resume() {\n return this.#keystate(147 /* Resume */);\n }\n get suspend() {\n return this.#keystate(148 /* Suspend */);\n }\n get again() {\n return this.#keystate(149 /* Again */);\n }\n get copy() {\n return this.#keystate(150 /* Copy */);\n }\n get cut() {\n return this.#keystate(151 /* Cut */);\n }\n get find() {\n return this.#keystate(152 /* Find */);\n }\n get open() {\n return this.#keystate(153 /* Open */);\n }\n get paste() {\n return this.#keystate(154 /* Paste */);\n }\n get props() {\n return this.#keystate(155 /* Props */);\n }\n get select() {\n return this.#keystate(156 /* Select */);\n }\n get undo() {\n return this.#keystate(157 /* Undo */);\n }\n get hiragana() {\n return this.#keystate(158 /* Hiragana */);\n }\n get katakana() {\n return this.#keystate(159 /* Katakana */);\n }\n get f1() {\n return this.#keystate(160 /* F1 */);\n }\n get f2() {\n return this.#keystate(161 /* F2 */);\n }\n get f3() {\n return this.#keystate(162 /* F3 */);\n }\n get f4() {\n return this.#keystate(163 /* F4 */);\n }\n get f5() {\n return this.#keystate(164 /* F5 */);\n }\n get f6() {\n return this.#keystate(165 /* F6 */);\n }\n get f7() {\n return this.#keystate(166 /* F7 */);\n }\n get f8() {\n return this.#keystate(167 /* F8 */);\n }\n get f9() {\n return this.#keystate(168 /* F9 */);\n }\n get f10() {\n return this.#keystate(169 /* F10 */);\n }\n get f11() {\n return this.#keystate(170 /* F11 */);\n }\n get f12() {\n return this.#keystate(171 /* F12 */);\n }\n get f13() {\n return this.#keystate(172 /* F13 */);\n }\n get f14() {\n return this.#keystate(173 /* F14 */);\n }\n get f15() {\n return this.#keystate(174 /* F15 */);\n }\n get f16() {\n return this.#keystate(175 /* F16 */);\n }\n get f17() {\n return this.#keystate(176 /* F17 */);\n }\n get f18() {\n return this.#keystate(177 /* F18 */);\n }\n get f19() {\n return this.#keystate(178 /* F19 */);\n }\n get f20() {\n return this.#keystate(179 /* F20 */);\n }\n get f21() {\n return this.#keystate(180 /* F21 */);\n }\n get f22() {\n return this.#keystate(181 /* F22 */);\n }\n get f23() {\n return this.#keystate(182 /* F23 */);\n }\n get f24() {\n return this.#keystate(183 /* F24 */);\n }\n get f25() {\n return this.#keystate(184 /* F25 */);\n }\n get f26() {\n return this.#keystate(185 /* F26 */);\n }\n get f27() {\n return this.#keystate(186 /* F27 */);\n }\n get f28() {\n return this.#keystate(187 /* F28 */);\n }\n get f29() {\n return this.#keystate(188 /* F29 */);\n }\n get f30() {\n return this.#keystate(189 /* F30 */);\n }\n get f31() {\n return this.#keystate(190 /* F31 */);\n }\n get f32() {\n return this.#keystate(191 /* F32 */);\n }\n get f33() {\n return this.#keystate(192 /* F33 */);\n }\n get f34() {\n return this.#keystate(193 /* F34 */);\n }\n get f35() {\n return this.#keystate(194 /* F35 */);\n }\n #keystate(code) {\n let state;\n if (this.#keystates.has(code)) {\n state = this.#keystates.get(code);\n } else {\n state = { down: false, held: false, up: false };\n this.#keystates.set(code, state);\n }\n state.held = !!(this.#dataView.getUint8(code) & 1);\n state.down = state.held && !(this.#dataView.getUint8(code) & 2);\n state.up = !state.held && !!(this.#dataView.getUint8(code) & 2);\n return state;\n }\n}\n// js/contexts/timeContext.ts\nclass TimeContext {\n dataView;\n constructor(dataView) {\n this.dataView = dataView;\n }\n get frame() {\n if (!this.dataView) {\n throw new Error(\"TimeContext DataView is not initialized\");\n }\n return this.dataView.getUint32(0, true);\n }\n get dt() {\n if (!this.dataView) {\n throw new Error(\"TimeContext DataView is not initialized\");\n }\n return this.dataView.getUint32(4, true) / 1000;\n }\n get time() {\n if (!this.dataView) {\n throw new Error(\"TimeContext DataView is not initialized\");\n }\n return this.dataView.getUint32(8, true) / 1000;\n }\n}\n\n// js/engine.ts\nvar DEFAULT_WASM_URL = new URL(\"../wasm/bloop.wasm\", import.meta.url);\nvar TIME_CTX_OFFSET = 0;\nvar INPUT_CTX_OFFSET = TIME_CTX_OFFSET + 4;\nvar EVENTS_OFFSET = INPUT_CTX_OFFSET + 4;\nvar SNAPSHOT_HEADER_LEN = 16;\nvar SNAPSHOT_HEADER_USER_LEN_OFFSET = 4;\nvar SNAPSHOT_HEADER_ENGINE_LEN_OFFSET = 8;\nexport {\n mouseButtonToMouseButtonCode,\n mouseButtonCodeToMouseButton,\n keyToKeyCode,\n keyCodeToKey,\n TimeContext,\n TIME_CTX_OFFSET,\n SNAPSHOT_HEADER_USER_LEN_OFFSET,\n SNAPSHOT_HEADER_LEN,\n SNAPSHOT_HEADER_ENGINE_LEN_OFFSET,\n MouseContext,\n MOUSE_OFFSET,\n MOUSE_BUTTONS_OFFSET,\n KeyboardContext,\n KEYBOARD_OFFSET,\n InputContext,\n INPUT_CTX_OFFSET,\n exports_enums as Enums,\n EVENT_PAYLOAD_SIZE,\n EVENT_PAYLOAD_ALIGN,\n EVENTS_OFFSET,\n DEFAULT_WASM_URL\n};\n\n//# debugId=C8014A483C57B10D64756E2164756E21\n//# sourceMappingURL=engine.js.map\n",
7
- "import {\n type EnginePointer,\n type Key,\n keyToKeyCode,\n type MouseButton,\n mouseButtonToMouseButtonCode,\n SNAPSHOT_HEADER_ENGINE_LEN_OFFSET,\n SNAPSHOT_HEADER_USER_LEN_OFFSET,\n TimeContext,\n type WasmEngine,\n} from \"@bloopjs/engine\";\nimport { assert } from \"./util\";\n\nconst originalConsole = (globalThis as any).console;\n\nconst noop = () => {};\n\nconst stubConsole = Object.fromEntries(\n Object.keys(originalConsole).map((key) => [key, noop]),\n) as unknown as Console;\n\nfunction muteConsole() {\n (globalThis.console as unknown as Console) = stubConsole;\n}\n\nfunction unmuteConsole() {\n (globalThis.console as unknown as Console) = originalConsole;\n}\n\nexport type EngineHooks = {\n /**\n * Hook to serialize some data when snapshotting\n */\n serialize: SerializeFn;\n /**\n * Hook to deserialize some data when restoring\n */\n deserialize: DeserializeFn;\n /**\n * A callback function to run logic for a given frame\n */\n systemsCallback: SystemsCallback;\n /**\n * Sets buffer to the latest engine memory buffer\n *\n * Note that if the engine wasm memory grows, all dataviews into the memory must be updated\n */\n setBuffer: (buffer: ArrayBuffer) => void;\n /**\n * Sets the context pointer\n */\n setContext: (ptr: EnginePointer) => void;\n};\n\nexport type SystemsCallback = (\n system_handle: number,\n ptr: EnginePointer,\n) => void;\n\nexport type SerializeFn = () => {\n size: number;\n write(buffer: ArrayBufferLike, ptr: EnginePointer): void;\n};\n\nexport type DeserializeFn = (\n buffer: ArrayBufferLike,\n ptr: EnginePointer,\n size: number,\n) => void;\n\n/**\n * The runtime is a portable runtime that is responsible for:\n *\n * * Moving the engine forward and backward in time\n * * Maintaining a js-friendly view of engine memory\n */\nexport class Runtime {\n wasm: WasmEngine;\n #memory: WebAssembly.Memory;\n #time: TimeContext;\n #serialize?: SerializeFn;\n constructor(\n wasm: WasmEngine,\n memory: WebAssembly.Memory,\n opts?: { serialize?: SerializeFn },\n ) {\n this.wasm = wasm;\n this.#memory = memory;\n this.#time = new TimeContext(\n new DataView(this.#memory.buffer, this.wasm.get_time_ctx()),\n );\n\n this.#serialize = opts?.serialize;\n }\n\n step(ms?: number) {\n this.wasm.step(ms ?? 16);\n }\n\n stepBack() {\n if (this.time.frame === 0) {\n return;\n }\n\n this.seek(this.time.frame - 1);\n }\n\n /**\n * Seek to the start of a given frame\n * @param frame - frame number to replay to\n */\n seek(frame: number, inclusive?: boolean) {\n assert(\n this.hasHistory,\n \"Not recording or playing back, can't seek to frame\",\n );\n\n const targetFrame = inclusive ? frame + 1 : frame;\n\n const shouldMute = frame < this.time.frame;\n if (shouldMute) {\n muteConsole();\n }\n this.wasm.seek(targetFrame);\n if (shouldMute) {\n unmuteConsole();\n }\n }\n\n record() {\n const serializer = this.#serialize ? this.#serialize() : null;\n const size = serializer ? serializer.size : 0;\n const result = this.wasm.start_recording(size, 1024);\n if (result !== 0) {\n throw new Error(`failed to start recording, error code=${result}`);\n }\n }\n\n /**\n * Snapshot the current game state into a byte array\n */\n snapshot(): Uint8Array<ArrayBuffer> {\n const serializer = this.#serialize ? this.#serialize() : null;\n const size = serializer ? serializer.size : 0;\n\n const ptr = this.wasm.take_snapshot(size);\n const header = new Uint32Array(this.#memory.buffer, ptr, 4);\n const userLenIndex =\n SNAPSHOT_HEADER_USER_LEN_OFFSET / Uint32Array.BYTES_PER_ELEMENT;\n const engineLenIndex =\n SNAPSHOT_HEADER_ENGINE_LEN_OFFSET / Uint32Array.BYTES_PER_ELEMENT;\n assert(header[userLenIndex], `header user length missing`);\n assert(header[engineLenIndex], `header engine length missing`);\n const length = header[userLenIndex] + header[engineLenIndex];\n const memoryView = new Uint8Array(this.#memory.buffer, ptr, length);\n\n const copy = new Uint8Array(length);\n copy.set(memoryView);\n\n return copy;\n }\n\n /**\n * Get a recording of the current tape to linear memory\n */\n saveTape(): Uint8Array<ArrayBuffer> {\n const tapeLen = this.wasm.get_tape_len();\n const tapePtr = this.wasm.get_tape_ptr();\n const memoryView = new Uint8Array(this.#memory.buffer, tapePtr, tapeLen);\n\n const copy = new Uint8Array(tapeLen);\n copy.set(memoryView);\n\n return copy;\n }\n\n /**\n * Load a tape\n */\n loadTape(tape: Uint8Array) {\n const tapePtr = this.wasm.alloc(tape.byteLength);\n assert(\n tapePtr > 0,\n `failed to allocate ${tape.byteLength} bytes for tape load, pointer=${tapePtr}`,\n );\n\n // copy tape into wasm memory\n const memoryView = new Uint8Array(\n this.#memory.buffer,\n tapePtr,\n tape.byteLength,\n );\n memoryView.set(tape);\n\n // load the tape\n this.wasm.stop_recording();\n const result = this.wasm.load_tape(tapePtr, tape.byteLength);\n assert(result === 0, `failed to load tape, error code=${result}`);\n\n // free the allocated memory\n this.wasm.free(tapePtr, tape.byteLength);\n }\n\n /**\n * Restore the game state from a snapshot byte array\n */\n restore(snapshot: Uint8Array) {\n const dataPtr = this.wasm.alloc(snapshot.byteLength);\n assert(\n dataPtr > 0,\n `failed to allocate ${snapshot.byteLength} bytes for snapshot restore, pointer=${dataPtr}`,\n );\n\n // copy snapshot into wasm memory\n const memoryView = new Uint8Array(\n this.#memory.buffer,\n dataPtr,\n snapshot.byteLength,\n );\n memoryView.set(snapshot);\n\n // restore the snapshot\n this.wasm.restore(dataPtr);\n\n // free the allocated memory\n this.wasm.free(dataPtr, snapshot.byteLength);\n }\n\n /**\n * Unmount the runtime and free all associated memory\n */\n unmount() {\n this.wasm.deinit();\n }\n\n get time(): TimeContext {\n if (\n !this.#time.dataView ||\n this.#time.dataView.buffer !== this.#memory.buffer\n ) {\n // update the data view to the latest memory buffer\n this.#time.dataView = new DataView(\n this.#memory.buffer,\n this.wasm.get_time_ctx(),\n );\n }\n return this.#time;\n }\n\n get buffer(): ArrayBuffer {\n return this.#memory.buffer;\n }\n\n get isRecording(): boolean {\n return this.wasm.is_recording();\n }\n\n get isReplaying(): boolean {\n return this.wasm.is_replaying();\n }\n\n get hasHistory(): boolean {\n return this.isRecording || this.isReplaying;\n }\n\n emit = {\n keydown: (key: Key): void => {\n this.wasm.emit_keydown(keyToKeyCode(key));\n },\n keyup: (key: Key): void => {\n this.wasm.emit_keyup(keyToKeyCode(key));\n },\n mousemove: (x: number, y: number): void => {\n this.wasm.emit_mousemove(x, y);\n },\n mousedown: (button: MouseButton): void => {\n this.wasm.emit_mousedown(mouseButtonToMouseButtonCode(button));\n },\n mouseup: (button: MouseButton): void => {\n this.wasm.emit_mouseup(mouseButtonToMouseButtonCode(button));\n },\n mousewheel: (x: number, y: number): void => {\n this.wasm.emit_mousewheel(x, y);\n },\n };\n}\n",
8
- "import {\n DEFAULT_WASM_URL,\n type EnginePointer,\n type WasmEngine,\n} from \"@bloopjs/engine\";\nimport { type EngineHooks, Runtime } from \"./runtime\";\nimport { assert } from \"./util\";\n\nexport async function mount(opts: MountOpts): Promise<MountResult> {\n // https://github.com/oven-sh/bun/issues/12434\n const bytes = await fetch(opts.wasmUrl ?? DEFAULT_WASM_URL)\n .then((res) => res.arrayBuffer())\n .catch((e) => {\n console.error(\n `Failed to fetch wasm at ${opts.wasmUrl ?? DEFAULT_WASM_URL}`,\n e,\n );\n throw e;\n });\n\n // 1mb to 64mb\n // use bun check:wasm to find initial memory page size\n const memory = new WebAssembly.Memory({ initial: 17, maximum: 1000 });\n const wasmInstantiatedSource = await WebAssembly.instantiate(bytes, {\n env: {\n memory,\n __cb: function (system_handle: number, ptr: number) {\n opts.hooks.setBuffer(memory.buffer);\n opts.hooks.systemsCallback(system_handle, ptr);\n },\n console_log: function (ptr: EnginePointer, len: number) {\n const bytes = new Uint8Array(memory.buffer, ptr, len);\n const string = new TextDecoder(\"utf-8\").decode(bytes);\n console.log(string);\n },\n user_data_len: function () {\n const serializer = opts.hooks.serialize();\n return serializer ? serializer.size : 0;\n },\n user_data_serialize: function (ptr: EnginePointer, len: number) {\n const serializer = opts.hooks.serialize();\n assert(\n len === serializer.size,\n `user_data_serialize length mismatch, expected=${serializer.size} got=${len}`,\n );\n serializer.write(memory.buffer, ptr);\n },\n user_data_deserialize: function (ptr: EnginePointer, len: number) {\n opts.hooks.deserialize(memory.buffer, ptr, len);\n },\n },\n });\n const wasm = wasmInstantiatedSource.instance.exports as WasmEngine;\n\n const enginePointer = wasm.initialize();\n const runtime = new Runtime(wasm, memory, {\n serialize: opts.hooks.serialize,\n });\n\n if (opts.startRecording ?? true) {\n runtime.record();\n }\n\n opts.hooks.setBuffer(memory.buffer);\n opts.hooks.setContext(enginePointer);\n\n return {\n runtime,\n wasm,\n };\n}\n\nexport type MountOpts = {\n hooks: EngineHooks;\n\n wasmUrl?: URL;\n\n /**\n * Whether to start recording immediately upon mount\n * Defaults to true\n */\n startRecording?: boolean;\n};\n\nexport type MountResult = {\n runtime: Runtime;\n wasm: WasmEngine;\n};\n",
9
- "import {\n type EnginePointer,\n Enums,\n EVENT_PAYLOAD_ALIGN,\n EVENT_PAYLOAD_SIZE,\n EVENTS_OFFSET,\n INPUT_CTX_OFFSET,\n InputContext,\n keyCodeToKey,\n mouseButtonCodeToMouseButton,\n TIME_CTX_OFFSET,\n TimeContext,\n} from \"@bloopjs/engine\";\nimport type { Context } from \"./context\";\nimport type { Bag } from \"./data/bag\";\nimport type { BloopSchema } from \"./data/schema\";\nimport type {\n InputEvent,\n KeyEvent,\n MouseButtonEvent,\n MouseMoveEvent,\n MouseWheelEvent,\n} from \"./events\";\nimport type { EngineHooks } from \"./runtime\";\nimport type { System } from \"./system\";\n\nexport type BloopOpts<B extends Bag> = {\n /** defaults to \"Game\" */\n name?: string;\n /**\n * component definitions, defaults to empty object\n *\n * use `defineComponents` to generate component definitions from a simple schema\n */\n // components?: SchemaWithLayout<CS>;\n /**\n * input map, defaults to empty object\n */\n // inputMap?: IM;\n /**\n * bag definition, defaults to empty object\n *\n */\n bag?: B;\n // schema: GS;\n};\n\nexport class Bloop<GS extends BloopSchema> {\n #systems: System<GS>[] = [];\n #context: Context<GS>;\n #engineBuffer: ArrayBuffer = new ArrayBuffer(0);\n\n /**\n * Bloop.create() is the way to create a new bloop instance.\n */\n static create<\n // S extends Schema,\n // RS extends ResourceSchema,\n B extends Bag,\n // const IM extends InputMap,\n // >(opts: GameOpts<S, RS, B, IM> = {}) {\n >(opts: BloopOpts<B> = {}): Bloop<MakeGS<B>> {\n return new Bloop<MakeGS<B>>(opts, \"dontCallMeDirectly\");\n }\n\n /**\n * DO NOT USE `new Bloop` - use `Bloop.create()` instead for proper type hints.\n */\n constructor(opts: BloopOpts<GS[\"B\"]> = {}, dontCallMeDirectly: string) {\n if (dontCallMeDirectly !== \"dontCallMeDirectly\") {\n throw new Error(\n \"Bloop constructor is private. Use Bloop.create() to create a new game instance.\",\n );\n }\n\n this.#context = {\n bag: opts.bag ?? {},\n time: new TimeContext(),\n inputs: new InputContext(),\n rawPointer: -1,\n };\n }\n\n /**\n * Read the game singleton bag\n */\n get bag(): GS[\"B\"] {\n return this.#context.bag;\n }\n\n /**\n * Read the game context object\n */\n get context(): Readonly<Context<GS>> {\n return this.#context;\n }\n\n /**\n * Register a system with the game loop.\n */\n system(label: string, system: System<GS>): number {\n system.label ??= label;\n this.#systems.push(system);\n return this.#systems.length;\n }\n\n /**\n * Low level hooks to engine functionality. Editing these is for advanced use cases, defaults should usually work.\n */\n hooks: EngineHooks = {\n /**\n * Take a snapshot of the game state outside the engine\n * @returns linear memory representation of the game state that the engine is unaware of\n */\n serialize: () => {\n const str = JSON.stringify(this.#context.bag);\n const encoder = new TextEncoder();\n const textBytes = encoder.encode(str);\n\n return {\n size: textBytes.byteLength,\n write: (buffer: ArrayBufferLike, ptr: EnginePointer) => {\n const memoryView = new Uint8Array(buffer, ptr, textBytes.byteLength);\n memoryView.set(textBytes);\n },\n };\n },\n\n /**\n * Restore a snapshot of the game state outside the engine\n * @returns linear memory representation of the game state that the engine is unaware of\n */\n deserialize: (buffer, ptr, len) => {\n const bagBytes = new Uint8Array(buffer, ptr, len);\n const decoder = new TextDecoder();\n const str = decoder.decode(bagBytes);\n\n try {\n this.#context.bag = JSON.parse(str);\n } catch (e) {\n console.error(\"failed to deserialize bag\", { json: str, error: e });\n }\n },\n\n setBuffer: (buffer: ArrayBuffer) => {\n this.#engineBuffer = buffer;\n },\n\n setContext: (ptr: EnginePointer) => {\n // todo - move this to engine\n if (!this.#engineBuffer) {\n throw new Error(\"Tried to set context before engine buffer\");\n }\n const dv = new DataView(this.#engineBuffer, ptr);\n const timeCtxPtr = dv.getUint32(TIME_CTX_OFFSET, true);\n const inputCtxPtr = dv.getUint32(INPUT_CTX_OFFSET, true);\n\n this.#context.rawPointer = ptr;\n this.#context.inputs.dataView = new DataView(\n this.#engineBuffer,\n inputCtxPtr,\n );\n this.#context.time.dataView = new DataView(\n this.#engineBuffer,\n timeCtxPtr,\n );\n },\n\n systemsCallback: (system_handle: number, ptr: EnginePointer) => {\n this.hooks.setContext(ptr);\n const dv = new DataView(this.#engineBuffer, ptr);\n const eventsPtr = dv.getUint32(EVENTS_OFFSET, true);\n const eventsDataView = new DataView(this.#engineBuffer, eventsPtr);\n\n for (const system of this.#systems) {\n system.update?.(this.#context);\n\n const eventCount = eventsDataView.getUint32(0, true);\n\n let offset = Uint32Array.BYTES_PER_ELEMENT;\n\n for (let i = 0; i < eventCount; i++) {\n const eventType = eventsDataView.getUint8(offset);\n const payloadSize = EVENT_PAYLOAD_SIZE;\n const payloadByte = eventsDataView.getUint8(\n offset + EVENT_PAYLOAD_ALIGN,\n );\n const payloadVec2 = {\n x: eventsDataView.getFloat32(offset + EVENT_PAYLOAD_ALIGN, true),\n y: eventsDataView.getFloat32(\n offset + EVENT_PAYLOAD_ALIGN + Float32Array.BYTES_PER_ELEMENT,\n true,\n ),\n };\n\n switch (eventType) {\n case Enums.EventType.KeyDown: {\n system.keydown?.(\n attachEvent<KeyEvent, GS>(this.#context, {\n key: keyCodeToKey(payloadByte),\n }),\n );\n break;\n }\n case Enums.EventType.KeyUp:\n system.keyup?.(\n attachEvent<KeyEvent, GS>(this.#context, {\n key: keyCodeToKey(payloadByte),\n }),\n );\n break;\n case Enums.EventType.MouseDown:\n system.mousedown?.(\n attachEvent<MouseButtonEvent, GS>(this.#context, {\n button: mouseButtonCodeToMouseButton(payloadByte),\n }),\n );\n break;\n case Enums.EventType.MouseUp:\n system.mouseup?.(\n attachEvent<MouseButtonEvent, GS>(this.#context, {\n button: mouseButtonCodeToMouseButton(payloadByte),\n }),\n );\n break;\n case Enums.EventType.MouseMove:\n system.mousemove?.(\n attachEvent<MouseMoveEvent, GS>(this.#context, {\n x: payloadVec2.x,\n y: payloadVec2.y,\n }),\n );\n break;\n case Enums.EventType.MouseWheel:\n system.mousewheel?.(\n attachEvent<MouseWheelEvent, GS>(this.#context, {\n x: payloadVec2.x,\n y: payloadVec2.y,\n }),\n );\n break;\n default:\n throw new Error(`Unknown event type: ${eventType}`);\n }\n // the event type u8 + padding + payload\n offset += EVENT_PAYLOAD_ALIGN + EVENT_PAYLOAD_SIZE;\n }\n (this.#context as any).event = undefined;\n }\n },\n };\n}\n\nfunction attachEvent<IE extends InputEvent, GS extends BloopSchema>(\n context: Context<GS>,\n event: IE,\n): Context<GS> & { event: IE } {\n (context as any).event = event;\n return context as Context<GS> & { event: IE };\n}\n\ntype MakeGS<B extends Bag> = BloopSchema<B>;\n",
10
- "import { type MountOpts, mount } from \"./mount\";\nimport type { Runtime } from \"./runtime\";\nimport { assert } from \"./util\";\n\nexport async function handleUpdate(\n newModule: any,\n oldRuntime: Runtime,\n mountOptions?: Partial<MountOpts>,\n): Promise<Runtime> {\n assert(\n newModule?.game,\n `HMR: missing game export on module: ${JSON.stringify(newModule)}`,\n );\n\n const { runtime } = await mount({\n hooks: (newModule.game as any).hooks,\n ...mountOptions,\n });\n\n const tape = oldRuntime.saveTape();\n const snapshot = oldRuntime.snapshot();\n\n runtime.loadTape(tape);\n runtime.restore(snapshot);\n oldRuntime.unmount();\n return runtime;\n}\n"
7
+ "import {\n type EnginePointer,\n type Key,\n keyToKeyCode,\n type MouseButton,\n mouseButtonToMouseButtonCode,\n SNAPSHOT_HEADER_ENGINE_LEN_OFFSET,\n SNAPSHOT_HEADER_USER_LEN_OFFSET,\n TimeContext,\n type WasmEngine,\n} from \"@bloopjs/engine\";\nimport { assert } from \"./util\";\n\nconst originalConsole = (globalThis as any).console;\n\nconst noop = () => {};\n\nconst stubConsole = Object.fromEntries(\n Object.keys(originalConsole).map((key) => [key, noop]),\n) as unknown as Console;\n\nfunction muteConsole() {\n (globalThis.console as unknown as Console) = stubConsole;\n}\n\nfunction unmuteConsole() {\n (globalThis.console as unknown as Console) = originalConsole;\n}\n\nexport type EngineHooks = {\n /**\n * Hook to serialize some data when snapshotting\n */\n serialize: SerializeFn;\n /**\n * Hook to deserialize some data when restoring\n */\n deserialize: DeserializeFn;\n /**\n * A callback function to run logic for a given frame\n */\n systemsCallback: SystemsCallback;\n /**\n * Sets buffer to the latest engine memory buffer\n *\n * Note that if the engine wasm memory grows, all dataviews into the memory must be updated\n */\n setBuffer: (buffer: ArrayBuffer) => void;\n /**\n * Sets the context pointer\n */\n setContext: (ptr: EnginePointer) => void;\n};\n\nexport type SystemsCallback = (\n system_handle: number,\n ptr: EnginePointer,\n) => void;\n\nexport type SerializeFn = () => {\n size: number;\n write(buffer: ArrayBufferLike, ptr: EnginePointer): void;\n};\n\nexport type DeserializeFn = (\n buffer: ArrayBufferLike,\n ptr: EnginePointer,\n size: number,\n) => void;\n\n/**\n * Sim is a portable simulation that is responsible for:\n *\n * * Moving the engine forward and backward in time\n * * Maintaining a js-friendly view of engine memory\n * * Pausing and unpausing game logic\n */\nexport class Sim {\n wasm: WasmEngine;\n id: string;\n #memory: WebAssembly.Memory;\n #time: TimeContext;\n #serialize?: SerializeFn;\n #isPaused: boolean = false;\n\n constructor(\n wasm: WasmEngine,\n memory: WebAssembly.Memory,\n opts?: { serialize?: SerializeFn },\n ) {\n this.wasm = wasm;\n this.#memory = memory;\n this.#time = new TimeContext(\n new DataView(this.#memory.buffer, this.wasm.get_time_ctx()),\n );\n\n this.id = `${Math.floor(Math.random() * 1_000_000)}`;\n\n this.#serialize = opts?.serialize;\n }\n\n step(ms?: number): void {\n if (this.#isPaused && !this.isReplaying) {\n // console.log({ paused: this.#isPaused, isReplaying: this.isReplaying });\n return;\n }\n this.wasm.step(ms ?? 16);\n }\n\n /**\n * Clone a session from another running sim.\n * This dumps a snapshot at the current frame and the tape data from the source\n *\n * @param source\n */\n cloneSession(source: Sim): void {\n this.loadTape(source.saveTape());\n this.restore(source.snapshot());\n }\n\n pause() {\n this.#isPaused = true;\n }\n\n unpause() {\n this.#isPaused = false;\n }\n\n get isPaused(): boolean {\n return this.#isPaused;\n }\n\n stepBack() {\n if (this.time.frame === 0) {\n return;\n }\n\n this.seek(this.time.frame - 1);\n }\n\n /**\n * Seek to the start of a given frame\n * @param frame - frame number to replay to\n */\n seek(frame: number, inclusive?: boolean) {\n assert(\n this.hasHistory,\n \"Not recording or playing back, can't seek to frame\",\n );\n\n const targetFrame = inclusive ? frame + 1 : frame;\n\n const shouldMute = frame < this.time.frame;\n if (shouldMute) {\n muteConsole();\n }\n this.wasm.seek(targetFrame);\n if (shouldMute) {\n unmuteConsole();\n }\n }\n\n record() {\n const serializer = this.#serialize ? this.#serialize() : null;\n const size = serializer ? serializer.size : 0;\n const result = this.wasm.start_recording(size, 1024);\n if (result !== 0) {\n throw new Error(`failed to start recording, error code=${result}`);\n }\n }\n\n /**\n * Snapshot the current game state into a byte array\n */\n snapshot(): Uint8Array<ArrayBuffer> {\n const serializer = this.#serialize ? this.#serialize() : null;\n const size = serializer ? serializer.size : 0;\n\n const ptr = this.wasm.take_snapshot(size);\n const header = new Uint32Array(this.#memory.buffer, ptr, 4);\n const userLenIndex =\n SNAPSHOT_HEADER_USER_LEN_OFFSET / Uint32Array.BYTES_PER_ELEMENT;\n const engineLenIndex =\n SNAPSHOT_HEADER_ENGINE_LEN_OFFSET / Uint32Array.BYTES_PER_ELEMENT;\n assert(header[userLenIndex], `header user length missing`);\n assert(header[engineLenIndex], `header engine length missing`);\n const length = header[userLenIndex] + header[engineLenIndex];\n const memoryView = new Uint8Array(this.#memory.buffer, ptr, length);\n\n const copy = new Uint8Array(length);\n copy.set(memoryView);\n\n return copy;\n }\n\n /**\n * Get a recording of the current tape to linear memory\n */\n saveTape(): Uint8Array<ArrayBuffer> {\n const tapeLen = this.wasm.get_tape_len();\n const tapePtr = this.wasm.get_tape_ptr();\n const memoryView = new Uint8Array(this.#memory.buffer, tapePtr, tapeLen);\n\n const copy = new Uint8Array(tapeLen);\n copy.set(memoryView);\n\n return copy;\n }\n\n /**\n * Load a tape\n */\n loadTape(tape: Uint8Array) {\n const tapePtr = this.wasm.alloc(tape.byteLength);\n assert(\n tapePtr > 0,\n `failed to allocate ${tape.byteLength} bytes for tape load, pointer=${tapePtr}`,\n );\n\n // copy tape into wasm memory\n const memoryView = new Uint8Array(\n this.#memory.buffer,\n tapePtr,\n tape.byteLength,\n );\n memoryView.set(tape);\n\n // load the tape\n this.wasm.stop_recording();\n const result = this.wasm.load_tape(tapePtr, tape.byteLength);\n assert(result === 0, `failed to load tape, error code=${result}`);\n\n // free the allocated memory\n this.wasm.free(tapePtr, tape.byteLength);\n }\n\n /**\n * Restore the game state from a snapshot byte array\n */\n restore(snapshot: Uint8Array) {\n const dataPtr = this.wasm.alloc(snapshot.byteLength);\n assert(\n dataPtr > 0,\n `failed to allocate ${snapshot.byteLength} bytes for snapshot restore, pointer=${dataPtr}`,\n );\n\n // copy snapshot into wasm memory\n const memoryView = new Uint8Array(\n this.#memory.buffer,\n dataPtr,\n snapshot.byteLength,\n );\n memoryView.set(snapshot);\n\n // restore the snapshot\n this.wasm.restore(dataPtr);\n\n // free the allocated memory\n this.wasm.free(dataPtr, snapshot.byteLength);\n }\n\n /**\n * Unmount the simulation and free all associated memory\n */\n unmount() {\n this.wasm.deinit();\n }\n\n get time(): TimeContext {\n if (\n !this.#time.dataView ||\n this.#time.dataView.buffer !== this.#memory.buffer\n ) {\n // update the data view to the latest memory buffer\n this.#time.dataView = new DataView(\n this.#memory.buffer,\n this.wasm.get_time_ctx(),\n );\n }\n return this.#time;\n }\n\n get buffer(): ArrayBuffer {\n return this.#memory.buffer;\n }\n\n get isRecording(): boolean {\n return this.wasm.is_recording();\n }\n\n get isReplaying(): boolean {\n return this.wasm.is_replaying();\n }\n\n get hasHistory(): boolean {\n return this.isRecording || this.isReplaying;\n }\n\n emit = {\n keydown: (key: Key): void => {\n this.wasm.emit_keydown(keyToKeyCode(key));\n },\n keyup: (key: Key): void => {\n this.wasm.emit_keyup(keyToKeyCode(key));\n },\n mousemove: (x: number, y: number): void => {\n this.wasm.emit_mousemove(x, y);\n },\n mousedown: (button: MouseButton): void => {\n this.wasm.emit_mousedown(mouseButtonToMouseButtonCode(button));\n },\n mouseup: (button: MouseButton): void => {\n this.wasm.emit_mouseup(mouseButtonToMouseButtonCode(button));\n },\n mousewheel: (x: number, y: number): void => {\n this.wasm.emit_mousewheel(x, y);\n },\n };\n}\n",
8
+ "import {\n DEFAULT_WASM_URL,\n type EnginePointer,\n type WasmEngine,\n} from \"@bloopjs/engine\";\nimport { type EngineHooks, Sim } from \"./sim\";\nimport { assert } from \"./util\";\n\nexport async function mount(opts: MountOpts): Promise<MountResult> {\n // https://github.com/oven-sh/bun/issues/12434\n const bytes = await fetch(opts.wasmUrl ?? DEFAULT_WASM_URL)\n .then((res) => res.arrayBuffer())\n .catch((e) => {\n console.error(\n `Failed to fetch wasm at ${opts.wasmUrl ?? DEFAULT_WASM_URL}`,\n e,\n );\n throw e;\n });\n\n // 1mb to 64mb\n // use bun check:wasm to find initial memory page size\n const memory = new WebAssembly.Memory({ initial: 17, maximum: 1000 });\n const wasmInstantiatedSource = await WebAssembly.instantiate(bytes, {\n env: {\n memory,\n __cb: function (system_handle: number, ptr: number) {\n opts.hooks.setBuffer(memory.buffer);\n opts.hooks.systemsCallback(system_handle, ptr);\n },\n console_log: function (ptr: EnginePointer, len: number) {\n const bytes = new Uint8Array(memory.buffer, ptr, len);\n const string = new TextDecoder(\"utf-8\").decode(bytes);\n console.log(string);\n },\n user_data_len: function () {\n const serializer = opts.hooks.serialize();\n return serializer ? serializer.size : 0;\n },\n user_data_serialize: function (ptr: EnginePointer, len: number) {\n const serializer = opts.hooks.serialize();\n assert(\n len === serializer.size,\n `user_data_serialize length mismatch, expected=${serializer.size} got=${len}`,\n );\n serializer.write(memory.buffer, ptr);\n },\n user_data_deserialize: function (ptr: EnginePointer, len: number) {\n opts.hooks.deserialize(memory.buffer, ptr, len);\n },\n },\n });\n const wasm = wasmInstantiatedSource.instance.exports as WasmEngine;\n\n const enginePointer = wasm.initialize();\n const sim = new Sim(wasm, memory, {\n serialize: opts.hooks.serialize,\n });\n\n if (opts.startRecording ?? true) {\n sim.record();\n }\n\n opts.hooks.setBuffer(memory.buffer);\n opts.hooks.setContext(enginePointer);\n\n return {\n sim,\n };\n}\n\nexport type MountOpts = {\n hooks: EngineHooks;\n\n wasmUrl?: URL;\n\n /**\n * Whether to start recording immediately upon mount\n * Defaults to true\n */\n startRecording?: boolean;\n};\n\nexport type MountResult = {\n sim: Sim;\n};\n",
9
+ "import {\n type EnginePointer,\n Enums,\n EVENT_PAYLOAD_ALIGN,\n EVENT_PAYLOAD_SIZE,\n EVENTS_OFFSET,\n INPUT_CTX_OFFSET,\n InputContext,\n keyCodeToKey,\n mouseButtonCodeToMouseButton,\n TIME_CTX_OFFSET,\n TimeContext,\n} from \"@bloopjs/engine\";\nimport type { Context } from \"./context\";\nimport type { Bag } from \"./data/bag\";\nimport type { BloopSchema } from \"./data/schema\";\nimport type {\n InputEvent,\n KeyEvent,\n MouseButtonEvent,\n MouseMoveEvent,\n MouseWheelEvent,\n} from \"./events\";\nimport type { EngineHooks } from \"./sim\";\nimport type { System } from \"./system\";\n\nexport type BloopOpts<B extends Bag> = {\n /** defaults to \"Game\" */\n name?: string;\n /**\n * component definitions, defaults to empty object\n *\n * use `defineComponents` to generate component definitions from a simple schema\n */\n // components?: SchemaWithLayout<CS>;\n /**\n * input map, defaults to empty object\n */\n // inputMap?: IM;\n /**\n * bag definition, defaults to empty object\n *\n */\n bag?: B;\n // schema: GS;\n};\n\nexport class Bloop<GS extends BloopSchema> {\n #systems: System<GS>[] = [];\n #context: Context<GS>;\n #engineBuffer: ArrayBuffer = new ArrayBuffer(0);\n\n /**\n * Bloop.create() is the way to create a new bloop instance.\n */\n static create<\n // S extends Schema,\n // RS extends ResourceSchema,\n B extends Bag,\n // const IM extends InputMap,\n // >(opts: GameOpts<S, RS, B, IM> = {}) {\n >(opts: BloopOpts<B> = {}): Bloop<MakeGS<B>> {\n return new Bloop<MakeGS<B>>(opts, \"dontCallMeDirectly\");\n }\n\n /**\n * DO NOT USE `new Bloop` - use `Bloop.create()` instead for proper type hints.\n */\n constructor(opts: BloopOpts<GS[\"B\"]> = {}, dontCallMeDirectly: string) {\n if (dontCallMeDirectly !== \"dontCallMeDirectly\") {\n throw new Error(\n \"Bloop constructor is private. Use Bloop.create() to create a new game instance.\",\n );\n }\n\n this.#context = {\n bag: opts.bag ?? {},\n time: new TimeContext(),\n inputs: new InputContext(),\n rawPointer: -1,\n };\n }\n\n /**\n * Read the game singleton bag\n */\n get bag(): GS[\"B\"] {\n return this.#context.bag;\n }\n\n /**\n * Read the game context object\n */\n get context(): Readonly<Context<GS>> {\n return this.#context;\n }\n\n /**\n * Register a system with the game loop.\n */\n system(label: string, system: System<GS>): number {\n system.label ??= label;\n this.#systems.push(system);\n return this.#systems.length;\n }\n\n /**\n * Low level hooks to engine functionality. Editing these is for advanced use cases, defaults should usually work.\n */\n hooks: EngineHooks = {\n /**\n * Take a snapshot of the game state outside the engine\n * @returns linear memory representation of the game state that the engine is unaware of\n */\n serialize: () => {\n const str = JSON.stringify(this.#context.bag);\n const encoder = new TextEncoder();\n const textBytes = encoder.encode(str);\n\n return {\n size: textBytes.byteLength,\n write: (buffer: ArrayBufferLike, ptr: EnginePointer) => {\n const memoryView = new Uint8Array(buffer, ptr, textBytes.byteLength);\n memoryView.set(textBytes);\n },\n };\n },\n\n /**\n * Restore a snapshot of the game state outside the engine\n * @returns linear memory representation of the game state that the engine is unaware of\n */\n deserialize: (buffer, ptr, len) => {\n const bagBytes = new Uint8Array(buffer, ptr, len);\n const decoder = new TextDecoder();\n const str = decoder.decode(bagBytes);\n\n try {\n this.#context.bag = JSON.parse(str);\n } catch (e) {\n console.error(\"failed to deserialize bag\", { json: str, error: e });\n }\n },\n\n setBuffer: (buffer: ArrayBuffer) => {\n this.#engineBuffer = buffer;\n },\n\n setContext: (ptr: EnginePointer) => {\n // todo - move this to engine\n if (!this.#engineBuffer) {\n throw new Error(\"Tried to set context before engine buffer\");\n }\n const dv = new DataView(this.#engineBuffer, ptr);\n const timeCtxPtr = dv.getUint32(TIME_CTX_OFFSET, true);\n const inputCtxPtr = dv.getUint32(INPUT_CTX_OFFSET, true);\n\n this.#context.rawPointer = ptr;\n this.#context.inputs.dataView = new DataView(\n this.#engineBuffer,\n inputCtxPtr,\n );\n this.#context.time.dataView = new DataView(\n this.#engineBuffer,\n timeCtxPtr,\n );\n },\n\n systemsCallback: (system_handle: number, ptr: EnginePointer) => {\n this.hooks.setContext(ptr);\n const dv = new DataView(this.#engineBuffer, ptr);\n const eventsPtr = dv.getUint32(EVENTS_OFFSET, true);\n const eventsDataView = new DataView(this.#engineBuffer, eventsPtr);\n\n for (const system of this.#systems) {\n system.update?.(this.#context);\n\n const eventCount = eventsDataView.getUint32(0, true);\n\n let offset = Uint32Array.BYTES_PER_ELEMENT;\n\n for (let i = 0; i < eventCount; i++) {\n const eventType = eventsDataView.getUint8(offset);\n const payloadSize = EVENT_PAYLOAD_SIZE;\n const payloadByte = eventsDataView.getUint8(\n offset + EVENT_PAYLOAD_ALIGN,\n );\n const payloadVec2 = {\n x: eventsDataView.getFloat32(offset + EVENT_PAYLOAD_ALIGN, true),\n y: eventsDataView.getFloat32(\n offset + EVENT_PAYLOAD_ALIGN + Float32Array.BYTES_PER_ELEMENT,\n true,\n ),\n };\n\n switch (eventType) {\n case Enums.EventType.KeyDown: {\n system.keydown?.(\n attachEvent<KeyEvent, GS>(this.#context, {\n key: keyCodeToKey(payloadByte),\n }),\n );\n break;\n }\n case Enums.EventType.KeyUp:\n system.keyup?.(\n attachEvent<KeyEvent, GS>(this.#context, {\n key: keyCodeToKey(payloadByte),\n }),\n );\n break;\n case Enums.EventType.MouseDown:\n system.mousedown?.(\n attachEvent<MouseButtonEvent, GS>(this.#context, {\n button: mouseButtonCodeToMouseButton(payloadByte),\n }),\n );\n break;\n case Enums.EventType.MouseUp:\n system.mouseup?.(\n attachEvent<MouseButtonEvent, GS>(this.#context, {\n button: mouseButtonCodeToMouseButton(payloadByte),\n }),\n );\n break;\n case Enums.EventType.MouseMove:\n system.mousemove?.(\n attachEvent<MouseMoveEvent, GS>(this.#context, {\n x: payloadVec2.x,\n y: payloadVec2.y,\n }),\n );\n break;\n case Enums.EventType.MouseWheel:\n system.mousewheel?.(\n attachEvent<MouseWheelEvent, GS>(this.#context, {\n x: payloadVec2.x,\n y: payloadVec2.y,\n }),\n );\n break;\n default:\n throw new Error(`Unknown event type: ${eventType}`);\n }\n // the event type u8 + padding + payload\n offset += EVENT_PAYLOAD_ALIGN + EVENT_PAYLOAD_SIZE;\n }\n (this.#context as any).event = undefined;\n }\n },\n };\n}\n\nfunction attachEvent<IE extends InputEvent, GS extends BloopSchema>(\n context: Context<GS>,\n event: IE,\n): Context<GS> & { event: IE } {\n (context as any).event = event;\n return context as Context<GS> & { event: IE };\n}\n\ntype MakeGS<B extends Bag> = BloopSchema<B>;\n"
11
10
  ],
12
- "mappings": "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",
13
- "debugId": "123C79DDBA89537664756E2164756E21",
11
+ "mappings": "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",
12
+ "debugId": "2C457AC2FD76A02564756E2164756E21",
14
13
  "names": []
15
14
  }
package/dist/mount.d.ts CHANGED
@@ -1,5 +1,4 @@
1
- import { type WasmEngine } from "@bloopjs/engine";
2
- import { type EngineHooks, Runtime } from "./runtime";
1
+ import { type EngineHooks, Sim } from "./sim";
3
2
  export declare function mount(opts: MountOpts): Promise<MountResult>;
4
3
  export type MountOpts = {
5
4
  hooks: EngineHooks;
@@ -11,7 +10,6 @@ export type MountOpts = {
11
10
  startRecording?: boolean;
12
11
  };
13
12
  export type MountResult = {
14
- runtime: Runtime;
15
- wasm: WasmEngine;
13
+ sim: Sim;
16
14
  };
17
15
  //# sourceMappingURL=mount.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,WAAW,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGtD,wBAAsB,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CA8DjE;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,WAAW,CAAC;IAEnB,OAAO,CAAC,EAAE,GAAG,CAAC;IAEd;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;CAClB,CAAC"}
1
+ {"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,WAAW,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG9C,wBAAsB,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CA6DjE;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,WAAW,CAAC;IAEnB,OAAO,CAAC,EAAE,GAAG,CAAC;IAEd;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,GAAG,CAAC;CACV,CAAC"}
@@ -30,18 +30,30 @@ export type SerializeFn = () => {
30
30
  };
31
31
  export type DeserializeFn = (buffer: ArrayBufferLike, ptr: EnginePointer, size: number) => void;
32
32
  /**
33
- * The runtime is a portable runtime that is responsible for:
33
+ * Sim is a portable simulation that is responsible for:
34
34
  *
35
35
  * * Moving the engine forward and backward in time
36
36
  * * Maintaining a js-friendly view of engine memory
37
+ * * Pausing and unpausing game logic
37
38
  */
38
- export declare class Runtime {
39
+ export declare class Sim {
39
40
  #private;
40
41
  wasm: WasmEngine;
42
+ id: string;
41
43
  constructor(wasm: WasmEngine, memory: WebAssembly.Memory, opts?: {
42
44
  serialize?: SerializeFn;
43
45
  });
44
46
  step(ms?: number): void;
47
+ /**
48
+ * Clone a session from another running sim.
49
+ * This dumps a snapshot at the current frame and the tape data from the source
50
+ *
51
+ * @param source
52
+ */
53
+ cloneSession(source: Sim): void;
54
+ pause(): void;
55
+ unpause(): void;
56
+ get isPaused(): boolean;
45
57
  stepBack(): void;
46
58
  /**
47
59
  * Seek to the start of a given frame
@@ -66,7 +78,7 @@ export declare class Runtime {
66
78
  */
67
79
  restore(snapshot: Uint8Array): void;
68
80
  /**
69
- * Unmount the runtime and free all associated memory
81
+ * Unmount the simulation and free all associated memory
70
82
  */
71
83
  unmount(): void;
72
84
  get time(): TimeContext;
@@ -83,4 +95,4 @@ export declare class Runtime {
83
95
  mousewheel: (x: number, y: number) => void;
84
96
  };
85
97
  }
86
- //# sourceMappingURL=runtime.d.ts.map
98
+ //# sourceMappingURL=sim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sim.d.ts","sourceRoot":"","sources":["../src/sim.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,GAAG,EAER,KAAK,WAAW,EAIhB,WAAW,EACX,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAmBzB,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC;IACvB;;OAEG;IACH,WAAW,EAAE,aAAa,CAAC;IAC3B;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC;IACjC;;;;OAIG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC;;OAEG;IACH,UAAU,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAC5B,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,aAAa,KACf,IAAI,CAAC;AAEV,MAAM,MAAM,WAAW,GAAG,MAAM;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;CAC1D,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAC1B,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,MAAM,KACT,IAAI,CAAC;AAEV;;;;;;GAMG;AACH,qBAAa,GAAG;;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;gBAOT,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,WAAW,CAAC,MAAM,EAC1B,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,WAAW,CAAA;KAAE;IAapC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAQvB;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAK/B,KAAK;IAIL,OAAO;IAIP,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,QAAQ;IAQR;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO;IAkBvC,MAAM;IASN;;OAEG;IACH,QAAQ,IAAI,UAAU,CAAC,WAAW,CAAC;IAqBnC;;OAEG;IACH,QAAQ,IAAI,UAAU,CAAC,WAAW,CAAC;IAWnC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU;IAwBzB;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,UAAU;IAsB5B;;OAEG;IACH,OAAO;IAIP,IAAI,IAAI,IAAI,WAAW,CAYtB;IAED,IAAI,MAAM,IAAI,WAAW,CAExB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI;uBACa,GAAG,KAAG,IAAI;qBAGZ,GAAG,KAAG,IAAI;uBAGR,MAAM,KAAK,MAAM,KAAG,IAAI;4BAGnB,WAAW,KAAG,IAAI;0BAGpB,WAAW,KAAG,IAAI;wBAGpB,MAAM,KAAK,MAAM,KAAG,IAAI;MAGxC;CACH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bloopjs/bloop",
3
- "version": "0.0.30",
3
+ "version": "0.0.32",
4
4
  "author": "Neil Sarkar",
5
5
  "type": "module",
6
6
  "repository": {
@@ -36,7 +36,7 @@
36
36
  "@types/bun": "latest"
37
37
  },
38
38
  "dependencies": {
39
- "@bloopjs/engine": "0.0.30"
39
+ "@bloopjs/engine": "0.0.32"
40
40
  },
41
41
  "peerDependencies": {
42
42
  "typescript": "^5"
package/src/bloop.ts CHANGED
@@ -21,7 +21,7 @@ import type {
21
21
  MouseMoveEvent,
22
22
  MouseWheelEvent,
23
23
  } from "./events";
24
- import type { EngineHooks } from "./runtime";
24
+ import type { EngineHooks } from "./sim";
25
25
  import type { System } from "./system";
26
26
 
27
27
  export type BloopOpts<B extends Bag> = {
package/src/mod.ts CHANGED
@@ -1,11 +1,5 @@
1
- export type * as typesRuntime from "./runtime"
2
- export type * as typesMount from "./mount"
3
- export type * as typesBloop from "./bloop"
4
- export type * as typesContext from "./context"
5
-
6
1
  export * as Util from "./util";
7
2
 
8
- export { mount } from "./mount";
3
+ export { mount, type MountOpts } from "./mount";
9
4
  export { Bloop } from "./bloop"
10
- export { Runtime } from "./runtime"
11
- export { handleUpdate } from "./hmr"
5
+ export { Sim } from "./sim"
package/src/mount.ts CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  type EnginePointer,
4
4
  type WasmEngine,
5
5
  } from "@bloopjs/engine";
6
- import { type EngineHooks, Runtime } from "./runtime";
6
+ import { type EngineHooks, Sim } from "./sim";
7
7
  import { assert } from "./util";
8
8
 
9
9
  export async function mount(opts: MountOpts): Promise<MountResult> {
@@ -53,20 +53,19 @@ export async function mount(opts: MountOpts): Promise<MountResult> {
53
53
  const wasm = wasmInstantiatedSource.instance.exports as WasmEngine;
54
54
 
55
55
  const enginePointer = wasm.initialize();
56
- const runtime = new Runtime(wasm, memory, {
56
+ const sim = new Sim(wasm, memory, {
57
57
  serialize: opts.hooks.serialize,
58
58
  });
59
59
 
60
60
  if (opts.startRecording ?? true) {
61
- runtime.record();
61
+ sim.record();
62
62
  }
63
63
 
64
64
  opts.hooks.setBuffer(memory.buffer);
65
65
  opts.hooks.setContext(enginePointer);
66
66
 
67
67
  return {
68
- runtime,
69
- wasm,
68
+ sim,
70
69
  };
71
70
  }
72
71
 
@@ -83,6 +82,5 @@ export type MountOpts = {
83
82
  };
84
83
 
85
84
  export type MountResult = {
86
- runtime: Runtime;
87
- wasm: WasmEngine;
85
+ sim: Sim;
88
86
  };
@@ -69,16 +69,20 @@ export type DeserializeFn = (
69
69
  ) => void;
70
70
 
71
71
  /**
72
- * The runtime is a portable runtime that is responsible for:
72
+ * Sim is a portable simulation that is responsible for:
73
73
  *
74
74
  * * Moving the engine forward and backward in time
75
75
  * * Maintaining a js-friendly view of engine memory
76
+ * * Pausing and unpausing game logic
76
77
  */
77
- export class Runtime {
78
+ export class Sim {
78
79
  wasm: WasmEngine;
80
+ id: string;
79
81
  #memory: WebAssembly.Memory;
80
82
  #time: TimeContext;
81
83
  #serialize?: SerializeFn;
84
+ #isPaused: boolean = false;
85
+
82
86
  constructor(
83
87
  wasm: WasmEngine,
84
88
  memory: WebAssembly.Memory,
@@ -90,13 +94,42 @@ export class Runtime {
90
94
  new DataView(this.#memory.buffer, this.wasm.get_time_ctx()),
91
95
  );
92
96
 
97
+ this.id = `${Math.floor(Math.random() * 1_000_000)}`;
98
+
93
99
  this.#serialize = opts?.serialize;
94
100
  }
95
101
 
96
- step(ms?: number) {
102
+ step(ms?: number): void {
103
+ if (this.#isPaused && !this.isReplaying) {
104
+ // console.log({ paused: this.#isPaused, isReplaying: this.isReplaying });
105
+ return;
106
+ }
97
107
  this.wasm.step(ms ?? 16);
98
108
  }
99
109
 
110
+ /**
111
+ * Clone a session from another running sim.
112
+ * This dumps a snapshot at the current frame and the tape data from the source
113
+ *
114
+ * @param source
115
+ */
116
+ cloneSession(source: Sim): void {
117
+ this.loadTape(source.saveTape());
118
+ this.restore(source.snapshot());
119
+ }
120
+
121
+ pause() {
122
+ this.#isPaused = true;
123
+ }
124
+
125
+ unpause() {
126
+ this.#isPaused = false;
127
+ }
128
+
129
+ get isPaused(): boolean {
130
+ return this.#isPaused;
131
+ }
132
+
100
133
  stepBack() {
101
134
  if (this.time.frame === 0) {
102
135
  return;
@@ -227,7 +260,7 @@ export class Runtime {
227
260
  }
228
261
 
229
262
  /**
230
- * Unmount the runtime and free all associated memory
263
+ * Unmount the simulation and free all associated memory
231
264
  */
232
265
  unmount() {
233
266
  this.wasm.deinit();
package/dist/hmr.d.ts DELETED
@@ -1,4 +0,0 @@
1
- import { type MountOpts } from "./mount";
2
- import type { Runtime } from "./runtime";
3
- export declare function handleUpdate(newModule: any, oldRuntime: Runtime, mountOptions?: Partial<MountOpts>): Promise<Runtime>;
4
- //# sourceMappingURL=hmr.d.ts.map
package/dist/hmr.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"hmr.d.ts","sourceRoot":"","sources":["../src/hmr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,SAAS,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAsB,YAAY,CAChC,SAAS,EAAE,GAAG,EACd,UAAU,EAAE,OAAO,EACnB,YAAY,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAChC,OAAO,CAAC,OAAO,CAAC,CAkBlB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,GAAG,EAER,KAAK,WAAW,EAIhB,WAAW,EACX,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAmBzB,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC;IACvB;;OAEG;IACH,WAAW,EAAE,aAAa,CAAC;IAC3B;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC;IACjC;;;;OAIG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC;;OAEG;IACH,UAAU,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAC5B,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,aAAa,KACf,IAAI,CAAC;AAEV,MAAM,MAAM,WAAW,GAAG,MAAM;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;CAC1D,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAC1B,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,MAAM,KACT,IAAI,CAAC;AAEV;;;;;GAKG;AACH,qBAAa,OAAO;;IAClB,IAAI,EAAE,UAAU,CAAC;gBAKf,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,WAAW,CAAC,MAAM,EAC1B,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,WAAW,CAAA;KAAE;IAWpC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM;IAIhB,QAAQ;IAQR;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO;IAkBvC,MAAM;IASN;;OAEG;IACH,QAAQ,IAAI,UAAU,CAAC,WAAW,CAAC;IAqBnC;;OAEG;IACH,QAAQ,IAAI,UAAU,CAAC,WAAW,CAAC;IAWnC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU;IAwBzB;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,UAAU;IAsB5B;;OAEG;IACH,OAAO;IAIP,IAAI,IAAI,IAAI,WAAW,CAYtB;IAED,IAAI,MAAM,IAAI,WAAW,CAExB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI;uBACa,GAAG,KAAG,IAAI;qBAGZ,GAAG,KAAG,IAAI;uBAGR,MAAM,KAAK,MAAM,KAAG,IAAI;4BAGnB,WAAW,KAAG,IAAI;0BAGpB,WAAW,KAAG,IAAI;wBAGpB,MAAM,KAAK,MAAM,KAAG,IAAI;MAGxC;CACH"}
package/src/hmr.ts DELETED
@@ -1,27 +0,0 @@
1
- import { type MountOpts, mount } from "./mount";
2
- import type { Runtime } from "./runtime";
3
- import { assert } from "./util";
4
-
5
- export async function handleUpdate(
6
- newModule: any,
7
- oldRuntime: Runtime,
8
- mountOptions?: Partial<MountOpts>,
9
- ): Promise<Runtime> {
10
- assert(
11
- newModule?.game,
12
- `HMR: missing game export on module: ${JSON.stringify(newModule)}`,
13
- );
14
-
15
- const { runtime } = await mount({
16
- hooks: (newModule.game as any).hooks,
17
- ...mountOptions,
18
- });
19
-
20
- const tape = oldRuntime.saveTape();
21
- const snapshot = oldRuntime.snapshot();
22
-
23
- runtime.loadTape(tape);
24
- runtime.restore(snapshot);
25
- oldRuntime.unmount();
26
- return runtime;
27
- }