quake2ts 0.0.569 → 0.0.570

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.
@@ -0,0 +1,35 @@
1
+ import { VisibilityTimeline } from '../assets/visibilityAnalyzer.js';
2
+ import { Offset } from './types.js';
3
+ import { DemoAnalyzer } from './analyzer.js';
4
+ export interface OptimalWindow {
5
+ start: Offset;
6
+ end: Offset;
7
+ resourceCount: number;
8
+ resources: Set<string>;
9
+ score: number;
10
+ }
11
+ export type ScoringMode = 'count' | 'size' | 'locality' | 'hybrid' | 'action';
12
+ export interface OptimizationCriteria {
13
+ durationRange?: [number, number];
14
+ maxResources?: number;
15
+ scoringMode?: ScoringMode;
16
+ resourceSizes?: Map<string, number>;
17
+ topN?: number;
18
+ }
19
+ export interface OptimizationOptions extends OptimizationCriteria {
20
+ analyzer?: DemoAnalyzer;
21
+ demoBuffer?: ArrayBuffer;
22
+ searchStart?: number;
23
+ searchEnd?: number;
24
+ }
25
+ export declare class OptimalClipFinder {
26
+ findOptimalWindows(timeline: VisibilityTimeline, criteria: OptimizationOptions): Promise<OptimalWindow[]>;
27
+ findMinimalWindow(timeline: VisibilityTimeline, duration: number, options?: OptimizationOptions): OptimalWindow;
28
+ findMinimalWindowInRange(timeline: VisibilityTimeline, duration: number, searchStart?: Offset, searchEnd?: Offset): OptimalWindow;
29
+ private estimateTime;
30
+ private scanTimeline;
31
+ private calculateActionScore;
32
+ private addResources;
33
+ private removeResources;
34
+ }
35
+ //# sourceMappingURL=optimalClipFinder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimalClipFinder.d.ts","sourceRoot":"","sources":["../../../src/demo/optimalClipFinder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,MAAM,EAA2B,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE9E,MAAM,WAAW,oBAAoB;IACjC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAoB,SAAQ,oBAAoB;IAC7D,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,iBAAiB;IAEb,kBAAkB,CAC3B,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,mBAAmB,GAC9B,OAAO,CAAC,aAAa,EAAE,CAAC;IAyDpB,iBAAiB,CACpB,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,mBAAwB,GAClC,aAAa;IAST,wBAAwB,CAC3B,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACnB,aAAa;IAUhB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;IA6FpB,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,eAAe;CAY1B"}
@@ -24,4 +24,13 @@ export interface RecorderSnapshot {
24
24
  readonly fov: number;
25
25
  readonly blend: [number, number, number, number];
26
26
  }
