@multitapio/multitap 0.0.8 → 0.0.10
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/codegen/generator.d.ts +2 -0
- package/dist/codegen/generator.d.ts.map +1 -1
- package/dist/codegen/rust.d.ts +1 -0
- package/dist/codegen/rust.d.ts.map +1 -1
- package/dist/codegen/typescript.d.ts +1 -0
- package/dist/codegen/typescript.d.ts.map +1 -1
- package/dist/lib.js +58 -7
- package/dist/react/hooks/useQuery.d.ts +13 -2
- package/dist/react/hooks/useQuery.d.ts.map +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/types/session.d.ts +11 -0
- package/dist/react/types/session.d.ts.map +1 -1
- package/dist/types/codegen/generator.d.ts +2 -0
- package/dist/types/codegen/generator.d.ts.map +1 -1
- package/dist/types/codegen/rust.d.ts +1 -0
- package/dist/types/codegen/rust.d.ts.map +1 -1
- package/dist/types/codegen/typescript.d.ts +1 -0
- package/dist/types/codegen/typescript.d.ts.map +1 -1
- package/dist/types/react/hooks/useQuery.d.ts +13 -2
- package/dist/types/react/hooks/useQuery.d.ts.map +1 -1
- package/dist/types/react/index.d.ts +1 -1
- package/dist/types/react/index.d.ts.map +1 -1
- package/dist/types/react/types/session.d.ts +11 -0
- package/dist/types/react/types/session.d.ts.map +1 -1
- package/dist/vite/index.js +12 -6
- package/package.json +1 -1
- package/dist/.stamp +0 -0
|
@@ -13,6 +13,8 @@ import type { CompiledStateSchema, CompiledInputSchema } from '../schema';
|
|
|
13
13
|
export interface GeneratorOptions {
|
|
14
14
|
/** Optional plugin name for prefixing (e.g., "physics") */
|
|
15
15
|
pluginName?: string;
|
|
16
|
+
/** Maximum number of participants (default: 8) */
|
|
17
|
+
maxParticipants?: number;
|
|
16
18
|
}
|
|
17
19
|
/**
|
|
18
20
|
* Code generator interface.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/codegen/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAM1E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/codegen/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAM1E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,0BAA0B;IAC1B,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC;IAEzC;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAEnD;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAEnD;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAAC;CAC9E;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAU9C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAU9C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAiB9C;AAmBD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CASpE;AAED,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYjD;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBnD"}
|
package/dist/codegen/rust.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ import type { Generator, GeneratorOptions } from './generator';
|
|
|
14
14
|
export declare class RustGenerator implements Generator {
|
|
15
15
|
readonly language: "rust";
|
|
16
16
|
private opts;
|
|
17
|
+
private maxParticipants;
|
|
17
18
|
constructor(opts?: GeneratorOptions);
|
|
18
19
|
generateState(schema: CompiledStateSchema): string;
|
|
19
20
|
generateInput(schema: CompiledInputSchema): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../../src/codegen/rust.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAKpB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../../src/codegen/rust.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAKpB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA05C/D;;;GAGG;AACH,qBAAa,aAAc,YAAW,SAAS;IAC7C,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IACpC,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,eAAe,CAAS;gBAEpB,IAAI,GAAE,gBAAqB;IAKvC,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IA2ClD,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IA2BlD,YAAY,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,GAAG,MAAM;CAe7E"}
|
|
@@ -14,6 +14,7 @@ import type { Generator, GeneratorOptions } from './generator';
|
|
|
14
14
|
export declare class TypeScriptGenerator implements Generator {
|
|
15
15
|
readonly language: "typescript";
|
|
16
16
|
private opts;
|
|
17
|
+
private maxParticipants;
|
|
17
18
|
constructor(opts?: GeneratorOptions);
|
|
18
19
|
generateState(schema: CompiledStateSchema): string;
|
|
19
20
|
generateInput(schema: CompiledInputSchema): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/codegen/typescript.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAMpB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/codegen/typescript.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAMpB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAmlD/D;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,SAAS;IACnD,QAAQ,CAAC,QAAQ,EAAG,YAAY,CAAU;IAC1C,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,eAAe,CAAS;gBAEpB,IAAI,GAAE,gBAAqB;IAKvC,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IA0ClD,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IAyClD,YAAY,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,GAAG,MAAM;CAG7E"}
|
package/dist/lib.js
CHANGED
|
@@ -8317,6 +8317,27 @@ function useFrame(callback, renderPriority) {
|
|
|
8317
8317
|
// src/react/hooks/useQuery.ts
|
|
8318
8318
|
import { useState as useState2, useCallback as useCallback2 } from "react";
|
|
8319
8319
|
import { createStore as createStore2, useStore } from "zustand";
|
|
8320
|
+
function shallowEqual(a, b) {
|
|
8321
|
+
if (a === b) return true;
|
|
8322
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
8323
|
+
if (a.length !== b.length) return false;
|
|
8324
|
+
for (let i = 0; i < a.length; i++) {
|
|
8325
|
+
if (a[i] !== b[i]) return false;
|
|
8326
|
+
}
|
|
8327
|
+
return true;
|
|
8328
|
+
}
|
|
8329
|
+
return false;
|
|
8330
|
+
}
|
|
8331
|
+
function createSelectorStore(initial) {
|
|
8332
|
+
return createStore2((set, get) => ({
|
|
8333
|
+
result: initial,
|
|
8334
|
+
update: (newResult) => {
|
|
8335
|
+
if (!shallowEqual(get().result, newResult)) {
|
|
8336
|
+
set({ result: newResult });
|
|
8337
|
+
}
|
|
8338
|
+
}
|
|
8339
|
+
}));
|
|
8340
|
+
}
|
|
8320
8341
|
function createEntityStore() {
|
|
8321
8342
|
return createStore2((set, get) => ({
|
|
8322
8343
|
entities: [],
|
|
@@ -8346,13 +8367,20 @@ function createEntityStore() {
|
|
|
8346
8367
|
}
|
|
8347
8368
|
}));
|
|
8348
8369
|
}
|
|
8349
|
-
function useQuery(include, exclude) {
|
|
8370
|
+
function useQuery(include, exclude, selector) {
|
|
8350
8371
|
const { schema } = useSession();
|
|
8351
8372
|
const [entityStore] = useState2(createEntityStore);
|
|
8373
|
+
const [selectorStore] = useState2(
|
|
8374
|
+
() => selector ? createSelectorStore([]) : null
|
|
8375
|
+
);
|
|
8352
8376
|
const entities = useStore(entityStore, (state) => state.entities);
|
|
8377
|
+
const selectorResult = useStore(
|
|
8378
|
+
selectorStore ?? entityStore,
|
|
8379
|
+
(state) => "result" in state ? state.result : null
|
|
8380
|
+
);
|
|
8353
8381
|
useFrame(
|
|
8354
8382
|
useCallback2(
|
|
8355
|
-
({ state }) => {
|
|
8383
|
+
({ state, players }) => {
|
|
8356
8384
|
const stateBuffer = new Uint8Array(
|
|
8357
8385
|
state.buffer,
|
|
8358
8386
|
state.byteOffset,
|
|
@@ -8361,19 +8389,34 @@ function useQuery(include, exclude) {
|
|
|
8361
8389
|
const queryResults = query(schema, stateBuffer, include, exclude);
|
|
8362
8390
|
const entityState = entityStore.getState();
|
|
8363
8391
|
entityState.updateEntities(queryResults);
|
|
8392
|
+
if (selector && selectorStore) {
|
|
8393
|
+
const currentEntities = entityStore.getState().entities;
|
|
8394
|
+
const result = selector(currentEntities, { state, players });
|
|
8395
|
+
selectorStore.getState().update(result);
|
|
8396
|
+
}
|
|
8364
8397
|
},
|
|
8365
|
-
[schema, include, exclude, entityStore]
|
|
8398
|
+
[schema, include, exclude, entityStore, selector, selectorStore]
|
|
8366
8399
|
)
|
|
8367
8400
|
);
|
|
8401
|
+
if (selector) {
|
|
8402
|
+
return selectorResult;
|
|
8403
|
+
}
|
|
8368
8404
|
return entities;
|
|
8369
8405
|
}
|
|
8370
|
-
function useQueryMask(includeMask, excludeMask) {
|
|
8406
|
+
function useQueryMask(includeMask, excludeMask, selector) {
|
|
8371
8407
|
const { schema } = useSession();
|
|
8372
8408
|
const [entityStore] = useState2(createEntityStore);
|
|
8409
|
+
const [selectorStore] = useState2(
|
|
8410
|
+
() => selector ? createSelectorStore([]) : null
|
|
8411
|
+
);
|
|
8373
8412
|
const entities = useStore(entityStore, (state) => state.entities);
|
|
8413
|
+
const selectorResult = useStore(
|
|
8414
|
+
selectorStore ?? entityStore,
|
|
8415
|
+
(state) => "result" in state ? state.result : null
|
|
8416
|
+
);
|
|
8374
8417
|
useFrame(
|
|
8375
8418
|
useCallback2(
|
|
8376
|
-
({ state }) => {
|
|
8419
|
+
({ state, players }) => {
|
|
8377
8420
|
const stateBuffer = new Uint8Array(
|
|
8378
8421
|
state.buffer,
|
|
8379
8422
|
state.byteOffset,
|
|
@@ -8382,10 +8425,18 @@ function useQueryMask(includeMask, excludeMask) {
|
|
|
8382
8425
|
const queryResults = queryByMask(schema, stateBuffer, includeMask, excludeMask);
|
|
8383
8426
|
const entityState = entityStore.getState();
|
|
8384
8427
|
entityState.updateEntities(queryResults);
|
|
8428
|
+
if (selector && selectorStore) {
|
|
8429
|
+
const currentEntities = entityStore.getState().entities;
|
|
8430
|
+
const result = selector(currentEntities, { state, players });
|
|
8431
|
+
selectorStore.getState().update(result);
|
|
8432
|
+
}
|
|
8385
8433
|
},
|
|
8386
|
-
[schema, includeMask, excludeMask, entityStore]
|
|
8434
|
+
[schema, includeMask, excludeMask, entityStore, selector, selectorStore]
|
|
8387
8435
|
)
|
|
8388
8436
|
);
|
|
8437
|
+
if (selector) {
|
|
8438
|
+
return selectorResult;
|
|
8439
|
+
}
|
|
8389
8440
|
return entities;
|
|
8390
8441
|
}
|
|
8391
8442
|
|
|
@@ -9523,7 +9574,7 @@ var MobaView = {
|
|
|
9523
9574
|
// src/react/views/AsteroidsView.ts
|
|
9524
9575
|
import { Quaternion as Quaternion14, Vector3 as Vector314 } from "three";
|
|
9525
9576
|
var DEFAULT_DISTANCE8 = 50;
|
|
9526
|
-
var DEFAULT_ANGLE3 =
|
|
9577
|
+
var DEFAULT_ANGLE3 = 0;
|
|
9527
9578
|
var DEFAULT_ROTATION_SENSITIVITY = 4;
|
|
9528
9579
|
var DEFAULT_FOLLOW_SPEED5 = 10;
|
|
9529
9580
|
var UP = new Vector314(0, 1, 0);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { QuerySelector } from '../types/session';
|
|
1
2
|
import { type EntityRef } from '../../state';
|
|
2
3
|
/**
|
|
3
4
|
* useQuery hook that returns entities matching component requirements
|
|
@@ -9,11 +10,16 @@ import { type EntityRef } from '../../state';
|
|
|
9
10
|
* // Find entities with Position but NOT RespawnTimer
|
|
10
11
|
* const activeShips = useQuery(['Position', 'Ship'], ['RespawnTimer']);
|
|
11
12
|
*
|
|
13
|
+
* // With selector to transform results
|
|
14
|
+
* const shipCount = useQuery(['Position', 'Ship'], undefined, (entities) => entities.length);
|
|
15
|
+
*
|
|
12
16
|
* @param include - Component names that entities must have
|
|
13
17
|
* @param exclude - Optional component names that entities must NOT have
|
|
14
|
-
* @
|
|
18
|
+
* @param selector - Optional selector function to transform results
|
|
19
|
+
* @returns Array of EntityRef matching the query, or selector result if provided
|
|
15
20
|
*/
|
|
16
21
|
export declare function useQuery(include: string[], exclude?: string[]): EntityRef[];
|
|
22
|
+
export declare function useQuery<T>(include: string[], exclude: string[] | undefined, selector: QuerySelector<T>): T;
|
|
17
23
|
/**
|
|
18
24
|
* useQueryMask hook that returns entities matching pre-computed bitmasks.
|
|
19
25
|
*
|
|
@@ -33,9 +39,14 @@ export declare function useQuery(include: string[], exclude?: string[]): EntityR
|
|
|
33
39
|
* return ships.map(entity => <Ship key={entity} entity={entity} />);
|
|
34
40
|
* }
|
|
35
41
|
*
|
|
42
|
+
* // With selector
|
|
43
|
+
* const shipCount = useQueryMask(SHIPS_MASK, undefined, (entities) => entities.length);
|
|
44
|
+
*
|
|
36
45
|
* @param includeMask - Bigint bitmask of components that must be present
|
|
37
46
|
* @param excludeMask - Optional bigint bitmask of components that must NOT be present
|
|
38
|
-
* @
|
|
47
|
+
* @param selector - Optional selector function to transform results
|
|
48
|
+
* @returns Array of EntityRef matching the query, or selector result if provided
|
|
39
49
|
*/
|
|
40
50
|
export declare function useQueryMask(includeMask: bigint, excludeMask?: bigint): EntityRef[];
|
|
51
|
+
export declare function useQueryMask<T>(includeMask: bigint, excludeMask: bigint | undefined, selector: QuerySelector<T>): T;
|
|
41
52
|
//# sourceMappingURL=useQuery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../../../src/react/hooks/useQuery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../../../src/react/hooks/useQuery.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AAyEhE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAA;AAC5E,wBAAgB,QAAQ,CAAC,CAAC,EACxB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAC7B,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GACzB,CAAC,CAAA;AAsDJ;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAAA;AACpF,wBAAgB,YAAY,CAAC,CAAC,EAC5B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GACzB,CAAC,CAAA"}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
export { SessionProvider, SessionContext, useSessionContext } from './providers';
|
|
5
5
|
export { useSession, useFrame, useQuery, useQueryMask, usePlayers, useCurrentPlayer, useEvent } from './hooks';
|
|
6
6
|
export type { CapturedEvent, UseEventOptions } from './hooks';
|
|
7
|
-
export type { Player, PlayerStore, EntityStore, SessionContextValue, SessionProviderProps, ReactSessionInterface, ReactCreateSession, UseSessionRenderCallback, } from './types/session';
|
|
7
|
+
export type { Player, PlayerStore, EntityStore, SessionContextValue, SessionProviderProps, ReactSessionInterface, ReactCreateSession, UseSessionRenderCallback, QuerySelector, QuerySelectorContext, } from './types/session';
|
|
8
8
|
export { Player as UnicamPlayer, Player as PlayerController } from './Player';
|
|
9
9
|
export { Crosshair } from './Crosshair';
|
|
10
10
|
export type { PlayerProps, PlayerHandle, PlayerIntent, ViewType, Vector3Like, QuaternionLike, InterpolationMode, } from './types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAGhF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC9G,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAG7D,YAAY,EACV,MAAM,EACN,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAGhF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC9G,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAG7D,YAAY,EACV,MAAM,EACN,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,aAAa,EACb,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAQxB,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAG7E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,YAAY,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,cAAc,EACd,iBAAiB,GAClB,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAGvC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAGrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAC5C,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAGpF,OAAO,EACL,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,aAAa,EACb,OAAO,GACR,MAAM,SAAS,CAAA;AAChB,YAAY,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -20,6 +20,17 @@ export type EntityStore = {
|
|
|
20
20
|
entities: EntityRef[];
|
|
21
21
|
updateEntities: (incoming: Generator<EntityRef>) => void;
|
|
22
22
|
};
|
|
23
|
+
/**
|
|
24
|
+
* Context passed to query selectors
|
|
25
|
+
*/
|
|
26
|
+
export type QuerySelectorContext = {
|
|
27
|
+
state: DataView;
|
|
28
|
+
players: Player[];
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Selector function for transforming query results
|
|
32
|
+
*/
|
|
33
|
+
export type QuerySelector<T> = (entities: EntityRef[], context: QuerySelectorContext) => T;
|
|
23
34
|
/**
|
|
24
35
|
* Zustand store for tracking session players
|
|
25
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/react/types/session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/react/types/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,8 @@ import type { CompiledStateSchema, CompiledInputSchema } from '../schema';
|
|
|
13
13
|
export interface GeneratorOptions {
|
|
14
14
|
/** Optional plugin name for prefixing (e.g., "physics") */
|
|
15
15
|
pluginName?: string;
|
|
16
|
+
/** Maximum number of participants (default: 8) */
|
|
17
|
+
maxParticipants?: number;
|
|
16
18
|
}
|
|
17
19
|
/**
|
|
18
20
|
* Code generator interface.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/codegen/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAM1E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/codegen/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAM1E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,0BAA0B;IAC1B,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC;IAEzC;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAEnD;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAEnD;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAAC;CAC9E;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAU9C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAU9C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAiB9C;AAmBD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CASpE;AAED,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYjD;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBnD"}
|
|
@@ -14,6 +14,7 @@ import type { Generator, GeneratorOptions } from './generator';
|
|
|
14
14
|
export declare class RustGenerator implements Generator {
|
|
15
15
|
readonly language: "rust";
|
|
16
16
|
private opts;
|
|
17
|
+
private maxParticipants;
|
|
17
18
|
constructor(opts?: GeneratorOptions);
|
|
18
19
|
generateState(schema: CompiledStateSchema): string;
|
|
19
20
|
generateInput(schema: CompiledInputSchema): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../../src/codegen/rust.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAKpB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../../src/codegen/rust.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAKpB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA05C/D;;;GAGG;AACH,qBAAa,aAAc,YAAW,SAAS;IAC7C,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IACpC,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,eAAe,CAAS;gBAEpB,IAAI,GAAE,gBAAqB;IAKvC,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IA2ClD,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IA2BlD,YAAY,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,GAAG,MAAM;CAe7E"}
|
|
@@ -14,6 +14,7 @@ import type { Generator, GeneratorOptions } from './generator';
|
|
|
14
14
|
export declare class TypeScriptGenerator implements Generator {
|
|
15
15
|
readonly language: "typescript";
|
|
16
16
|
private opts;
|
|
17
|
+
private maxParticipants;
|
|
17
18
|
constructor(opts?: GeneratorOptions);
|
|
18
19
|
generateState(schema: CompiledStateSchema): string;
|
|
19
20
|
generateInput(schema: CompiledInputSchema): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/codegen/typescript.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAMpB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/codegen/typescript.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAMpB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAmlD/D;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,SAAS;IACnD,QAAQ,CAAC,QAAQ,EAAG,YAAY,CAAU;IAC1C,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,eAAe,CAAS;gBAEpB,IAAI,GAAE,gBAAqB;IAKvC,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IA0ClD,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IAyClD,YAAY,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,GAAG,MAAM;CAG7E"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { QuerySelector } from '../types/session';
|
|
1
2
|
import { type EntityRef } from '../../state';
|
|
2
3
|
/**
|
|
3
4
|
* useQuery hook that returns entities matching component requirements
|
|
@@ -9,11 +10,16 @@ import { type EntityRef } from '../../state';
|
|
|
9
10
|
* // Find entities with Position but NOT RespawnTimer
|
|
10
11
|
* const activeShips = useQuery(['Position', 'Ship'], ['RespawnTimer']);
|
|
11
12
|
*
|
|
13
|
+
* // With selector to transform results
|
|
14
|
+
* const shipCount = useQuery(['Position', 'Ship'], undefined, (entities) => entities.length);
|
|
15
|
+
*
|
|
12
16
|
* @param include - Component names that entities must have
|
|
13
17
|
* @param exclude - Optional component names that entities must NOT have
|
|
14
|
-
* @
|
|
18
|
+
* @param selector - Optional selector function to transform results
|
|
19
|
+
* @returns Array of EntityRef matching the query, or selector result if provided
|
|
15
20
|
*/
|
|
16
21
|
export declare function useQuery(include: string[], exclude?: string[]): EntityRef[];
|
|
22
|
+
export declare function useQuery<T>(include: string[], exclude: string[] | undefined, selector: QuerySelector<T>): T;
|
|
17
23
|
/**
|
|
18
24
|
* useQueryMask hook that returns entities matching pre-computed bitmasks.
|
|
19
25
|
*
|
|
@@ -33,9 +39,14 @@ export declare function useQuery(include: string[], exclude?: string[]): EntityR
|
|
|
33
39
|
* return ships.map(entity => <Ship key={entity} entity={entity} />);
|
|
34
40
|
* }
|
|
35
41
|
*
|
|
42
|
+
* // With selector
|
|
43
|
+
* const shipCount = useQueryMask(SHIPS_MASK, undefined, (entities) => entities.length);
|
|
44
|
+
*
|
|
36
45
|
* @param includeMask - Bigint bitmask of components that must be present
|
|
37
46
|
* @param excludeMask - Optional bigint bitmask of components that must NOT be present
|
|
38
|
-
* @
|
|
47
|
+
* @param selector - Optional selector function to transform results
|
|
48
|
+
* @returns Array of EntityRef matching the query, or selector result if provided
|
|
39
49
|
*/
|
|
40
50
|
export declare function useQueryMask(includeMask: bigint, excludeMask?: bigint): EntityRef[];
|
|
51
|
+
export declare function useQueryMask<T>(includeMask: bigint, excludeMask: bigint | undefined, selector: QuerySelector<T>): T;
|
|
41
52
|
//# sourceMappingURL=useQuery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../../../src/react/hooks/useQuery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../../../src/react/hooks/useQuery.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AAyEhE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAA;AAC5E,wBAAgB,QAAQ,CAAC,CAAC,EACxB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAC7B,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GACzB,CAAC,CAAA;AAsDJ;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAAA;AACpF,wBAAgB,YAAY,CAAC,CAAC,EAC5B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GACzB,CAAC,CAAA"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
export { SessionProvider, SessionContext, useSessionContext } from './providers';
|
|
5
5
|
export { useSession, useFrame, useQuery, useQueryMask, usePlayers, useCurrentPlayer, useEvent } from './hooks';
|
|
6
6
|
export type { CapturedEvent, UseEventOptions } from './hooks';
|
|
7
|
-
export type { Player, PlayerStore, EntityStore, SessionContextValue, SessionProviderProps, ReactSessionInterface, ReactCreateSession, UseSessionRenderCallback, } from './types/session';
|
|
7
|
+
export type { Player, PlayerStore, EntityStore, SessionContextValue, SessionProviderProps, ReactSessionInterface, ReactCreateSession, UseSessionRenderCallback, QuerySelector, QuerySelectorContext, } from './types/session';
|
|
8
8
|
export { Player as UnicamPlayer, Player as PlayerController } from './Player';
|
|
9
9
|
export { Crosshair } from './Crosshair';
|
|
10
10
|
export type { PlayerProps, PlayerHandle, PlayerIntent, ViewType, Vector3Like, QuaternionLike, InterpolationMode, } from './types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAGhF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC9G,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAG7D,YAAY,EACV,MAAM,EACN,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAGhF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC9G,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAG7D,YAAY,EACV,MAAM,EACN,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,aAAa,EACb,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAQxB,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAG7E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,YAAY,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,cAAc,EACd,iBAAiB,GAClB,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAGvC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAGrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAC5C,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAGpF,OAAO,EACL,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,aAAa,EACb,OAAO,GACR,MAAM,SAAS,CAAA;AAChB,YAAY,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -20,6 +20,17 @@ export type EntityStore = {
|
|
|
20
20
|
entities: EntityRef[];
|
|
21
21
|
updateEntities: (incoming: Generator<EntityRef>) => void;
|
|
22
22
|
};
|
|
23
|
+
/**
|
|
24
|
+
* Context passed to query selectors
|
|
25
|
+
*/
|
|
26
|
+
export type QuerySelectorContext = {
|
|
27
|
+
state: DataView;
|
|
28
|
+
players: Player[];
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Selector function for transforming query results
|
|
32
|
+
*/
|
|
33
|
+
export type QuerySelector<T> = (entities: EntityRef[], context: QuerySelectorContext) => T;
|
|
23
34
|
/**
|
|
24
35
|
* Zustand store for tracking session players
|
|
25
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/react/types/session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/react/types/session.ts"],"names":[],"mappings":"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"}
|
package/dist/vite/index.js
CHANGED
|
@@ -566,7 +566,7 @@ function fieldElemSize(field) {
|
|
|
566
566
|
}
|
|
567
567
|
return getElementSize(field.type);
|
|
568
568
|
}
|
|
569
|
-
function generateStateHeader(schema) {
|
|
569
|
+
function generateStateHeader(schema, maxParticipants) {
|
|
570
570
|
return `// TypeScript State Bindings
|
|
571
571
|
// Auto-generated - do not edit
|
|
572
572
|
// MaxEntities: ${schema.maxEntities}
|
|
@@ -586,6 +586,7 @@ export function stateView(state: Uint8Array): DataView {
|
|
|
586
586
|
// =============================================================================
|
|
587
587
|
|
|
588
588
|
export const MAX_ENTITIES = ${schema.maxEntities};
|
|
589
|
+
export const MAX_PARTICIPANTS = ${maxParticipants};
|
|
589
590
|
export const HEADER_SIZE = ${schema.headerSize};
|
|
590
591
|
export const ENTITY_TABLE_OFFSET = ${schema.entityTableOffset};
|
|
591
592
|
export const ENTITY_RECORD_SIZE = ${schema.entityRecordSize};
|
|
@@ -1937,11 +1938,13 @@ export function get${pascal}${argPascal}FromPayload(payload: Uint8Array): ${tsIn
|
|
|
1937
1938
|
var TypeScriptGenerator = class {
|
|
1938
1939
|
language = "typescript";
|
|
1939
1940
|
opts;
|
|
1941
|
+
maxParticipants;
|
|
1940
1942
|
constructor(opts = {}) {
|
|
1941
1943
|
this.opts = opts;
|
|
1944
|
+
this.maxParticipants = opts.maxParticipants ?? 8;
|
|
1942
1945
|
}
|
|
1943
1946
|
generateState(schema) {
|
|
1944
|
-
let out = generateStateHeader(schema);
|
|
1947
|
+
let out = generateStateHeader(schema, this.maxParticipants);
|
|
1945
1948
|
out += generateComponentOffsets(schema);
|
|
1946
1949
|
out += generateEntityHelpers();
|
|
1947
1950
|
out += generateIterationHelpers(schema);
|
|
@@ -2159,7 +2162,7 @@ function fieldElemSize2(field) {
|
|
|
2159
2162
|
}
|
|
2160
2163
|
return getElementSize(field.type);
|
|
2161
2164
|
}
|
|
2162
|
-
function generateStateHeader2(schema) {
|
|
2165
|
+
function generateStateHeader2(schema, maxParticipants) {
|
|
2163
2166
|
return `// Language: Rust
|
|
2164
2167
|
// MaxEntities: ${schema.maxEntities}
|
|
2165
2168
|
// TotalSize: ${schema.totalSize} bytes
|
|
@@ -2171,6 +2174,7 @@ use core::ptr;
|
|
|
2171
2174
|
// =============================================================================
|
|
2172
2175
|
|
|
2173
2176
|
pub const MAX_ENTITIES: u32 = ${schema.maxEntities};
|
|
2177
|
+
pub const MAX_PARTICIPANTS: u8 = ${maxParticipants};
|
|
2174
2178
|
pub const HEADER_SIZE: u32 = ${schema.headerSize};
|
|
2175
2179
|
pub const ENTITY_TABLE_OFFSET: u32 = ${schema.entityTableOffset};
|
|
2176
2180
|
pub const ENTITY_RECORD_SIZE: u32 = ${schema.entityRecordSize};
|
|
@@ -3358,11 +3362,13 @@ static ALLOC: HostAlloc = HostAlloc;
|
|
|
3358
3362
|
var RustGenerator = class {
|
|
3359
3363
|
language = "rust";
|
|
3360
3364
|
opts;
|
|
3365
|
+
maxParticipants;
|
|
3361
3366
|
constructor(opts = {}) {
|
|
3362
3367
|
this.opts = opts;
|
|
3368
|
+
this.maxParticipants = opts.maxParticipants ?? 8;
|
|
3363
3369
|
}
|
|
3364
3370
|
generateState(schema) {
|
|
3365
|
-
let out = generateStateHeader2(schema);
|
|
3371
|
+
let out = generateStateHeader2(schema, this.maxParticipants);
|
|
3366
3372
|
out += generateComponentOffsets2(schema);
|
|
3367
3373
|
out += generateMemoryHelpers();
|
|
3368
3374
|
out += generateInternalHelpers();
|
|
@@ -3953,7 +3959,7 @@ async function runCodegen(configPath, options) {
|
|
|
3953
3959
|
if (verbose) {
|
|
3954
3960
|
console.log(`[multitap] State buffer size: ${compiledState.totalSize} bytes`);
|
|
3955
3961
|
}
|
|
3956
|
-
const tsGen = new TypeScriptGenerator();
|
|
3962
|
+
const tsGen = new TypeScriptGenerator({ maxParticipants: merged.config.maxParticipants });
|
|
3957
3963
|
const tsCode = tsGen.generateGame(compiledState, compiledInput);
|
|
3958
3964
|
await mkdir(generatedDir, { recursive: true });
|
|
3959
3965
|
const tsPath = join2(generatedDir, "state.ts");
|
|
@@ -3961,7 +3967,7 @@ async function runCodegen(configPath, options) {
|
|
|
3961
3967
|
if (verbose) {
|
|
3962
3968
|
console.log(`[multitap] Generated ${tsPath}`);
|
|
3963
3969
|
}
|
|
3964
|
-
const rustGen = new RustGenerator();
|
|
3970
|
+
const rustGen = new RustGenerator({ maxParticipants: merged.config.maxParticipants });
|
|
3965
3971
|
const rustCode = rustGen.generateGame(compiledState, compiledInput);
|
|
3966
3972
|
for (const pluginPath of merged.pluginOrder) {
|
|
3967
3973
|
const rustDir = join2(pluginPath, "src");
|
package/package.json
CHANGED
package/dist/.stamp
DELETED
|
File without changes
|