27
+ export type FrameOffset = {
28
+ type: 'frame';
29
+ frame: number;
30
+ };
31
+ export type TimeOffset = {
32
+ type: 'time';
33
+ seconds: number;
34
+ };
35
+ export type Offset = FrameOffset | TimeOffset;
27
36
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/demo/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,WAAW,EAAE,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACpD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/demo/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,WAAW,EAAE,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACpD;AAED,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC"}
@@ -61,6 +61,7 @@ __export(index_exports, {
61
61
  createMockGPUCanvasContext: () => createMockGPUCanvasContext,
62
62
  createMockGPUDevice: () => createMockGPUDevice,
63
63
  createMockGame: () => createMockGame,
64
+ createMockGameExports: () => createMockGameExports,
64
65
  createMockGameState: () => createMockGameState,
65
66
  createMockHandshake: () => createMockHandshake,
66
67
  createMockImage: () => createMockImage,
@@ -692,6 +693,7 @@ var mockMonsterAttacks = {
692
693
  };
693
694
 
694
695
  // src/game/mocks.ts
696
+ var import_vitest5 = require("vitest");
695
697
  function createMockGameState(overrides) {
696
698
  return {
697
699
  levelName: "test_level",
@@ -701,9 +703,97 @@ function createMockGameState(overrides) {
701
703
  ...overrides
702
704
  };
703
705
  }
706
+ function createMockGameExports(overrides) {
707
+ return {
708
+ init: import_vitest5.vi.fn(),
709
+ shutdown: import_vitest5.vi.fn(),
710
+ spawnWorld: import_vitest5.vi.fn(),
711
+ frame: import_vitest5.vi.fn().mockReturnValue({ state: {} }),
712
+ clientConnect: import_vitest5.vi.fn().mockReturnValue(true),
713
+ clientBegin: import_vitest5.vi.fn().mockReturnValue({ index: 1, origin: { x: 0, y: 0, z: 0 } }),
714
+ clientDisconnect: import_vitest5.vi.fn(),
715
+ clientThink: import_vitest5.vi.fn(),
716
+ // clientUserInfoChanged is not in GameExports
717
+ // clientCommand is not in GameExports (it's serverCommand?) No, clientCommand might be missing from interface but present in impl or legacy.
718
+ // Checking GameExports interface in src/index.ts:
719
+ /*
720
+ clientConnect(ent: Entity | null, userInfo: string): string | true;
721
+ clientBegin(client: PlayerClient): Entity;
722
+ clientDisconnect(ent: Entity): void;
723
+ clientThink(ent: Entity, cmd: UserCommand): void;
724
+ respawn(ent: Entity): void;
725
+ ...
726
+ configstring(index: number, value: string): void;
727
+ serverCommand(cmd: string): void;
728
+ */
729
+ respawn: import_vitest5.vi.fn(),
730
+ entities: {
731
+ getByIndex: import_vitest5.vi.fn(),
732
+ forEachEntity: import_vitest5.vi.fn(),
733
+ findByRadius: import_vitest5.vi.fn(),
734
+ find: import_vitest5.vi.fn(),
735
+ checkAnyCollision: import_vitest5.vi.fn(),
736
+ trace: import_vitest5.vi.fn(),
737
+ pointcontents: import_vitest5.vi.fn(),
738
+ link: import_vitest5.vi.fn(),
739
+ // linkentity mapped to link in EntitySystem? No, linkentity in imports, link/unlink in System.
740
+ unlink: import_vitest5.vi.fn(),
741
+ spawn: import_vitest5.vi.fn(),
742
+ free: import_vitest5.vi.fn(),
743
+ activeCount: 0,
744
+ world: { classname: "worldspawn" }
745
+ },
746
+ multicast: import_vitest5.vi.fn(),
747
+ unicast: import_vitest5.vi.fn(),
748
+ configstring: import_vitest5.vi.fn(),
749
+ serverCommand: import_vitest5.vi.fn(),
750
+ sound: import_vitest5.vi.fn(),
751
+ soundIndex: import_vitest5.vi.fn(),
752
+ centerprintf: import_vitest5.vi.fn(),
753
+ trace: import_vitest5.vi.fn(),
754
+ time: 0,
755
+ deathmatch: false,
756
+ skill: 1,
757
+ rogue: false,
758
+ xatrix: false,
759
+ coop: false,
760
+ friendlyFire: false,
761
+ random: {
762
+ next: import_vitest5.vi.fn(),
763
+ nextFloat: import_vitest5.vi.fn(),
764
+ range: import_vitest5.vi.fn(),
765
+ crandom: import_vitest5.vi.fn(),
766
+ getState: import_vitest5.vi.fn(),
767
+ setState: import_vitest5.vi.fn()
768
+ },
769
+ createSave: import_vitest5.vi.fn(),
770
+ loadSave: import_vitest5.vi.fn(),
771
+ serialize: import_vitest5.vi.fn(),
772
+ loadState: import_vitest5.vi.fn(),
773
+ setGodMode: import_vitest5.vi.fn(),
774
+ setNoclip: import_vitest5.vi.fn(),
775
+ setNotarget: import_vitest5.vi.fn(),
776
+ giveItem: import_vitest5.vi.fn(),
777
+ damage: import_vitest5.vi.fn(),
778
+ teleport: import_vitest5.vi.fn(),
779
+ registerHooks: import_vitest5.vi.fn(),
780
+ hooks: {
781
+ onMapLoad: import_vitest5.vi.fn(),
782
+ onMapUnload: import_vitest5.vi.fn(),
783
+ onPlayerSpawn: import_vitest5.vi.fn(),
784
+ onPlayerDeath: import_vitest5.vi.fn(),
785
+ register: import_vitest5.vi.fn()
786
+ },
787
+ setSpectator: import_vitest5.vi.fn(),
788
+ registerEntitySpawn: import_vitest5.vi.fn(),
789
+ unregisterEntitySpawn: import_vitest5.vi.fn(),
790
+ getCustomEntities: import_vitest5.vi.fn(),
791
+ ...overrides
792
+ };
793
+ }
704
794
 
705
795
  // src/server/mocks/transport.ts
706
- var import_vitest5 = require("vitest");
796
+ var import_vitest6 = require("vitest");
707
797
  var MockTransport = class {
708
798
  constructor() {
709
799
  this.address = "127.0.0.1";
@@ -711,11 +801,11 @@ var MockTransport = class {
711
801
  this.sentMessages = [];
712
802
  this.receivedMessages = [];
713
803
  this.listening = false;
714
- this.listenSpy = import_vitest5.vi.fn().mockImplementation(async (port) => {
804
+ this.listenSpy = import_vitest6.vi.fn().mockImplementation(async (port) => {
715
805
  this.port = port;
716
806
  this.listening = true;
717
807
  });
718
- this.closeSpy = import_vitest5.vi.fn().mockImplementation(() => {
808
+ this.closeSpy = import_vitest6.vi.fn().mockImplementation(() => {
719
809
  this.listening = false;
720
810
  });
721
811
  }
@@ -771,11 +861,11 @@ var MockTransport = class {
771
861
  };
772
862
  function createMockUDPSocket(overrides) {
773
863
  const socket = {
774
- send: import_vitest5.vi.fn(),
775
- on: import_vitest5.vi.fn(),
776
- close: import_vitest5.vi.fn(),
777
- bind: import_vitest5.vi.fn(),
778
- address: import_vitest5.vi.fn().mockReturnValue({ address: "127.0.0.1", family: "IPv4", port: 0 }),
864
+ send: import_vitest6.vi.fn(),
865
+ on: import_vitest6.vi.fn(),
866
+ close: import_vitest6.vi.fn(),
867
+ bind: import_vitest6.vi.fn(),
868
+ address: import_vitest6.vi.fn().mockReturnValue({ address: "127.0.0.1", family: "IPv4", port: 0 }),
779
869
  ...overrides
780
870
  };
781
871
  return socket;
@@ -792,13 +882,13 @@ function createMockTransport(address = "127.0.0.1", port = 27910, overrides) {
792
882
  }
793
883
  function createMockNetDriver(overrides) {
794
884
  return {
795
- connect: import_vitest5.vi.fn().mockResolvedValue(void 0),
796
- disconnect: import_vitest5.vi.fn(),
797
- send: import_vitest5.vi.fn(),
798
- onMessage: import_vitest5.vi.fn(),
799
- onClose: import_vitest5.vi.fn(),
800
- onError: import_vitest5.vi.fn(),
801
- isConnected: import_vitest5.vi.fn().mockReturnValue(true),
885
+ connect: import_vitest6.vi.fn().mockResolvedValue(void 0),
886
+ disconnect: import_vitest6.vi.fn(),
887
+ send: import_vitest6.vi.fn(),
888
+ onMessage: import_vitest6.vi.fn(),
889
+ onClose: import_vitest6.vi.fn(),
890
+ onError: import_vitest6.vi.fn(),
891
+ isConnected: import_vitest6.vi.fn().mockReturnValue(true),
802
892
  ...overrides
803
893
  };
804
894
  }
@@ -806,7 +896,7 @@ function createMockNetDriver(overrides) {
806
896
  // src/server/mocks/state.ts
807
897
  var import_server = require("@quake2ts/server");
808
898
  var import_shared4 = require("@quake2ts/shared");
809
- var import_vitest6 = require("vitest");
899
+ var import_vitest7 = require("vitest");
810
900
  function createMockServerState(overrides) {
811
901
  return {
812
902
  state: import_server.ServerState.Game,
@@ -848,13 +938,13 @@ function createMockServerClient(clientNum, overrides) {
848
938
  incomingSequence: 0,
849
939
  outgoingSequence: 0,
850
940
  lastReceived: 0,
851
- process: import_vitest6.vi.fn(),
852
- transmit: import_vitest6.vi.fn(),
853
- writeReliableByte: import_vitest6.vi.fn(),
854
- writeReliableShort: import_vitest6.vi.fn(),
855
- writeReliableLong: import_vitest6.vi.fn(),
856
- writeReliableString: import_vitest6.vi.fn(),
857
- writeReliableData: import_vitest6.vi.fn()
941
+ process: import_vitest7.vi.fn(),
942
+ transmit: import_vitest7.vi.fn(),
943
+ writeReliableByte: import_vitest7.vi.fn(),
944
+ writeReliableShort: import_vitest7.vi.fn(),
945
+ writeReliableLong: import_vitest7.vi.fn(),
946
+ writeReliableString: import_vitest7.vi.fn(),
947
+ writeReliableData: import_vitest7.vi.fn()
858
948
  },
859
949
  // Cast as any because NetChan might be complex to fully mock here
860
950
  userInfo: "",
@@ -896,13 +986,13 @@ function createMockServerClient(clientNum, overrides) {
896
986
  }
897
987
  function createMockServer(overrides) {
898
988
  return {
899
- start: import_vitest6.vi.fn().mockResolvedValue(void 0),
900
- stop: import_vitest6.vi.fn(),
901
- multicast: import_vitest6.vi.fn(),
902
- unicast: import_vitest6.vi.fn(),
903
- configstring: import_vitest6.vi.fn(),
904
- kickPlayer: import_vitest6.vi.fn(),
905
- changeMap: import_vitest6.vi.fn().mockResolvedValue(void 0),
989
+ start: import_vitest7.vi.fn().mockResolvedValue(void 0),
990
+ stop: import_vitest7.vi.fn(),
991
+ multicast: import_vitest7.vi.fn(),
992
+ unicast: import_vitest7.vi.fn(),
993
+ configstring: import_vitest7.vi.fn(),
994
+ kickPlayer: import_vitest7.vi.fn(),
995
+ changeMap: import_vitest7.vi.fn().mockResolvedValue(void 0),
906
996
  ...overrides
907
997
  };
908
998
  }
@@ -964,19 +1054,19 @@ async function simulateHandshake(client, server) {
964
1054
  }
965
1055
 
966
1056
  // src/server/mocks/commands.ts
967
- var import_vitest7 = require("vitest");
1057
+ var import_vitest8 = require("vitest");
968
1058
  function createMockServerConsole(overrides) {
969
1059
  const outputBuffer = [];
970
1060
  const commandBuffer = [];
971
1061
  return {
972
- exec: import_vitest7.vi.fn((cmd) => {
1062
+ exec: import_vitest8.vi.fn((cmd) => {
973
1063
  commandBuffer.push(cmd);
974
1064
  return `Executed: ${cmd}`;
975
1065
  }),
976
- print: import_vitest7.vi.fn((text) => {
1066
+ print: import_vitest8.vi.fn((text) => {
977
1067
  outputBuffer.push(text);
978
1068
  }),
979
- broadcast: import_vitest7.vi.fn((text) => {
1069
+ broadcast: import_vitest8.vi.fn((text) => {
980
1070
  outputBuffer.push(`Broadcast: ${text}`);
981
1071
  }),
982
1072
  commandBuffer,
@@ -989,13 +1079,13 @@ function createMockRConClient(password = "") {
989
1079
  connected: false,
990
1080
  lastCommand: "",
991
1081
  lastResponse: "",
992
- connect: import_vitest7.vi.fn(async (address, port, pwd) => {
1082
+ connect: import_vitest8.vi.fn(async (address, port, pwd) => {
993
1083
  return pwd === password;
994
1084
  }),
995
- sendCommand: import_vitest7.vi.fn(async (cmd) => {
1085
+ sendCommand: import_vitest8.vi.fn(async (cmd) => {
996
1086
  return `RCON Response for: ${cmd}`;
997
1087
  }),
998
- disconnect: import_vitest7.vi.fn()
1088
+ disconnect: import_vitest8.vi.fn()
999
1089
  };
1000
1090
  }
1001
1091
  function simulateServerCommand(server, command) {
@@ -1638,10 +1728,10 @@ function createMockImage(width, height, src) {
1638
1728
  }
1639
1729
 
1640
1730
  // src/engine/mocks/webgpu.ts
1641
- var import_vitest8 = require("vitest");
1731
+ var import_vitest9 = require("vitest");
1642
1732
  function createMockGPUAdapter() {
1643
1733
  return {
1644
- requestDevice: import_vitest8.vi.fn().mockResolvedValue(createMockGPUDevice()),
1734
+ requestDevice: import_vitest9.vi.fn().mockResolvedValue(createMockGPUDevice()),
1645
1735
  features: /* @__PURE__ */ new Set(),
1646
1736
  limits: {}
1647
1737
  };
@@ -1651,40 +1741,40 @@ function createMockGPUDevice() {
1651
1741
  features: /* @__PURE__ */ new Set(),
1652
1742
  limits: {},
1653
1743
  queue: {
1654
- submit: import_vitest8.vi.fn(),
1655
- writeBuffer: import_vitest8.vi.fn(),
1656
- writeTexture: import_vitest8.vi.fn(),
1657
- copyExternalImageToTexture: import_vitest8.vi.fn()
1658
- },
1659
- createCommandEncoder: import_vitest8.vi.fn().mockReturnValue({
1660
- beginRenderPass: import_vitest8.vi.fn().mockReturnValue({
1661
- setPipeline: import_vitest8.vi.fn(),
1662
- draw: import_vitest8.vi.fn(),
1663
- end: import_vitest8.vi.fn()
1744
+ submit: import_vitest9.vi.fn(),
1745
+ writeBuffer: import_vitest9.vi.fn(),
1746
+ writeTexture: import_vitest9.vi.fn(),
1747
+ copyExternalImageToTexture: import_vitest9.vi.fn()
1748
+ },
1749
+ createCommandEncoder: import_vitest9.vi.fn().mockReturnValue({
1750
+ beginRenderPass: import_vitest9.vi.fn().mockReturnValue({
1751
+ setPipeline: import_vitest9.vi.fn(),
1752
+ draw: import_vitest9.vi.fn(),
1753
+ end: import_vitest9.vi.fn()
1664
1754
  }),
1665
- finish: import_vitest8.vi.fn()
1755
+ finish: import_vitest9.vi.fn()
1666
1756
  }),
1667
- createRenderPipeline: import_vitest8.vi.fn(),
1668
- createShaderModule: import_vitest8.vi.fn(),
1669
- createBindGroup: import_vitest8.vi.fn(),
1670
- createBindGroupLayout: import_vitest8.vi.fn(),
1671
- createBuffer: import_vitest8.vi.fn(),
1672
- createTexture: import_vitest8.vi.fn(),
1673
- createSampler: import_vitest8.vi.fn()
1757
+ createRenderPipeline: import_vitest9.vi.fn(),
1758
+ createShaderModule: import_vitest9.vi.fn(),
1759
+ createBindGroup: import_vitest9.vi.fn(),
1760
+ createBindGroupLayout: import_vitest9.vi.fn(),
1761
+ createBuffer: import_vitest9.vi.fn(),
1762
+ createTexture: import_vitest9.vi.fn(),
1763
+ createSampler: import_vitest9.vi.fn()
1674
1764
  };
1675
1765
  }
1676
1766
  function createMockGPUCanvasContext() {
1677
1767
  return {
1678
- configure: import_vitest8.vi.fn(),
1679
- unconfigure: import_vitest8.vi.fn(),
1680
- getCurrentTexture: import_vitest8.vi.fn()
1768
+ configure: import_vitest9.vi.fn(),
1769
+ unconfigure: import_vitest9.vi.fn(),
1770
+ getCurrentTexture: import_vitest9.vi.fn()
1681
1771
  };
1682
1772
  }
1683
1773
  function setupWebGPUMocks() {
1684
1774
  const mockAdapter = createMockGPUAdapter();
1685
1775
  const mockGpu = {
1686
- requestAdapter: import_vitest8.vi.fn().mockResolvedValue(mockAdapter),
1687
- getPreferredCanvasFormat: import_vitest8.vi.fn().mockReturnValue("bgra8unorm")
1776
+ requestAdapter: import_vitest9.vi.fn().mockResolvedValue(mockAdapter),
1777
+ getPreferredCanvasFormat: import_vitest9.vi.fn().mockReturnValue("bgra8unorm")
1688
1778
  };
1689
1779
  Object.defineProperty(global.navigator, "gpu", {
1690
1780
  value: mockGpu,
@@ -2321,6 +2411,7 @@ function createVisualTestScenario(page, sceneName) {
2321
2411
  createMockGPUCanvasContext,
2322
2412
  createMockGPUDevice,
2323
2413
  createMockGame,
2414
+ createMockGameExports,
2324
2415
  createMockGameState,
2325
2416
  createMockHandshake,
2326
2417
  createMockImage,